Simplify usage of ConvertHitObjectParser

This commit is contained in:
smoogipoo
2018-08-15 10:24:56 +09:00
parent 4832a8ff19
commit ce77473910
6 changed files with 43 additions and 12 deletions

View File

@ -126,16 +126,16 @@ namespace osu.Game.Beatmaps.Formats
switch (beatmap.BeatmapInfo.RulesetID) switch (beatmap.BeatmapInfo.RulesetID)
{ {
case 0: case 0:
parser = new Rulesets.Objects.Legacy.Osu.ConvertHitObjectParser(); parser = new Rulesets.Objects.Legacy.Osu.ConvertHitObjectParser(getOffsetTime(), FormatVersion);
break; break;
case 1: case 1:
parser = new Rulesets.Objects.Legacy.Taiko.ConvertHitObjectParser(); parser = new Rulesets.Objects.Legacy.Taiko.ConvertHitObjectParser(getOffsetTime(), FormatVersion);
break; break;
case 2: case 2:
parser = new Rulesets.Objects.Legacy.Catch.ConvertHitObjectParser(); parser = new Rulesets.Objects.Legacy.Catch.ConvertHitObjectParser(getOffsetTime(), FormatVersion);
break; break;
case 3: case 3:
parser = new Rulesets.Objects.Legacy.Mania.ConvertHitObjectParser(); parser = new Rulesets.Objects.Legacy.Mania.ConvertHitObjectParser(getOffsetTime(), FormatVersion);
break; break;
} }
@ -405,9 +405,9 @@ namespace osu.Game.Beatmaps.Formats
{ {
// If the ruleset wasn't specified, assume the osu!standard ruleset. // If the ruleset wasn't specified, assume the osu!standard ruleset.
if (parser == null) if (parser == null)
parser = new Rulesets.Objects.Legacy.Osu.ConvertHitObjectParser(); parser = new Rulesets.Objects.Legacy.Osu.ConvertHitObjectParser(getOffsetTime(), FormatVersion);
var obj = parser.Parse(line, getOffsetTime()); var obj = parser.Parse(line);
if (obj != null) if (obj != null)
{ {

View File

@ -13,6 +13,11 @@ namespace osu.Game.Rulesets.Objects.Legacy.Catch
/// </summary> /// </summary>
public class ConvertHitObjectParser : Legacy.ConvertHitObjectParser public class ConvertHitObjectParser : Legacy.ConvertHitObjectParser
{ {
public ConvertHitObjectParser(double offset, int formatVersion)
: base(offset, formatVersion)
{
}
protected override HitObject CreateHit(Vector2 position, bool newCombo) protected override HitObject CreateHit(Vector2 position, bool newCombo)
{ {
return new ConvertHit return new ConvertHit

View File

@ -19,12 +19,23 @@ namespace osu.Game.Rulesets.Objects.Legacy
/// </summary> /// </summary>
public abstract class ConvertHitObjectParser : HitObjectParser public abstract class ConvertHitObjectParser : HitObjectParser
{ {
public override HitObject Parse(string text) /// <summary>
/// The offset to apply to all time values.
/// </summary>
public double Offset;
/// <summary>
/// The beatmap version.
/// </summary>
public int FormatVersion = LegacyBeatmapDecoder.LATEST_VERSION;
protected ConvertHitObjectParser(double offset, int formatVersion)
{ {
return Parse(text, 0); Offset = offset;
formatVersion = formatVersion;
} }
public HitObject Parse(string text, double offset) public override HitObject Parse(string text)
{ {
try try
{ {
@ -152,7 +163,7 @@ namespace osu.Game.Rulesets.Objects.Legacy
} }
else if (type.HasFlag(ConvertHitObjectType.Spinner)) else if (type.HasFlag(ConvertHitObjectType.Spinner))
{ {
result = CreateSpinner(new Vector2(512, 384) / 2, Convert.ToDouble(split[5], CultureInfo.InvariantCulture) + offset); result = CreateSpinner(new Vector2(512, 384) / 2, Convert.ToDouble(split[5], CultureInfo.InvariantCulture) + Offset);
if (split.Length > 6) if (split.Length > 6)
readCustomSampleBanks(split[6], bankInfo); readCustomSampleBanks(split[6], bankInfo);
@ -170,13 +181,13 @@ namespace osu.Game.Rulesets.Objects.Legacy
readCustomSampleBanks(string.Join(":", ss.Skip(1)), bankInfo); readCustomSampleBanks(string.Join(":", ss.Skip(1)), bankInfo);
} }
result = CreateHold(pos, combo, endTime + offset); result = CreateHold(pos, combo, endTime + Offset);
} }
if (result == null) if (result == null)
throw new InvalidOperationException($@"Unknown hit object type {type}."); throw new InvalidOperationException($@"Unknown hit object type {type}.");
result.StartTime = Convert.ToDouble(split[2], CultureInfo.InvariantCulture) + offset; result.StartTime = Convert.ToDouble(split[2], CultureInfo.InvariantCulture) + Offset;
result.Samples = convertSoundType(soundType, bankInfo); result.Samples = convertSoundType(soundType, bankInfo);
return result; return result;

View File

@ -13,6 +13,11 @@ namespace osu.Game.Rulesets.Objects.Legacy.Mania
/// </summary> /// </summary>
public class ConvertHitObjectParser : Legacy.ConvertHitObjectParser public class ConvertHitObjectParser : Legacy.ConvertHitObjectParser
{ {
public ConvertHitObjectParser(double offset, int formatVersion)
: base(offset, formatVersion)
{
}
protected override HitObject CreateHit(Vector2 position, bool newCombo) protected override HitObject CreateHit(Vector2 position, bool newCombo)
{ {
return new ConvertHit return new ConvertHit

View File

@ -14,6 +14,11 @@ namespace osu.Game.Rulesets.Objects.Legacy.Osu
/// </summary> /// </summary>
public class ConvertHitObjectParser : Legacy.ConvertHitObjectParser public class ConvertHitObjectParser : Legacy.ConvertHitObjectParser
{ {
public ConvertHitObjectParser(double offset, int formatVersion)
: base(offset, formatVersion)
{
}
protected override HitObject CreateHit(Vector2 position, bool newCombo) protected override HitObject CreateHit(Vector2 position, bool newCombo)
{ {
return new ConvertHit return new ConvertHit

View File

@ -13,6 +13,11 @@ namespace osu.Game.Rulesets.Objects.Legacy.Taiko
/// </summary> /// </summary>
public class ConvertHitObjectParser : Legacy.ConvertHitObjectParser public class ConvertHitObjectParser : Legacy.ConvertHitObjectParser
{ {
public ConvertHitObjectParser(double offset, int formatVersion)
: base(offset, formatVersion)
{
}
protected override HitObject CreateHit(Vector2 position, bool newCombo) protected override HitObject CreateHit(Vector2 position, bool newCombo)
{ {
return new ConvertHit return new ConvertHit