namespace IFSEngine.Animation;
/// <summary>
/// Blender's keyframe interpolation presets, as offered by its Graph Editor's
/// "Set Keyframe Interpolation" menu.
/// </summary>
/// <remarks>
/// <para>
/// This is ADDITIVE to <see cref="InterpolationMode"/>, not a replacement for it, and the
/// distinction is a file-format one. <c>IfsSerializer</c> uses Newtonsoft with no
/// <c>StringEnumConverter</c>, so enums are written as bare integers - a new member of
/// <see cref="InterpolationMode"/> would write an integer the upstream Windows app cannot
/// read, and <see cref="Channel.EvaluateAt"/> ends in <c>throw new NotImplementedException()</c>.
/// Unknown PROPERTIES, on the other hand, Newtonsoft ignores by default, so a new field
/// degrades where a new enum value crashes.
/// </para>
/// <para>
/// Hence <see cref="Legacy"/> = 0: a keyframe from a file written before this existed
/// deserializes to it and evaluates exactly as it always did, through
/// <see cref="Keyframe.InterpolationMode"/> and <see cref="Keyframe.EasingPower"/>.
/// </para>
/// </remarks>
public enum KeyframeType
{
/// <summary>Evaluate through <see cref="Keyframe.InterpolationMode"/>. The pre-existing behaviour.</summary>
Legacy = 0,
// Interpolation
Constant,
Linear,
Bezier,
// Easing (by strength)
Sinusoidal,
Quadratic,
Cubic,
Quartic,
Quintic,
Exponential,
Circular,
// Dynamic effects
Back,
Bounce,
Elastic,
}