refactor(streaming): complete landblock presentation cutover

Remove the legacy GameWindow apply path and make the concrete render, physics, and static publishers the only production owner graph. Serialize full-window retirement with shared-origin teleport and session boundaries so old coordinate-frame resources cannot survive into a new world or login.
This commit is contained in:
Erik 2026-07-21 22:47:30 +02:00
parent 801d8a189c
commit c79d0a49da
12 changed files with 1373 additions and 402 deletions

View file

@ -127,7 +127,8 @@ public sealed class PhysicsEngine
DataCache?.RemoveBuildingsForLandblock(landblockId);
// #145: if the player's current cell belonged to the landblock being removed (a teleport
// drops the stale source center via OnLivePositionUpdated), clear it. Otherwise CurrCell
// retires the stale source through StreamingOriginRecenterCoordinator and the presentation
// pipeline), clear it. Otherwise CurrCell
// dangles on an orphaned cell and the dungeon-streaming gate — keyed on CurrCell — keeps
// streaming collapsed onto the gone landblock, so the destination never streams in and
// only the skybox renders. Clearing it lets the gate read "not in a dungeon" → the

View file

@ -6,11 +6,10 @@ using DatEnvironment = DatReaderWriter.DBObjs.Environment;
namespace AcDream.Core.World;
/// <summary>
/// The parsed dat objects <c>ApplyLoadedTerrainLocked</c> needs, pre-read by the
/// streaming worker under <c>_datLock</c> so the apply makes ZERO DatCollection
/// calls and the update thread never blocks on the worker's lock (the FPS
/// 30↔200 swing was that lock-wait). Keyed by the same dat id the apply would
/// have passed to <c>_dats.Get&lt;T&gt;</c>.
/// Parsed DAT closure produced by <c>LandblockBuildFactory</c> under the shared
/// reader gate and consumed by the render-thread presentation publishers.
/// Publication makes zero DatCollection calls, so the update thread never
/// blocks on worker DAT access. Entries retain their original DAT IDs.
/// </summary>
public sealed record PhysicsDatBundle(
LandBlockInfo? Info,