docs: correct stale UCG CellGraph comments — the graph is active, not inert
The "consumed by nobody (zero behavior change)" / "INERT in Stage 1 (no writer)" comments predate the UCG becoming load-bearing. Verified against the call sites: CellGraph is populated unconditionally in CacheCellStruct (before the idempotency + null-BSP guards, so BSP-less cells are included) and consumed for the player render/lighting root (CurrCell, written at the PhysicsEngine.UpdatePlayerCurrCell player chokepoint; read by GameWindow:7502/7717), the universal id->cell resolver (GetVisible), the 3rd-person camera cell (FindVisibleChildCell), and the block-local terrain origin (TryGetTerrainOrigin, read by CellTransit:484/736). Comments only — no behavior change. Core suite 1445 passed / 2 skipped. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
70c559c1ba
commit
c8188e0ed6
2 changed files with 24 additions and 7 deletions
|
|
@ -26,8 +26,16 @@ public sealed class PhysicsDataCache
|
|||
private readonly ConcurrentDictionary<uint, BuildingPhysics> _buildings = new();
|
||||
|
||||
/// <summary>
|
||||
/// UCG Stage 1: the unified cell graph, built alongside the legacy cell caches.
|
||||
/// Consumed by nobody this stage (zero behavior change).
|
||||
/// The unified cell graph (UCG): the active id->cell resolver and registry.
|
||||
/// Populated unconditionally in <see cref="CacheCellStruct"/> — BEFORE the
|
||||
/// idempotency + null-BSP guards, so BSP-less cells are registered too — and
|
||||
/// consumed across the engine: the player render/lighting root
|
||||
/// (<c>CellGraph.CurrCell</c>, written at the player chokepoint
|
||||
/// <c>PhysicsEngine.UpdatePlayerCurrCell</c> and read by the renderer), the
|
||||
/// universal id->cell lookup (<c>GetVisible</c>), the 3rd-person camera cell
|
||||
/// (<c>FindVisibleChildCell</c>), and the block-local terrain origin
|
||||
/// (<c>TryGetTerrainOrigin</c>, read by <c>CellTransit</c>'s pick + transit
|
||||
/// paths). No longer inert.
|
||||
/// </summary>
|
||||
public UcgCellGraph CellGraph { get; } = new();
|
||||
|
||||
|
|
|
|||
|
|
@ -6,17 +6,26 @@ using AcDream.Core.Physics; // TerrainSurface
|
|||
namespace AcDream.Core.World.Cells;
|
||||
|
||||
/// <summary>
|
||||
/// The unified cell graph: the authoritative id->cell resolver and registry.
|
||||
/// Built alongside the legacy render/physics cell systems in Stage 1 and consumed
|
||||
/// by nobody (zero behavior change). Retail anchor: CObjCell::GetVisible (pseudo_c:308209).
|
||||
/// Worker-thread populated; reads are concurrency-safe.
|
||||
/// The unified cell graph: the active, authoritative id->cell resolver and registry.
|
||||
/// Populated unconditionally from
|
||||
/// <see cref="AcDream.Core.Physics.PhysicsDataCache.CacheCellStruct"/> (before its
|
||||
/// idempotency + null-BSP guards, so BSP-less cells are included) and consumed across
|
||||
/// the engine: <see cref="GetVisible"/> resolves any cell id, <see cref="CurrCell"/> is
|
||||
/// the player render/lighting root, <see cref="FindVisibleChildCell"/> resolves the
|
||||
/// 3rd-person camera cell, and <see cref="TryGetTerrainOrigin"/> supplies the block-local
|
||||
/// terrain origin for the LandDefs lcoord math. Retail anchor: CObjCell::GetVisible
|
||||
/// (pseudo_c:308209). Worker-thread populated; reads are concurrency-safe.
|
||||
/// </summary>
|
||||
public sealed class CellGraph
|
||||
{
|
||||
private readonly ConcurrentDictionary<uint, EnvCell> _envCells = new();
|
||||
private readonly ConcurrentDictionary<uint, (TerrainSurface Terrain, Vector3 Origin)> _terrain = new();
|
||||
|
||||
/// <summary>Player's current cell. Defined for Stage 2; INERT in Stage 1 (no writer).</summary>
|
||||
/// <summary>The player's current cell — the render/lighting root. Written ONLY at the
|
||||
/// player chokepoint <see cref="AcDream.Core.Physics.PhysicsEngine.UpdatePlayerCurrCell"/>
|
||||
/// (NPCs never touch it — a per-entity writer was the cottage-doorway "blue-hole"
|
||||
/// cause); read by the renderer for the player root (GameWindow). Left unchanged when
|
||||
/// the id isn't yet resolvable in the graph (stale beats null).</summary>
|
||||
public ObjCell? CurrCell { get; internal set; }
|
||||
|
||||
public bool Contains(uint envCellId) => _envCells.ContainsKey(envCellId);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue