From d8a4e1567d422600550f76b1b3eb839ae62aa21f Mon Sep 17 00:00:00 2001 From: soul Date: Thu, 22 Oct 2026 02:31:44 +0200 Subject: [PATCH] Command seam: the trio's third ship sits in east's sensor cone; the lock pin holds the guns so the lock completes Co-Authored-By: Claude Opus 5.5 --- tests/Aetheria.Shared.Tests/PilotSeamPlayerTests.cs | 4 ++-- tests/Aetheria.Shared.Tests/PilotSeamTests.cs | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/Aetheria.Shared.Tests/PilotSeamPlayerTests.cs b/tests/Aetheria.Shared.Tests/PilotSeamPlayerTests.cs index 22f63603f..8630a6b05 100644 --- a/tests/Aetheria.Shared.Tests/PilotSeamPlayerTests.cs +++ b/tests/Aetheria.Shared.Tests/PilotSeamPlayerTests.cs @@ -15,12 +15,12 @@ using float3 = CultMath.float3; // edges: a press is one pull and a let-go one release. public sealed partial class RunStartTests { - // East, west 200 away and a third 250 away, all seen by east once the zone has stepped. + // East, west 200 away and a third about 277 away, both ahead of east and seen by it once the zone has stepped. private (Zone arena, Ship east, Ship west, Ship third) PlayerSeamTrio() { Ship third = null; var (arena, east, west) = SeamPair(false, (stage, e, w) => - third = stage.Place(EvLonginus(stage), float2(350, 0), facing: float2(-1, 0)) as Ship); + third = stage.Place(EvLonginus(stage), float2(-150, 120), facing: float2(1, 0)) as Ship); for (var step = 0; step < 600 && !(east.VisibleEntities.Contains(west) && east.VisibleEntities.Contains(third)); step++) arena.Update(SeamDt); Assert.Contains(west, east.VisibleEntities); Assert.Contains(third, east.VisibleEntities); diff --git a/tests/Aetheria.Shared.Tests/PilotSeamTests.cs b/tests/Aetheria.Shared.Tests/PilotSeamTests.cs index 134578efe..3caf0dacc 100644 --- a/tests/Aetheria.Shared.Tests/PilotSeamTests.cs +++ b/tests/Aetheria.Shared.Tests/PilotSeamTests.cs @@ -318,6 +318,7 @@ public sealed partial class RunStartTests var agent = arena.Agents.Single(a => a.Ship == east); var locks = east.Weapons.OfType().ToArray(); Assert.NotEmpty(locks); + agent.Doctrine.MinHitProbability = 2; // its guns hold fire, so its aim settles and the lock completes var step = 0; for (; step < 3000 && !(SeamState(agent) is CombatState && locks.Any(l => l.IsLocked)); step++) arena.Update(SeamDt); Assert.True(locks.Any(l => l.IsLocked), $"locked by step {step}: {string.Join(",", locks.Select(l => l.Lock))}");