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);
}
}