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);