using System;
namespace OM
{
///
/// Provides extension methods for the EasingFunction-related enums
/// (`EasingFunctionIdle`, `EasingFunctionPingPong`).
/// These methods allow easy conversion from the specific enum types (Idle/PingPong)
/// back to the comprehensive `EasingFunction` enum used by the `EaseLibrary`.
///
public static class EasingLibraryExtension
{
///
/// Converts an `EasingFunctionIdle` enum value to its corresponding `EasingFunction` value.
///
/// The EasingFunctionIdle value to convert.
/// The equivalent EasingFunction value.
/// Thrown if the input `idle` value does not have a corresponding mapping in the `EasingFunction` enum (should not happen if enums are kept synchronized).
public static EasingFunction CastToEasingFunction(this EasingFunctionIdle idle)
{
// Use a switch expression for concise mapping.
return idle switch
{
// Map each Idle value to its direct counterpart in the main EasingFunction enum.
EasingFunctionIdle.Linear => EasingFunction.Linear,
EasingFunctionIdle.InSine => EasingFunction.InSine,
EasingFunctionIdle.OutSine => EasingFunction.OutSine,
EasingFunctionIdle.InOutSine => EasingFunction.InOutSine,
EasingFunctionIdle.InCubic => EasingFunction.InCubic,
EasingFunctionIdle.OutCubic => EasingFunction.OutCubic,
EasingFunctionIdle.InOutCubic => EasingFunction.InOutCubic,
EasingFunctionIdle.InQuint => EasingFunction.InQuint,
EasingFunctionIdle.OutQuint => EasingFunction.OutQuint,
EasingFunctionIdle.InOutQuint => EasingFunction.InOutQuint,
EasingFunctionIdle.InCirc => EasingFunction.InCirc,
EasingFunctionIdle.OutCirc => EasingFunction.OutCirc,
EasingFunctionIdle.InOutCirc => EasingFunction.InOutCirc,
EasingFunctionIdle.InElastic => EasingFunction.InElastic,
EasingFunctionIdle.OutElastic => EasingFunction.OutElastic,
EasingFunctionIdle.InOutElastic => EasingFunction.InOutElastic,
EasingFunctionIdle.InQuart => EasingFunction.InQuart,
EasingFunctionIdle.OutQuart => EasingFunction.OutQuart,
EasingFunctionIdle.InOutQuart => EasingFunction.InOutQuart,
EasingFunctionIdle.InExpo => EasingFunction.InExpo,
EasingFunctionIdle.OutExpo => EasingFunction.OutExpo,
EasingFunctionIdle.InOutExpo => EasingFunction.InOutExpo,
EasingFunctionIdle.InQuad => EasingFunction.InQuad,
EasingFunctionIdle.OutQuad => EasingFunction.OutQuad,
EasingFunctionIdle.InOutQuad => EasingFunction.InOutQuad,
EasingFunctionIdle.InBack => EasingFunction.InBack,
EasingFunctionIdle.OutBack => EasingFunction.OutBack,
EasingFunctionIdle.InOutBack => EasingFunction.InOutBack,
EasingFunctionIdle.InBounce => EasingFunction.InBounce,
EasingFunctionIdle.OutBounce => EasingFunction.OutBounce,
EasingFunctionIdle.InOutBounce => EasingFunction.InOutBounce,
// Fallback: If a value exists in EasingFunctionIdle but not here, throw an exception.
_ => throw new ArgumentOutOfRangeException(nameof(idle), idle, "Enum value not mapped.")
};
}
///
/// Converts an `EasingFunctionPingPong` enum value to its corresponding `EasingFunction` value.
///
/// The EasingFunctionPingPong value to convert.
/// The equivalent EasingFunction value.
/// Thrown if the input `pingPong` value does not have a corresponding mapping in the `EasingFunction` enum (should not happen if enums are kept synchronized).
public static EasingFunction CastToEasingFunction(this EasingFunctionPingPong pingPong)
{
// Use a switch expression for concise mapping.
return pingPong switch
{
// Map each PingPong value to its direct counterpart in the main EasingFunction enum.
EasingFunctionPingPong.LinearPingPong => EasingFunction.LinearPingPong,
EasingFunctionPingPong.InSinePingPong => EasingFunction.InSinePingPong,
EasingFunctionPingPong.OutSinePingPong => EasingFunction.OutSinePingPong,
EasingFunctionPingPong.InOutSinePingPong => EasingFunction.InOutSinePingPong,
EasingFunctionPingPong.InCubicPingPong => EasingFunction.InCubicPingPong,
EasingFunctionPingPong.OutCubicPingPong => EasingFunction.OutCubicPingPong,
EasingFunctionPingPong.InOutCubicPingPong => EasingFunction.InOutCubicPingPong,
EasingFunctionPingPong.InQuintPingPong => EasingFunction.InQuintPingPong,
EasingFunctionPingPong.OutQuintPingPong => EasingFunction.OutQuintPingPong,
EasingFunctionPingPong.InOutQuintPingPong => EasingFunction.InOutQuintPingPong,
EasingFunctionPingPong.InCircPingPong => EasingFunction.InCircPingPong,
EasingFunctionPingPong.OutCircPingPong => EasingFunction.OutCircPingPong,
EasingFunctionPingPong.InOutCircPingPong => EasingFunction.InOutCircPingPong,
EasingFunctionPingPong.InElasticPingPong => EasingFunction.InElasticPingPong,
EasingFunctionPingPong.OutElasticPingPong => EasingFunction.OutElasticPingPong,
EasingFunctionPingPong.InOutElasticPingPong => EasingFunction.InOutElasticPingPong,
EasingFunctionPingPong.InQuartPingPong => EasingFunction.InQuartPingPong,
EasingFunctionPingPong.OutQuartPingPong => EasingFunction.OutQuartPingPong,
EasingFunctionPingPong.InOutQuartPingPong => EasingFunction.InOutQuartPingPong,
EasingFunctionPingPong.InExpoPingPong => EasingFunction.InExpoPingPong,
EasingFunctionPingPong.OutExpoPingPong => EasingFunction.OutExpoPingPong,
EasingFunctionPingPong.InOutExpoPingPong => EasingFunction.InOutExpoPingPong,
EasingFunctionPingPong.InQuadPingPong => EasingFunction.InQuadPingPong,
EasingFunctionPingPong.OutQuadPingPong => EasingFunction.OutQuadPingPong,
EasingFunctionPingPong.InOutQuadPingPong => EasingFunction.InOutQuadPingPong,
EasingFunctionPingPong.InBackPingPong => EasingFunction.InBackPingPong,
EasingFunctionPingPong.OutBackPingPong => EasingFunction.OutBackPingPong,
EasingFunctionPingPong.InOutBackPingPong => EasingFunction.InOutBackPingPong,
EasingFunctionPingPong.InBouncePingPong => EasingFunction.InBouncePingPong,
EasingFunctionPingPong.OutBouncePingPong => EasingFunction.OutBouncePingPong,
EasingFunctionPingPong.InOutBouncePingPong => EasingFunction.InOutBouncePingPong,
// Fallback: If a value exists in EasingFunctionPingPong but not here, throw an exception.
_ => throw new ArgumentOutOfRangeException(nameof(pingPong), pingPong, "Enum value not mapped.")
};
}
}
}