fix(A.5 T7-T9): migrate entity.Position= → SetPosition; add Promoted arm

Code review on commits 295bce9/a0741bd/4be392b flagged 1 Important + 3
Minor issues. Apply the actionable two:

Important: 6 sites in GameWindow.cs (lines 3900, 4017-4024, 4138, 4270,
4315) wrote entity.Position = X directly, bypassing T8's SetPosition
mutator and therefore never marking AabbDirty. When T18 lands the
dispatcher's "if AabbDirty refresh" cull gate, these direct writes
would silently leave AABB stale (frustum culls dynamic entities at
their previous positions). Migrated all 6 sites to SetPosition().

Minor: Added a silent case LandblockStreamResult.Promoted arm in
StreamingController.Tick with a TODO(A.5 T13) marker. Today the
streamer never produces Promoted, so the arm is unreachable; the
explicit case prevents a future reader from wondering why the case
is missing.

Deferred Minor: surfaceCache thread-safety XML doc comment + style
consistency on System.Collections.Generic using directive — non-
load-bearing cosmetic.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-05-10 07:25:07 +02:00
parent 4be392b361
commit c5f98b276e
2 changed files with 13 additions and 7 deletions

View file

@ -107,6 +107,12 @@ public sealed class StreamingController
Console.WriteLine(
$"streaming: worker CRASHED: {crashed.Error}");
break;
case LandblockStreamResult.Promoted:
// TODO(A.5 T13): merge promoted entities into existing
// GpuWorldState entry via AddEntitiesToExistingLandblock.
// Today the streamer never produces Promoted (only LoadNear /
// LoadFar), so this arm is unreachable and silently consumed.
break;
}
}
}