From e9651b7317711a9c0393fdf3f0fca8468346e649 Mon Sep 17 00:00:00 2001 From: Syntriax Date: Tue, 31 Mar 2026 23:32:41 +0300 Subject: [PATCH] feat: added trail color easing --- Engine | 2 +- Shared/Behaviours/BallTrail.cs | 22 ++++++++++++++-------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/Engine b/Engine index c11aced..816d6e1 160000 --- a/Engine +++ b/Engine @@ -1 +1 @@ -Subproject commit c11aced8d2e81ae967d55b91ab76b8fcb2089a3a +Subproject commit 816d6e18460e4192a0cde6dac55058a2f5cf6a18 diff --git a/Shared/Behaviours/BallTrail.cs b/Shared/Behaviours/BallTrail.cs index 784683c..325b24d 100644 --- a/Shared/Behaviours/BallTrail.cs +++ b/Shared/Behaviours/BallTrail.cs @@ -11,10 +11,14 @@ namespace Pong.Behaviours; public class BallTrail : Behaviour2D, IPostPhysicsUpdate, IDrawableTriangle { private float width = 10f; - private ColorRGBA colorBase = new ColorRGBA(255, 255, 255); - private int trailTickPeriod = 20; private IEasing widthCurve = EaseInCirc.Instance; + private ColorRGBA colorBase = new ColorRGBA(255, 255, 255, 255); + private ColorRGBA colorEnd = new ColorRGBA(255, 255, 255, 0); + private IEasing colorEasing = EaseOutSine.Instance; + + private int trailTickPeriod = 20; + private readonly LinkedList trailPoints = new(); public void PostPhysicsUpdate(float delta) @@ -31,24 +35,26 @@ public class BallTrail : Behaviour2D, IPostPhysicsUpdate, IDrawableTriangle Line2D line = new(trailPoints.ElementAt(i), trailPoints.ElementAt(i + 1)); Vector2D perpendicularDirection = line.Direction.Perpendicular(); - float t = widthCurve.Evaluate(1f - ((float)i / trailPoints.Count)); - float tPlus = widthCurve.Evaluate(1f - ((float)(i + 1) / trailPoints.Count)); + float t = (float)i / trailPoints.Count; + float tPlus = (float)(i + 1) / trailPoints.Count; - float firstWidth = t * width; - float endWidth = tPlus * width; + float firstWidth = width * widthCurve.Evaluate(1f - t); + float endWidth = width * widthCurve.Evaluate(1f - tPlus); + + ColorRGBA color = colorBase.Lerp(colorEnd, colorEasing.Evaluate(t)); triangleBatch.Draw( new(line.From + perpendicularDirection * firstWidth, line.From - perpendicularDirection * firstWidth, line.To + perpendicularDirection * endWidth), - colorBase + color ); triangleBatch.Draw( new(line.From - perpendicularDirection * firstWidth, line.To - perpendicularDirection * endWidth, line.To + perpendicularDirection * endWidth), - colorBase + color ); } }