2017-02-07 12:59:30 +08:00
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
2016-09-02 17:27:38 +08:00
2017-07-26 12:22:46 +08:00
using osu.Game.Beatmaps ;
2017-05-23 12:55:18 +08:00
using osu.Game.Beatmaps.ControlPoints ;
2017-04-18 15:05:58 +08:00
using osu.Game.Rulesets.Objects ;
2016-11-14 17:54:24 +08:00
2017-04-18 15:05:58 +08:00
namespace osu.Game.Rulesets.Taiko.Objects
2016-09-02 17:27:38 +08:00
{
2017-03-23 10:21:45 +08:00
public abstract class TaikoHitObject : HitObject
2016-09-02 17:27:38 +08:00
{
2017-03-17 12:38:17 +08:00
/// <summary>
2017-08-03 13:01:20 +08:00
/// Default size of a drawable taiko hit object.
2017-03-17 12:38:17 +08:00
/// </summary>
2017-08-03 12:06:04 +08:00
public const float DEFAULT_SIZE = 0.45f ;
2017-04-10 08:23:00 +08:00
/// <summary>
2017-08-03 13:01:20 +08:00
/// Scale multiplier for a strong drawable taiko hit object.
2017-04-10 08:23:00 +08:00
/// </summary>
2017-08-03 12:06:04 +08:00
public const float STRONG_SCALE = 1.4f ;
2017-04-10 08:23:00 +08:00
/// <summary>
2017-08-03 13:01:20 +08:00
/// Default size of a strong drawable taiko hit object.
2017-04-10 08:23:00 +08:00
/// </summary>
2017-08-03 12:06:04 +08:00
public const float DEFAULT_STRONG_SIZE = DEFAULT_SIZE * STRONG_SCALE ;
2016-09-02 17:27:38 +08:00
2017-04-03 13:10:20 +08:00
/// <summary>
2017-05-23 15:47:47 +08:00
/// The time taken from the initial (off-screen) spawn position to the centre of the hit target for a <see cref="TimingControlPoint.BeatLength"/> of 1000ms.
2017-04-03 13:10:20 +08:00
/// </summary>
2017-04-05 15:51:21 +08:00
private const double scroll_time = 6000 ;
2017-04-03 13:10:20 +08:00
2017-04-03 16:19:46 +08:00
/// <summary>
2017-05-23 15:47:47 +08:00
/// Our adjusted <see cref="scroll_time"/> taking into consideration local <see cref="TimingControlPoint.BeatLength"/> and other speed multipliers.
2017-04-03 16:19:46 +08:00
/// </summary>
2017-04-05 10:48:19 +08:00
public double ScrollTime ;
2017-03-17 12:38:17 +08:00
2017-03-23 18:14:21 +08:00
/// <summary>
2017-03-28 09:02:41 +08:00
/// Whether this HitObject is a "strong" type.
/// Strong hit objects give more points for hitting the hit object with both keys.
2017-03-23 18:14:21 +08:00
/// </summary>
2017-03-28 09:02:41 +08:00
public bool IsStrong ;
2017-03-23 18:14:21 +08:00
2017-03-17 12:38:17 +08:00
/// <summary>
/// Whether this HitObject is in Kiai time.
/// </summary>
2017-03-23 10:21:45 +08:00
public bool Kiai { get ; protected set ; }
2017-03-17 12:38:17 +08:00
2017-05-23 12:55:18 +08:00
public override void ApplyDefaults ( ControlPointInfo controlPointInfo , BeatmapDifficulty difficulty )
2017-03-17 12:38:17 +08:00
{
2017-05-23 12:55:18 +08:00
base . ApplyDefaults ( controlPointInfo , difficulty ) ;
2017-03-17 12:38:17 +08:00
2017-05-23 12:55:18 +08:00
TimingControlPoint timingPoint = controlPointInfo . TimingPointAt ( StartTime ) ;
DifficultyControlPoint difficultyPoint = controlPointInfo . DifficultyPointAt ( StartTime ) ;
EffectControlPoint effectPoint = controlPointInfo . EffectPointAt ( StartTime ) ;
2017-03-17 12:38:17 +08:00
2017-05-23 12:55:18 +08:00
ScrollTime = scroll_time * ( timingPoint . BeatLength * difficultyPoint . SpeedMultiplier / 1000 ) / difficulty . SliderMultiplier ;
2017-03-17 12:38:17 +08:00
2017-05-23 12:55:18 +08:00
Kiai | = effectPoint . KiaiMode ;
2017-03-17 12:38:17 +08:00
}
2016-09-02 17:27:38 +08:00
}
2017-03-17 12:38:17 +08:00
}