using Syntriax.Engine.Core; namespace Syntriax.Engine.Systems.Tween; public static class TweenExtensions { public static ITween Loop(this ITween tween, int count) { Tween tweenConcrete = (Tween)tween; int counter = count; tweenConcrete.OnCompleted += _ => { if (counter-- <= 0) return; tweenConcrete.Reset(); tweenConcrete.State = TweenState.Playing; }; return tween; } public static ITween LoopInfinitely(this ITween tween) { Tween tweenConcrete = (Tween)tween; tweenConcrete.OnCompleted += _ => { tweenConcrete.Reset(); tweenConcrete.State = TweenState.Playing; }; return tween; } public static ITween Ease(this ITween tween, IEasing easing) { Tween tweenConcrete = (Tween)tween; tweenConcrete.Easing = easing; return tween; } public static ITween OnStart(this ITween tween, Action callback) { Tween tweenConcrete = (Tween)tween; tweenConcrete.OnStarted += _ => callback.InvokeSafe(); return tween; } public static ITween OnPause(this ITween tween, Action callback) { Tween tweenConcrete = (Tween)tween; tweenConcrete.OnPaused += _ => callback.InvokeSafe(); return tween; } public static ITween OnResume(this ITween tween, Action callback) { Tween tweenConcrete = (Tween)tween; tweenConcrete.OnResumed += _ => callback.InvokeSafe(); return tween; } public static ITween OnCancel(this ITween tween, Action callback) { Tween tweenConcrete = (Tween)tween; tweenConcrete.OnCancelled += _ => callback.InvokeSafe(); return tween; } public static ITween OnComplete(this ITween tween, Action callback) { Tween tweenConcrete = (Tween)tween; tweenConcrete.OnCompleted += _ => callback.InvokeSafe(); return tween; } public static ITween OnEnd(this ITween tween, Action callback) { Tween tweenConcrete = (Tween)tween; tweenConcrete.OnEnded += _ => callback.InvokeSafe(); return tween; } public static ITween OnUpdate(this ITween tween, Action callback) { Tween tweenConcrete = (Tween)tween; tweenConcrete.OnUpdated += _ => callback.InvokeSafe(); return tween; } public static ITween OnDeltaUpdate(this ITween tween, Action callback) { Tween tweenConcrete = (Tween)tween; tweenConcrete.OnDeltaUpdated += (_, delta) => callback.InvokeSafe(delta); return tween; } }