Aetheria/tests/Aetheria.Shared.Tests/DrawAheadTests.cs
Meta Vens f1c36b4ccb Vapour clouds are drawn as fog banks: one ZoneRenderer subscription, VapourCloudInstance presenter, DrawAhead for a free body
ZoneRenderer loads and subscribes Zone.Clouds like mines and destroys a bank on removal; VapourCloudInstance
places a Fog Patch brush at DrawAhead.Position(cloud.Body, Lead) and thins its _Depth with OpacityAt. The prefab
and scene wiring follow in the next commit; this one compiles but CloudPrefab is unassigned.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 03:34:50 +02:00

29 lines
1 KiB
C#

using Xunit;
using float2 = CultMath.float2;
// DrawAhead draws a free body where the frame falls lead sim seconds after the last step, by the velocity that step
// moved it with. Expected values are worked from first principles: position plus launch velocity and drift, times lead.
public sealed class DrawAheadTests
{
[Fact]
public void ABodyIsDrawnAheadByItsTotalVelocity()
{
var body = new KinematicBody { Position = new float2(10f, 20f), Velocity = new float2(3f, -1f), Drift = new float2(.5f, 2f) };
var drawn = DrawAhead.Position(body, .5f);
Assert.Equal(10f + (3f + .5f) * .5f, drawn.x, 4);
Assert.Equal(20f + (-1f + 2f) * .5f, drawn.y, 4);
}
[Fact]
public void ABodyDrawnWithNoLeadIsWhereTheSimPutIt()
{
var body = new KinematicBody { Position = new float2(10f, 20f), Velocity = new float2(3f, -1f), Drift = new float2(.5f, 2f) };
var drawn = DrawAhead.Position(body, 0f);
Assert.Equal(10f, drawn.x, 4);
Assert.Equal(20f, drawn.y, 4);
}
}