Staged knowledge: repin the two-AI digest for fighters staged knowing each other; LockOnSituation drops the no-track premise

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
soul 2026-10-22 16:05:39 +02:00
commit 1a2a24ceb1
3 changed files with 7 additions and 6 deletions

View file

@ -24,8 +24,9 @@ public sealed partial class RunStartTests
// The two-AI fight's digest, captured on Yggdrasil. Replays are trusted only on the host class that recorded them
// (ruling replays-per-host-class), and arenas run on Linux.
private const string TwoAiPinnedHostClass = "linux-x64";
// Repinned once, for the side split: the two fighters are unaffiliated, were one side and each followed itself.
private const string TwoAiPinnedDigest = "1b2ffe51f799e762199717a3bc003e880a80106023463aabc40bd2e4f746697c";
// Repinned twice. First for the side split: the two fighters are unaffiliated, were one side and each followed itself.
// Then for staged knowledge (ruling repin-for-staged-knowledge): the fighters are staged knowing each other, so they engage at step 0.
private const string TwoAiPinnedDigest = "ce81a426c40495e4b4b7b7f83ad23767cc781dce5523d713b4455e0aa5b7fe33";
private const int TwoAiSteps = 3600;
[Fact]

View file

@ -23,10 +23,10 @@ public sealed partial class RunStartTests
var toPlayer = normalize(player.Position.xz - hostile.Position.xz);
Assert.True(dot(normalize(hostile.Direction), toPlayer) >= cos(radians(5f)), "the hostile faces the player");
// The first real sensing tick: the hostile holds no track of the player, and the sim's own passive sensing, asked for
// the player's signature at the staged place, settles below the detection threshold: the staging is out of its sight.
// The hostile is staged knowing the player (ruling stage-states-pilot-knowledge): it starts with a track of it. The sim's
// own passive sensing, asked for the player's signature at the staged place, settles below the detection threshold: the
// staging is out of its sight, so the staged track is all that carries it in.
arena.Update(.1f);
Assert.False(hostile.VisibleEnemies.Any(x => ReferenceEquals(x, player)), "the player is out of sight");
Assert.DoesNotContain(player.IncomingPaints, paint => paint.Mode == PaintMode.Track);
Assert.True(player.Visibility > 0f, "the player shows a signature to be seen by");
var threshold = player.ItemManager.GameplaySettings.TargetDetectionInfoThreshold;

View file

@ -462,7 +462,7 @@ public sealed partial class RunStartTests
var aim = normalize(east.Command.Aim.Value.xz);
var toThird = dot(aim, normalize(third.Position.xz - east.Position.xz));
var toWest = dot(aim, normalize(west.Position.xz - east.Position.xz));
Assert.True(toThird > toWest + .2f, $"aims at the designated target: toThird {toThird} toWest {toWest}");
Assert.True(toThird > toWest + .2f, $"aims at the designated target: toThird {toThird} toWest {toWest} tracked {east.VisibleEntities.Contains(third)}");
}
[Fact]