diff --git a/src/AcDream.App/Streaming/LandblockStreamJob.cs b/src/AcDream.App/Streaming/LandblockStreamJob.cs
index e5b9602..dfc837d 100644
--- a/src/AcDream.App/Streaming/LandblockStreamJob.cs
+++ b/src/AcDream.App/Streaming/LandblockStreamJob.cs
@@ -1,3 +1,5 @@
+using System.Collections.Generic;
+using AcDream.Core.Terrain;
using AcDream.Core.World;
namespace AcDream.App.Streaming;
@@ -22,7 +24,29 @@ public abstract record LandblockStreamJob(uint LandblockId)
///
public abstract record LandblockStreamResult(uint LandblockId)
{
- public sealed record Loaded(uint LandblockId, LoadedLandblock Landblock) : LandblockStreamResult(LandblockId);
+ ///
+ /// A landblock load completed. distinguishes Far
+ /// (terrain only) from Near (terrain + entities).
+ /// is built off the render thread on the streaming worker.
+ ///
+ public sealed record Loaded(
+ uint LandblockId,
+ LandblockStreamTier Tier,
+ LoadedLandblock Landblock,
+ LandblockMeshData MeshData
+ ) : LandblockStreamResult(LandblockId);
+
+ ///
+ /// A previously-Far-resident landblock was promoted to Near. Terrain
+ /// mesh is already on the GPU; the result carries the entity layer
+ /// (stabs, buildings, scenery) to merge into the existing GpuWorldState
+ /// entry.
+ ///
+ public sealed record Promoted(
+ uint LandblockId,
+ IReadOnlyList Entities
+ ) : LandblockStreamResult(LandblockId);
+
public sealed record Failed(uint LandblockId, string Error) : LandblockStreamResult(LandblockId);
public sealed record Unloaded(uint LandblockId) : LandblockStreamResult(LandblockId);
diff --git a/src/AcDream.App/Streaming/LandblockStreamer.cs b/src/AcDream.App/Streaming/LandblockStreamer.cs
index b79946a..4f41486 100644
--- a/src/AcDream.App/Streaming/LandblockStreamer.cs
+++ b/src/AcDream.App/Streaming/LandblockStreamer.cs
@@ -169,8 +169,12 @@ public sealed class LandblockStreamer : IDisposable
_outbox.Writer.TryWrite(new LandblockStreamResult.Failed(
load.LandblockId, "LandblockLoader.Load returned null"));
else
+ // TEMPORARY: passes default! for MeshData — Task 13 wires the real mesh build.
_outbox.Writer.TryWrite(new LandblockStreamResult.Loaded(
- load.LandblockId, lb));
+ load.LandblockId,
+ LandblockStreamTier.Near,
+ lb,
+ MeshData: default! /* TODO(A.5 T13) */));
}
catch (Exception ex)
{
diff --git a/tests/AcDream.Core.Tests/Streaming/StreamingControllerTests.cs b/tests/AcDream.Core.Tests/Streaming/StreamingControllerTests.cs
index f7fa328..9b7fdcb 100644
--- a/tests/AcDream.Core.Tests/Streaming/StreamingControllerTests.cs
+++ b/tests/AcDream.Core.Tests/Streaming/StreamingControllerTests.cs
@@ -78,7 +78,7 @@ public class StreamingControllerTests
// Entities (positional record). Adjust if the first positional arg
// name differs.
var lb = new LoadedLandblock(0x32320FFEu, new LandBlock(), System.Array.Empty());
- fake.Pending.Enqueue(new LandblockStreamResult.Loaded(0x32320FFEu, lb));
+ fake.Pending.Enqueue(new LandblockStreamResult.Loaded(0x32320FFEu, LandblockStreamTier.Near, lb, MeshData: default!));
controller.Tick(50, 50);