New offline console tool driving AcDream.Content.MeshExtractor (the SAME extraction code the live client runs, per MP1a) to produce a versioned pak file. Arguments: --dat-dir (required), --out (default acdream.pak next to the dats), --ids/--landblocks (dev filters), --threads (default Environment.ProcessorCount). Enumeration mirrors existing idioms rather than inventing new ones: GfxObj/Setup ids via DatCollection.GetAllIdsOfType<T>() (src/AcDream.Cli/ Program.cs); EnvCell ids by walking dats.Cell.Tree for LandBlockInfo entries (low 16 bits == 0xFFFE) and then the firstCellId+NumCells range per landblock (the same idiom as GameWindow.BuildPhysicsDatBundle / BuildInteriorEntitiesForStreaming). GetAllIdsOfType<T>() does not cover cell-dat range-based types, hence the manual walk. BakeDatCollectionAdapter is a from-scratch copy of AcDream.App.Rendering. Wb.DatCollectionAdapter (which is `internal` to AcDream.App and, more importantly, referencing AcDream.App would drag Silk.NET/GL into the bake tool — a hard violation of "no Silk.NET anywhere"). It's plain dat- access glue, not an AC-specific algorithm, so a small duplicate is the right call over inventing a shared-but-App-rooted package. Particle-preload GfxObjs MeshExtractor side-stages mid-extraction (sideStagedSink, thread-safe ConcurrentQueue per MP1a's documented contract) are deduped against the primary GfxObj set and against each other before being written as their own GfxObjMesh entries. ConsoleErrorLogger is a minimal hand-rolled ILogger (stderr, Warning+) rather than NullLogger — MeshExtractor's LogError/LogWarning calls on malformed dat entries must stay visible per the project's "logger injection for silent catches" lesson. Progress line every 5s (baked/total, failures, elapsed, ETA); a malformed dat entry is caught per-id and counted as a failure, never fatal — matches the runtime's own per-id try/catch behavior. Failures report is printed at the end, capped at 200 lines. Smoke-tested against the real dats on this machine: --ids 0x01000001,0x02000001 baked 1 GfxObj (40 vertices) + 1 Setup (34 parts) in 1.4s with 0 failures; a follow-up run adding EnvCell 0xA9B40100 (Holtburg's first interior cell) baked all three asset types successfully. PakReader opened both scratch paks and read back deep-correct ObjectMeshData; scratch files deleted after verification. *.pak added to .gitignore in this commit per the plan.
25 lines
1.4 KiB
Text
25 lines
1.4 KiB
Text
<Solution>
|
|
<Folder Name="/src/">
|
|
<Project Path="src/AcDream.App/AcDream.App.csproj" />
|
|
<Project Path="src/AcDream.Bake/AcDream.Bake.csproj" />
|
|
<Project Path="src/AcDream.Cli/AcDream.Cli.csproj" />
|
|
<Project Path="src/AcDream.Content/AcDream.Content.csproj" />
|
|
<Project Path="src/AcDream.Core/AcDream.Core.csproj" />
|
|
<Project Path="src/AcDream.Core.Net/AcDream.Core.Net.csproj" />
|
|
<Project Path="src/AcDream.Plugin.Abstractions/AcDream.Plugin.Abstractions.csproj" />
|
|
<Project Path="src/AcDream.Plugins.Smoke/AcDream.Plugins.Smoke.csproj" />
|
|
<Project Path="src/AcDream.UI.Abstractions/AcDream.UI.Abstractions.csproj" />
|
|
<Project Path="src/AcDream.UI.ImGui/AcDream.UI.ImGui.csproj" />
|
|
</Folder>
|
|
<Folder Name="/tools/">
|
|
<Project Path="tools/RetailTimeProbe/RetailTimeProbe.csproj" />
|
|
</Folder>
|
|
<Folder Name="/tests/">
|
|
<Project Path="tests/AcDream.App.Tests/AcDream.App.Tests.csproj" />
|
|
<Project Path="tests/AcDream.Content.Tests/AcDream.Content.Tests.csproj" />
|
|
<Project Path="tests/AcDream.Core.Tests.Fixtures.HelloPlugin/AcDream.Core.Tests.Fixtures.HelloPlugin.csproj" />
|
|
<Project Path="tests/AcDream.Core.Tests/AcDream.Core.Tests.csproj" />
|
|
<Project Path="tests/AcDream.Core.Net.Tests/AcDream.Core.Net.Tests.csproj" />
|
|
<Project Path="tests/AcDream.UI.Abstractions.Tests/AcDream.UI.Abstractions.Tests.csproj" />
|
|
</Folder>
|
|
</Solution>
|