a0f6d4a5c4
Deletes the M7 production systems, automation components/math, authoring, 3 machine prefabs, and 6 test files (-43 tests, 459 green). Trims the automation paths out of BaseRestoreSystem/SaveStructureScan/BuildPlaceSystem/BuildSendSystem/ HudSystem/HudTheme/StructureCatalogAuthoring/Tuning. RuntimePlacedTag (save marker, a keeper) re-homed into StructureComponents.cs. StructureType byte codes stay reserved. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
45 lines
1.9 KiB
C#
45 lines
1.9 KiB
C#
using System.Collections.Generic;
|
|
using Unity.Collections;
|
|
using Unity.Entities;
|
|
|
|
namespace ProjectM.Simulation
|
|
{
|
|
/// <summary>
|
|
/// Scans a server world for PLAYER-built structures (<see cref="PlacedStructure"/> + <see cref="RuntimePlacedTag"/>)
|
|
/// into the flat SaveData arrays — the SINGLE shared scan used by BOTH the autosave (SaveWriteSystem) and the
|
|
/// quit-to-menu save (WorldLauncher), so the two paths can never drift (only RuntimePlacedTag structures are saved;
|
|
/// anything baked into the subscene is the subscene's source of truth, not the save's). Managed (List/array) —
|
|
/// runs only on a save, never in the hot loop.
|
|
/// </summary>
|
|
public static class SaveStructureScan
|
|
{
|
|
public static void Collect(EntityManager em, uint nowTick, out StructureSave[] structures, out StructureIoRow[] io)
|
|
{
|
|
var structs = new List<StructureSave>();
|
|
|
|
using var q = em.CreateEntityQuery(
|
|
ComponentType.ReadOnly<PlacedStructure>(),
|
|
ComponentType.ReadOnly<RuntimePlacedTag>());
|
|
using var entities = q.ToEntityArray(Allocator.Temp);
|
|
|
|
for (int k = 0; k < entities.Length; k++)
|
|
{
|
|
var e = entities[k];
|
|
var ps = em.GetComponentData<PlacedStructure>(e);
|
|
|
|
structs.Add(new StructureSave
|
|
{
|
|
Type = ps.Type,
|
|
CellX = ps.Cell.x,
|
|
CellZ = ps.Cell.y,
|
|
// EB-1: guarded so structures without Health don't crash the autosave path (no try/catch).
|
|
HP = em.HasComponent<Health>(e) ? em.GetComponentData<Health>(e).Current : 0f,
|
|
});
|
|
}
|
|
|
|
structures = structs.ToArray();
|
|
io = System.Array.Empty<StructureIoRow>(); // machine I/O retired with the automation chain (row type dies at save v7)
|
|
}
|
|
}
|
|
}
|