feat: added trail color easing

This commit is contained in:
2026-03-31 23:32:41 +03:00
parent 14d42ff7dc
commit e9651b7317
2 changed files with 15 additions and 9 deletions

2
Engine

Submodule Engine updated: c11aced8d2...816d6e1846

View File

@@ -11,10 +11,14 @@ namespace Pong.Behaviours;
public class BallTrail : Behaviour2D, IPostPhysicsUpdate, IDrawableTriangle public class BallTrail : Behaviour2D, IPostPhysicsUpdate, IDrawableTriangle
{ {
private float width = 10f; private float width = 10f;
private ColorRGBA colorBase = new ColorRGBA(255, 255, 255);
private int trailTickPeriod = 20;
private IEasing widthCurve = EaseInCirc.Instance; 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<Vector2D> trailPoints = new(); private readonly LinkedList<Vector2D> trailPoints = new();
public void PostPhysicsUpdate(float delta) 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)); Line2D line = new(trailPoints.ElementAt(i), trailPoints.ElementAt(i + 1));
Vector2D perpendicularDirection = line.Direction.Perpendicular(); Vector2D perpendicularDirection = line.Direction.Perpendicular();
float t = widthCurve.Evaluate(1f - ((float)i / trailPoints.Count)); float t = (float)i / trailPoints.Count;
float tPlus = widthCurve.Evaluate(1f - ((float)(i + 1) / trailPoints.Count)); float tPlus = (float)(i + 1) / trailPoints.Count;
float firstWidth = t * width; float firstWidth = width * widthCurve.Evaluate(1f - t);
float endWidth = tPlus * width; float endWidth = width * widthCurve.Evaluate(1f - tPlus);
ColorRGBA color = colorBase.Lerp(colorEnd, colorEasing.Evaluate(t));
triangleBatch.Draw( triangleBatch.Draw(
new(line.From + perpendicularDirection * firstWidth, new(line.From + perpendicularDirection * firstWidth,
line.From - perpendicularDirection * firstWidth, line.From - perpendicularDirection * firstWidth,
line.To + perpendicularDirection * endWidth), line.To + perpendicularDirection * endWidth),
colorBase color
); );
triangleBatch.Draw( triangleBatch.Draw(
new(line.From - perpendicularDirection * firstWidth, new(line.From - perpendicularDirection * firstWidth,
line.To - perpendicularDirection * endWidth, line.To - perpendicularDirection * endWidth,
line.To + perpendicularDirection * endWidth), line.To + perpendicularDirection * endWidth),
colorBase color
); );
} }
} }