using RhythmBase.Events; using System.Reflection; namespace RhythmBase.Components.Easing { /// /// Represents an easing property. /// public interface IEaseProperty { } /// /// Represents an easing property with a specific value type. /// /// The type of the value. public interface IEaseProperty : IEaseProperty where TValue : new() { /// /// Gets the type of the value. /// static Type Type => typeof(TValue); /// /// Gets the value at the specified beat. /// /// The beat at which to get the value. /// The value at the specified beat. abstract TValue GetValue(RDBeat beat); /// /// Determines whether the specified data can be converted to the value type. /// /// The data to check. /// true if the data can be converted; otherwise, false. static abstract bool CanConvert(object data); /// /// Converts the specified easing event data to an array of easing nodes. /// /// The easing event data to convert. /// The property information of the easing event. /// An array of easing nodes. static abstract EaseNode?[] Convert(IEaseEvent data, PropertyInfo property); /// /// Creates an easing property with the specified original value and easing event data. /// /// The original value before any easing is applied. /// The array of easing event data. /// The property information of the easing event. /// An easing property instance. static abstract IEaseProperty CreateEaseProperty(TValue originalValue, IEaseEvent[] data, PropertyInfo property); } }