// Copyright (c) 2007-2017 ppy Pty Ltd . // Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE using osu.Game.Beatmaps.Timing; using osu.Game.Database; using osu.Game.Modes.Objects; namespace osu.Game.Modes.Taiko.Objects { public abstract class TaikoHitObject : HitObject { /// /// HitCircle radius. /// public const float CIRCLE_RADIUS = 42f; /// /// Time (in milliseconds) to scroll in the hit object with a speed-adjusted beat length of 1 second. /// public const double BASE_SCROLL_TIME = 6000; /// /// The velocity multiplier applied to this hit object. /// public float VelocityMultiplier = 1; /// /// The time to scroll in the HitObject. /// public double PreEmpt; /// /// Whether this HitObject is a "strong" type. /// Strong hit objects give more points for hitting the hit object with both keys. /// public bool IsStrong; /// /// Whether this HitObject is in Kiai time. /// public bool Kiai { get; protected set; } public override void ApplyDefaults(TimingInfo timing, BeatmapDifficulty difficulty) { base.ApplyDefaults(timing, difficulty); PreEmpt = BASE_SCROLL_TIME / difficulty.SliderMultiplier * timing.BeatLengthAt(StartTime) * timing.SpeedMultiplierAt(StartTime) / VelocityMultiplier / 1000; ControlPoint overridePoint; Kiai = timing.TimingPointAt(StartTime, out overridePoint).KiaiMode; if (overridePoint != null) Kiai |= overridePoint.KiaiMode; } } }