diff --git a/src/EcsWorld.static.cs b/src/EcsWorld.static.cs index d364a2f..2798fd8 100644 --- a/src/EcsWorld.static.cs +++ b/src/EcsWorld.static.cs @@ -21,7 +21,7 @@ namespace DCFApixels.DragonECS #endregion private static EcsWorld[] _worlds = Array.Empty(); - private static IdDispenser _worldIdDispenser = new IdDispenser(4, 0, n => Array.Resize(ref _worlds, n)); + private static readonly IdDispenser _worldIdDispenser = new IdDispenser(4, 0, n => Array.Resize(ref _worlds, n)); private static StructList _allWorldComponentPools = new StructList(64); private StructList _worldComponentPools; @@ -66,6 +66,22 @@ namespace DCFApixels.DragonECS return ref WorldComponentPool.GetForWorldUnchecked(worldID); } + public static void ResetStaticState() + { + for (int i = 1; i < _worlds.Length; i++) + { + var world = _worlds[i]; + if (world == null) { continue; } + + if(world.IsDestroyed == false) + { + world.Destroy(); + } + world = null; + } + _worldIdDispenser.ReleaseAll(); + } + #region WorldComponentPool public ReadOnlySpan GetWorldComponents() { @@ -251,11 +267,14 @@ namespace DCFApixels.DragonECS } #endregion + #region NullWorld private sealed class NullWorld : EcsWorld { internal NullWorld() : base(new EcsWorldConfig(4, 4, 4, 4, 4), null, 0) { } } + #endregion + #region DebuggerProxy protected partial class DebuggerProxy {