using System.Collections.Generic;
using Unity.Collections;
using Unity.Entities;
namespace ProjectM.Simulation
{
///
/// Scans a server world for PLAYER-built structures ( + )
/// 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.
///
public static class SaveStructureScan
{
public static void Collect(EntityManager em, uint nowTick, out StructureSave[] structures)
{
var structs = new List();
using var q = em.CreateEntityQuery(
ComponentType.ReadOnly(),
ComponentType.ReadOnly());
using var entities = q.ToEntityArray(Allocator.Temp);
for (int k = 0; k < entities.Length; k++)
{
var e = entities[k];
var ps = em.GetComponentData(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(e) ? em.GetComponentData(e).Current : 0f,
});
}
structures = structs.ToArray();
}
}
}