Core/TransitionData.cs
using System;
using Sandbox;
using Sandbox.Utility;

namespace MANIFOLD.Camera {
    public enum TransitionMode { Cut, Predefined, Curve }
    public enum PredifinedEase { Linear, EaseIn, EaseOut, EaseInOut, SineEaseIn, SineEaseOut, SineEaseInOut, QuadraticIn, QuadraticOut, QuadraticInOut, ExpoIn, ExpoOut, ExpoInOut, BounceIn, BounceOut, BounceInOut }

    [Serializable]
    public sealed class TransitionData {
        public TransitionMode Mode { get; set; } = TransitionMode.Predefined;
        [HideIf(nameof(Mode), TransitionMode.Cut)]
        public float Duration { get; set; } = 1f;
        /// <summary>
        /// Should the ease be applied in an absolute manner?
        /// </summary>
        [Space, HideIf(nameof(Mode), TransitionMode.Cut)]
        public bool AbsoluteEase { get; set; } = false;
        [ShowIf(nameof(Mode), TransitionMode.Predefined)]
        public PredifinedEase EaseFunction { get; set; } = PredifinedEase.EaseOut;
        [ShowIf(nameof(Mode), TransitionMode.Curve)]
        public Curve EaseCurve { get; set; }
    }
}