OverviewFilesCommitsIssuesDocsReleasesPeers

ifsrenderer-linux / IFSEngine / Animation / KeyframeType.cs

47 lines · csharp ref:
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,
}