// Copyright (c) ppy Pty Ltd . Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. using System; using osu.Framework.Bindables; using osu.Game.Graphics; using osuTK.Graphics; namespace osu.Game.Beatmaps.ControlPoints { public class EffectControlPoint : ControlPoint, IEquatable { public static readonly EffectControlPoint DEFAULT = new EffectControlPoint { KiaiModeBindable = { Disabled = true }, ScrollSpeedBindable = { Disabled = true } }; /// /// The relative scroll speed at this control point. /// public readonly BindableDouble ScrollSpeedBindable = new BindableDouble(1) { MinValue = 0.01, MaxValue = 10 }; /// /// The relative scroll speed. /// public double ScrollSpeed { get => ScrollSpeedBindable.Value; set => ScrollSpeedBindable.Value = value; } public override Color4 GetRepresentingColour(OsuColour colours) => colours.Purple; /// /// 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) => existing is EffectControlPoint existingEffect && KiaiMode == existingEffect.KiaiMode && ScrollSpeed == existingEffect.ScrollSpeed; public override void CopyFrom(ControlPoint other) { KiaiMode = ((EffectControlPoint)other).KiaiMode; ScrollSpeed = ((EffectControlPoint)other).ScrollSpeed; base.CopyFrom(other); } public override bool Equals(ControlPoint? other) => other is EffectControlPoint otherEffectControlPoint && Equals(otherEffectControlPoint); public bool Equals(EffectControlPoint? other) => base.Equals(other) && ScrollSpeed == other.ScrollSpeed && KiaiMode == other.KiaiMode; public override int GetHashCode() => HashCode.Combine(base.GetHashCode(), ScrollSpeed, KiaiMode); } }