Add a velocity multiplier to taiko hit objects.

This will be usable from the editor moving forward also - where every hit object can have its own velocity multiplier on top of the control point one.
This commit is contained in:
smoogipooo 2017-04-03 17:19:46 +09:00
parent aad8851460
commit d7ed392f27
3 changed files with 16 additions and 9 deletions

View File

@ -26,8 +26,6 @@ internal class TaikoBeatmapConverter : IBeatmapConverter<TaikoHitObject>
public Beatmap<TaikoHitObject> Convert(Beatmap original)
{
if (original is LegacyBeatmap)
original.TimingInfo.ControlPoints.ForEach(c => c.VelocityAdjustment /= legacy_velocity_scale);
return new Beatmap<TaikoHitObject>(original)
{
@ -73,7 +71,8 @@ private IEnumerable<TaikoHitObject> convertHitObject(HitObject obj, Beatmap beat
{
StartTime = obj.StartTime,
Sample = obj.Sample,
IsStrong = strong
IsStrong = strong,
VelocityMultiplier = legacy_velocity_scale
};
}
}
@ -85,7 +84,8 @@ private IEnumerable<TaikoHitObject> convertHitObject(HitObject obj, Beatmap beat
Sample = obj.Sample,
IsStrong = strong,
Distance = distanceData.Distance * (repeatsData?.RepeatCount ?? 1) * legacy_velocity_scale,
TickRate = beatmap.BeatmapInfo.Difficulty.SliderTickRate == 3 ? 3 : 4
TickRate = beatmap.BeatmapInfo.Difficulty.SliderTickRate == 3 ? 3 : 4,
VelocityMultiplier = legacy_velocity_scale
};
}
}
@ -98,9 +98,9 @@ private IEnumerable<TaikoHitObject> convertHitObject(HitObject obj, Beatmap beat
StartTime = obj.StartTime,
Sample = obj.Sample,
IsStrong = strong,
EndTime = endTimeData.EndTime,
RequiredHits = (int)Math.Max(1, endTimeData.Duration / 1000 * hitMultiplier)
RequiredHits = (int)Math.Max(1, endTimeData.Duration / 1000 * hitMultiplier),
VelocityMultiplier = legacy_velocity_scale
};
}
else
@ -113,7 +113,8 @@ private IEnumerable<TaikoHitObject> convertHitObject(HitObject obj, Beatmap beat
{
StartTime = obj.StartTime,
Sample = obj.Sample,
IsStrong = strong
IsStrong = strong,
VelocityMultiplier = legacy_velocity_scale
};
}
else
@ -123,6 +124,7 @@ private IEnumerable<TaikoHitObject> convertHitObject(HitObject obj, Beatmap beat
StartTime = obj.StartTime,
Sample = obj.Sample,
IsStrong = strong,
VelocityMultiplier = legacy_velocity_scale
};
}
}

View File

@ -69,7 +69,7 @@ public override void ApplyDefaults(TimingInfo timing, BeatmapDifficulty difficul
{
base.ApplyDefaults(timing, difficulty);
Velocity = base_distance * difficulty.SliderMultiplier * difficulty.SliderTickRate * timing.BeatLengthAt(StartTime) * timing.SpeedMultiplierAt(StartTime);
Velocity = base_distance * difficulty.SliderMultiplier * VelocityMultiplier / timing.BeatLengthAt(StartTime);
tickSpacing = timing.BeatLengthAt(StartTime) / TickRate;
RequiredGoodHits = TotalTicks * Math.Min(0.15, 0.05 + 0.10 / 6 * difficulty.OverallDifficulty);

View File

@ -19,6 +19,11 @@ public abstract class TaikoHitObject : HitObject
/// </summary>
private const double base_scroll_time = 6000;
/// <summary>
/// The velocity multiplier applied to this hit object.
/// </summary>
public float VelocityMultiplier = 1;
/// <summary>
/// The time to scroll in the HitObject.
/// </summary>
@ -39,7 +44,7 @@ public override void ApplyDefaults(TimingInfo timing, BeatmapDifficulty difficul
{
base.ApplyDefaults(timing, difficulty);
PreEmpt = base_scroll_time / difficulty.SliderMultiplier * timing.BeatLengthAt(StartTime) * timing.SpeedMultiplierAt(StartTime) / 1000;
PreEmpt = base_scroll_time / difficulty.SliderMultiplier * timing.BeatLengthAt(StartTime) * timing.SpeedMultiplierAt(StartTime) / VelocityMultiplier / 1000;
ControlPoint overridePoint;
Kiai = timing.TimingPointAt(StartTime, out overridePoint).KiaiMode;