using Unity.Entities; namespace ProjectM.Simulation { /// /// The ONE collector of the permanent-meta save slice (the SaveStructureScan idiom): reads the director's /// replicated buffer + server-only into the /// v6 fields. Shared by BOTH save writers — SaveWriteSystem (autosave) AND /// WorldLauncher.TrySaveFromServer (quit-to-menu) — so the writers can never drift; the quit path /// silently omitting these fields would WIPE all permanent progression on the most common exit (the meta /// review's top blocker). Rows are copied VERBATIM (unknown ids round-trip). /// public static class MetaSaveScan { public static void Collect(EntityManager em, Entity director, out MetaUpgradeSave[] rows, out int runsCompleted, out int maxDepthReached) { rows = System.Array.Empty(); runsCompleted = 0; maxDepthReached = 0; if (em.HasBuffer(director)) { var buf = em.GetBuffer(director, true); rows = new MetaUpgradeSave[buf.Length]; for (int i = 0; i < buf.Length; i++) rows[i] = new MetaUpgradeSave { ClassId = buf[i].ClassId, UpgradeId = buf[i].UpgradeId, Tier = buf[i].Tier }; } if (em.HasComponent(director)) { var counters = em.GetComponentData(director); runsCompleted = counters.RunsCompleted; maxDepthReached = counters.MaxDepthReached; } } } }