using Engine.Core; namespace Engine.Systems.Tween; public static class TweenTriangleExtensions { private static readonly BoxedPool boxedTrianglePool = new(2); public static ITween TweenTriangle(this Triangle initialTriangle, ITweenManager tweenManager, float duration, Triangle targetTriangle, System.Action setMethod) { Boxed boxedInitial = boxedTrianglePool.Get(initialTriangle); Boxed boxedTarget = boxedTrianglePool.Get(targetTriangle); ITween tween = tweenManager.StartTween(duration, t => setMethod?.Invoke( new Triangle( boxedInitial.Value.A.Lerp(boxedTarget.Value.A, t), boxedInitial.Value.B.Lerp(boxedTarget.Value.B, t), boxedInitial.Value.C.Lerp(boxedTarget.Value.C, t) ) ) ); tween.OnComplete(() => { boxedTrianglePool.Return(boxedInitial); boxedTrianglePool.Return(boxedTarget); }); return tween; } }