diff --git a/src/EcsSubject.cs b/src/EcsSubject.cs index fd1b1d1..2032aa5 100644 --- a/src/EcsSubject.cs +++ b/src/EcsSubject.cs @@ -108,6 +108,11 @@ namespace DCFApixels.DragonECS } #endregion + public EcsWorldCmp GetWorldData() where T : struct + { + return new EcsWorldCmp(_world.id); + } + private void End(out EcsMask mask) { HashSet maskInc; diff --git a/src/EcsWorld.cs b/src/EcsWorld.cs index 475e986..0a4b5f9 100644 --- a/src/EcsWorld.cs +++ b/src/EcsWorld.cs @@ -9,12 +9,12 @@ using System.Runtime.InteropServices; namespace DCFApixels.DragonECS { [StructLayout(LayoutKind.Sequential, Pack = 4, Size = 4)] - public struct EcsWorldDataRef where T : struct + public struct EcsWorldCmp where T : struct { private int _worldID; - public EcsWorldDataRef(int worldID) => _worldID = worldID; + public EcsWorldCmp(int worldID) => _worldID = worldID; public EcsWorld World => EcsWorld.GetWorld(_worldID); - public ref T Inst => ref EcsWorld.GetData(_worldID); + public ref T Value => ref EcsWorld.GetData(_worldID); } public abstract partial class EcsWorld { @@ -22,12 +22,11 @@ namespace DCFApixels.DragonECS private const short DEATH_GEN_BIT = short.MinValue; private const int DEL_ENT_BUFFER_SIZE_OFFSET = 2; - internal static EcsWorld[] Worlds = new EcsWorld[4]; + private static EcsWorld[] Worlds = new EcsWorld[4]; private static IntDispenser _worldIdDispenser = new IntDispenser(0); private static List _dataReleaseres = new List(); - static EcsWorld() { Worlds[0] = new EcsNullWorld(); diff --git a/src/entlong.cs b/src/entlong.cs index 76c7c4d..904db21 100644 --- a/src/entlong.cs +++ b/src/entlong.cs @@ -28,7 +28,7 @@ namespace DCFApixels.DragonECS public bool IsAlive { [MethodImpl(MethodImplOptions.AggressiveInlining)] - get => EcsWorld.Worlds[world].IsAlive(id, gen); + get => EcsWorld.GetWorld(world).IsAlive(id, gen); } public bool IsNull { @@ -65,7 +65,7 @@ namespace DCFApixels.DragonECS #if (DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_ASSERT_CHEKS if (!IsAlive) ThrowIsNotAlive(this); #endif - return EcsWorld.Worlds[world]; + return EcsWorld.GetWorld(world); } } public short WorldID @@ -104,12 +104,12 @@ namespace DCFApixels.DragonECS } public bool TryGetWorld(out EcsWorld world) { - world = EcsWorld.Worlds[this.world]; + world = EcsWorld.GetWorld(this.world); return IsAlive; } public bool TryUnpack(out EcsWorld world, out int id) { - world = EcsWorld.Worlds[this.world]; + world = EcsWorld.GetWorld(this.world); id = this.id; return IsAlive; }