1
0
mirror of https://github.com/ppy/osu.git synced 2024-09-21 15:27:24 +08:00

Allow multiple mappings to be generated for a single hitobject

This commit is contained in:
smoogipoo 2018-03-02 02:02:09 +09:00
parent 9d035fc5d0
commit 573d6d1b5f
4 changed files with 27 additions and 18 deletions

View File

@ -2,6 +2,7 @@
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System; using System;
using System.Collections.Generic;
using NUnit.Framework; using NUnit.Framework;
using osu.Framework.MathUtils; using osu.Framework.MathUtils;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
@ -26,12 +27,15 @@ namespace osu.Game.Rulesets.Mania.Tests
base.Test(beatmapId); base.Test(beatmapId);
} }
protected override ConvertValue CreateConvertValue(HitObject hitObject) => new ConvertValue protected override IEnumerable<ConvertValue> CreateConvertValue(HitObject hitObject)
{ {
StartTime = hitObject.StartTime, yield return new ConvertValue
EndTime = (hitObject as IHasEndTime)?.EndTime ?? hitObject.StartTime, {
Column = ((ManiaHitObject)hitObject).Column StartTime = hitObject.StartTime,
}; EndTime = (hitObject as IHasEndTime)?.EndTime ?? hitObject.StartTime,
Column = ((ManiaHitObject)hitObject).Column
};
}
protected override ITestableBeatmapConverter CreateConverter(Beatmap beatmap) => new ManiaBeatmapConverter(isForCurrentRuleset, beatmap); protected override ITestableBeatmapConverter CreateConverter(Beatmap beatmap) => new ManiaBeatmapConverter(isForCurrentRuleset, beatmap);
} }

View File

@ -2,6 +2,7 @@
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System; using System;
using System.Collections.Generic;
using NUnit.Framework; using NUnit.Framework;
using osu.Framework.MathUtils; using osu.Framework.MathUtils;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
@ -24,12 +25,12 @@ namespace osu.Game.Rulesets.Osu.Tests
base.Test(beatmapId); base.Test(beatmapId);
} }
protected override ConvertValue CreateConvertValue(HitObject hitObject) protected override IEnumerable<ConvertValue> CreateConvertValue(HitObject hitObject)
{ {
var startPosition = (hitObject as IHasPosition)?.Position ?? new Vector2(256, 192); var startPosition = (hitObject as IHasPosition)?.Position ?? new Vector2(256, 192);
var endPosition = (hitObject as Slider)?.EndPosition ?? startPosition; var endPosition = (hitObject as Slider)?.EndPosition ?? startPosition;
return new ConvertValue yield return new ConvertValue
{ {
StartTime = hitObject.StartTime, StartTime = hitObject.StartTime,
EndTime = (hitObject as IHasEndTime)?.EndTime ?? hitObject.StartTime, EndTime = (hitObject as IHasEndTime)?.EndTime ?? hitObject.StartTime,

View File

@ -2,6 +2,7 @@
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using System; using System;
using System.Collections.Generic;
using NUnit.Framework; using NUnit.Framework;
using osu.Framework.MathUtils; using osu.Framework.MathUtils;
using osu.Game.Beatmaps; using osu.Game.Beatmaps;
@ -26,16 +27,19 @@ namespace osu.Game.Rulesets.Taiko.Tests
base.Test(beatmapId); base.Test(beatmapId);
} }
protected override ConvertValue CreateConvertValue(HitObject hitObject) => new ConvertValue protected override IEnumerable<ConvertValue> CreateConvertValue(HitObject hitObject)
{ {
StartTime = hitObject.StartTime, yield return new ConvertValue
EndTime = (hitObject as IHasEndTime)?.EndTime ?? hitObject.StartTime, {
IsRim = hitObject is RimHit, StartTime = hitObject.StartTime,
IsCentre = hitObject is CentreHit, EndTime = (hitObject as IHasEndTime)?.EndTime ?? hitObject.StartTime,
IsDrumRoll = hitObject is DrumRoll, IsRim = hitObject is RimHit,
IsSwell = hitObject is Swell, IsCentre = hitObject is CentreHit,
IsStrong = ((TaikoHitObject)hitObject).IsStrong IsDrumRoll = hitObject is DrumRoll,
}; IsSwell = hitObject is Swell,
IsStrong = ((TaikoHitObject)hitObject).IsStrong
};
}
protected override ITestableBeatmapConverter CreateConverter(Beatmap beatmap) => new TaikoBeatmapConverter(isForCurrentRuleset); protected override ITestableBeatmapConverter CreateConverter(Beatmap beatmap) => new TaikoBeatmapConverter(isForCurrentRuleset);
} }

View File

@ -88,7 +88,7 @@ namespace osu.Game.Tests.Beatmaps
var mapping = new ConvertMapping { StartTime = orig.StartTime }; var mapping = new ConvertMapping { StartTime = orig.StartTime };
foreach (var obj in converted) foreach (var obj in converted)
mapping.Objects.Add(CreateConvertValue(obj)); mapping.Objects.AddRange(CreateConvertValue(obj));
result.Mappings.Add(mapping); result.Mappings.Add(mapping);
}; };
@ -121,7 +121,7 @@ namespace osu.Game.Tests.Beatmaps
return Assembly.LoadFrom(Path.Combine(localPath, $"{ResourceAssembly}.dll")).GetManifestResourceStream($@"{ResourceAssembly}.Resources.{name}"); return Assembly.LoadFrom(Path.Combine(localPath, $"{ResourceAssembly}.dll")).GetManifestResourceStream($@"{ResourceAssembly}.Resources.{name}");
} }
protected abstract TConvertValue CreateConvertValue(HitObject hitObject); protected abstract IEnumerable<TConvertValue> CreateConvertValue(HitObject hitObject);
protected abstract ITestableBeatmapConverter CreateConverter(Beatmap beatmap); protected abstract ITestableBeatmapConverter CreateConverter(Beatmap beatmap);
private class ConvertMapping private class ConvertMapping