using System; 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.AddListener(_ => { 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.AddListener(_ => { 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.OnStarted.AddListener(_ => callback.Invoke()); return tween; } public static ITween OnPause(this ITween tween, Action callback) { tween.OnPaused.AddListener(_ => callback.Invoke()); return tween; } public static ITween OnResume(this ITween tween, Action callback) { tween.OnResumed.AddListener(_ => callback.Invoke()); return tween; } public static ITween OnCancel(this ITween tween, Action callback) { tween.OnCancelled.AddListener(_ => callback.Invoke()); return tween; } public static ITween OnComplete(this ITween tween, Action callback) { tween.OnCompleted.AddListener(_ => callback.Invoke()); return tween; } public static ITween OnEnd(this ITween tween, Action callback) { tween.OnEnded.AddListener(_ => callback.Invoke()); return tween; } public static ITween OnUpdate(this ITween tween, Action callback) { tween.OnUpdated.AddListener(_ => callback.Invoke()); return tween; } public static ITween OnDeltaUpdate(this ITween tween, Action callback) { tween.OnDeltaUpdated.AddListener((_, arguments) => callback.Invoke(arguments.Delta)); return tween; } }