fix(streaming): commit EnvCell landblocks atomically (#214)

Carry one complete cell payload with each streaming completion and publish visibility, physics, and render state on the render thread. Remove the obsolete post-readiness login reload that triggered a duplicate dungeon build.

Co-Authored-By: Codex <noreply@openai.com>
This commit is contained in:
Erik 2026-07-13 18:45:24 +02:00
parent 85980fe13f
commit b0c175afc0
26 changed files with 973 additions and 617 deletions

View file

@ -42,9 +42,21 @@ public abstract record LandblockStreamResult(uint LandblockId)
public sealed record Loaded(
uint LandblockId,
LandblockStreamTier Tier,
LoadedLandblock Landblock,
LandblockBuild Build,
LandblockMeshData MeshData
) : LandblockStreamResult(LandblockId);
) : LandblockStreamResult(LandblockId)
{
public Loaded(
uint landblockId,
LandblockStreamTier tier,
LoadedLandblock landblock,
LandblockMeshData meshData)
: this(landblockId, tier, new LandblockBuild(landblock), meshData)
{
}
public LoadedLandblock Landblock => Build.Landblock;
}
/// <summary>
/// A previously-Far-resident landblock was promoted to Near. The result
@ -56,10 +68,19 @@ public abstract record LandblockStreamResult(uint LandblockId)
/// </summary>
public sealed record Promoted(
uint LandblockId,
LoadedLandblock Landblock,
LandblockBuild Build,
LandblockMeshData MeshData
) : LandblockStreamResult(LandblockId)
{
public Promoted(
uint landblockId,
LoadedLandblock landblock,
LandblockMeshData meshData)
: this(landblockId, new LandblockBuild(landblock), meshData)
{
}
public LoadedLandblock Landblock => Build.Landblock;
public IReadOnlyList<WorldEntity> Entities => Landblock.Entities;
}