// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using osu.Framework.Bindables; using osu.Game.Graphics; using osuTK.Graphics; namespace osu.Game.Beatmaps.ControlPoints { public class EffectControlPoint : ControlPoint { public static readonly EffectControlPoint DEFAULT = new EffectControlPoint { KiaiModeBindable = { Disabled = true }, OmitFirstBarLineBindable = { Disabled = true }, ApproachRateBindable = { Disabled = true } }; /// /// Whether the first bar line of this control point is ignored. /// public readonly BindableBool OmitFirstBarLineBindable = new BindableBool(); /// /// The relative approach rate at this control point. /// public readonly BindableDouble ApproachRateBindable = new BindableDouble(1) { Precision = 0.01, Default = 1, MinValue = 0.01, MaxValue = 10 }; /// /// The relative approach rate. /// public double ApproachRate { get => ApproachRateBindable.Value; set => ApproachRateBindable.Value = value; } public override Color4 GetRepresentingColour(OsuColour colours) => colours.Purple; /// /// Whether the first bar line of this control point is ignored. /// public bool OmitFirstBarLine { get => OmitFirstBarLineBindable.Value; set => OmitFirstBarLineBindable.Value = value; } /// /// Whether this control point enables Kiai mode. /// public readonly BindableBool KiaiModeBindable = new BindableBool(); /// /// Whether this control point enables Kiai mode. /// public bool KiaiMode { get => KiaiModeBindable.Value; set => KiaiModeBindable.Value = value; } public override bool IsRedundant(ControlPoint existing) => !OmitFirstBarLine && existing is EffectControlPoint existingEffect && KiaiMode == existingEffect.KiaiMode && OmitFirstBarLine == existingEffect.OmitFirstBarLine && ApproachRate == existingEffect.ApproachRate; public override void CopyFrom(ControlPoint other) { KiaiMode = ((EffectControlPoint)other).KiaiMode; OmitFirstBarLine = ((EffectControlPoint)other).OmitFirstBarLine; ApproachRate = ((EffectControlPoint)other).ApproachRate; base.CopyFrom(other); } } }