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 <noreply@anthropic.com>
This commit is contained in:
soul 2026-10-22 02:31:44 +02:00
commit d8a4e1567d
2 changed files with 3 additions and 2 deletions

View file

@ -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);

View file

@ -318,6 +318,7 @@ public sealed partial class RunStartTests
var agent = arena.Agents.Single(a => a.Ship == east);
var locks = east.Weapons.OfType<LockWeapon>().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))}");