diff --git a/src/EcsMask.cs b/src/EcsMask.cs deleted file mode 100644 index 53ace7c..0000000 --- a/src/EcsMask.cs +++ /dev/null @@ -1,379 +0,0 @@ -using System; -using System.Runtime.CompilerServices; -using System.Reflection; - -namespace DCFApixels.DragonECS -{ - #region Incs/Excs base - public interface IMaskCondition - { - public int[] GetComponentsIDs() where TWorldArchetype : EcsWorld; - } - #endregion - - #region Incs - public interface IInc : IMaskCondition { } - public struct Inc : IInc - { - public int[] GetComponentsIDs() where TWorldArchetype : EcsWorld => Array.Empty(); - } - public struct Inc : IInc - { - public int[] GetComponentsIDs() where TWorldArchetype : EcsWorld - { - return new int[] - { - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - }; - } - } - public struct Inc : IInc - { - public int[] GetComponentsIDs() where TWorldArchetype : EcsWorld - { - return new int[] - { - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - }; - } - } - public struct Inc : IInc - { - public int[] GetComponentsIDs() where TWorldArchetype : EcsWorld - { - return new int[] - { - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - }; - } - } - public struct Inc : IInc - { - public int[] GetComponentsIDs() where TWorldArchetype : EcsWorld - { - return new int[] - { - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - }; - } - } - public struct Inc : IInc - { - public int[] GetComponentsIDs() where TWorldArchetype : EcsWorld - { - return new int[] - { - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - }; - } - } - public struct Inc : IInc - { - public int[] GetComponentsIDs() where TWorldArchetype : EcsWorld - { - return new int[] - { - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - }; - } - } - public struct Inc : IInc - { - public int[] GetComponentsIDs() where TWorldArchetype : EcsWorld - { - return new int[] - { - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - }; - } - } - public struct Inc : IInc - { - public int[] GetComponentsIDs() where TWorldArchetype : EcsWorld - { - return new int[] - { - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - }; - } - } - public struct Inc : IInc - { - public int[] GetComponentsIDs() where TWorldArchetype : EcsWorld - { - return new int[] - { - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - }; - } - } - public struct Inc : IInc - { - public int[] GetComponentsIDs() where TWorldArchetype : EcsWorld - { - return new int[] - { - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - }; - } - } - public struct Inc : IInc - { - public int[] GetComponentsIDs() where TWorldArchetype : EcsWorld - { - return new int[] - { - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - }; - } - } - public struct Inc : IInc - { - public int[] GetComponentsIDs() where TWorldArchetype : EcsWorld - { - return new int[] - { - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - }; - } - } - #endregion - - #region Excs - public interface IExc : IMaskCondition { } - public struct Exc : IExc - { - public int[] GetComponentsIDs() where TWorldArchetype : EcsWorld => Array.Empty(); - } - public struct Exc : IExc - { - public int[] GetComponentsIDs() where TWorldArchetype : EcsWorld - { - return new int[] - { - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - }; - } - } - public struct Exc : IExc - { - public int[] GetComponentsIDs() where TWorldArchetype : EcsWorld - { - return new int[] - { - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - }; - } - } - public struct Exc : IExc - { - public int[] GetComponentsIDs() where TWorldArchetype : EcsWorld - { - return new int[] - { - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - }; - } - } - public struct Exc : IExc - { - public int[] GetComponentsIDs() where TWorldArchetype : EcsWorld - { - return new int[] - { - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - }; - } - } - public struct Exc : IExc - { - public int[] GetComponentsIDs() where TWorldArchetype : EcsWorld - { - return new int[] - { - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - }; - } - } - public struct Exc : IExc - { - public int[] GetComponentsIDs() where TWorldArchetype : EcsWorld - { - return new int[] - { - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - WorldMetaStorage.GetComponentId(WorldMetaStorage.GetWorldId()), - }; - } - } - #endregion - - #region EcsMask - - - public sealed class EcsMask : EcsComponentMask - { - internal readonly int UniqueID; - internal EcsMask(Type worldArchetypeType, int uniqueID, int[] inc, int[] exc) - { - WorldArchetypeType = worldArchetypeType; - UniqueID = uniqueID; - Inc = inc; - Exc = exc; - } - } - - public static class EcsMaskMap - where TWorldArchetype : EcsWorld - { - private static int _count; - private static int _capacity; - - public static int Count - { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - get => _count; - } - public static int Capacity - { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - get => _capacity; - } - - public static EcsMask GetMask() - where TInc : struct, IInc - where TExc : struct, IExc - { - return Activator.instance; - } - - private class Activator - where TInc : struct, IInc - where TExc : struct, IExc - { - static Activator() - { - var inc_ = new TInc().GetComponentsIDs(); - var exc_ = new TExc().GetComponentsIDs(); - Array.Sort(inc_); - Array.Sort(exc_); - - Type thisType = typeof(Activator); - - Type sortedIncType = typeof(TInc); - if (sortedIncType.IsGenericType) - { - Type[] sortedInc = new Type[inc_.Length]; - for (int i = 0; i < sortedInc.Length; i++) - sortedInc[i] = EcsWorld.ComponentType.types[inc_[i]]; - sortedIncType = sortedIncType.GetGenericTypeDefinition().MakeGenericType(sortedInc); - } - Type sortedExcType = typeof(TExc); - if (sortedExcType.IsGenericType) - { - Type[] sortedExc = new Type[exc_.Length]; - for (int i = 0; i < sortedExc.Length; i++) - sortedExc[i] = EcsWorld.ComponentType.types[exc_[i]]; - sortedExcType = sortedExcType.GetGenericTypeDefinition().MakeGenericType(sortedExc); - } - - Type targetType = typeof(Activator<,>).MakeGenericType(typeof(TWorldArchetype), sortedIncType, sortedExcType); - - if (targetType != thisType) - { - instance = (EcsMask)targetType.GetField(nameof(instance), BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic).GetValue(null); - return; - } - - var uniqueID = _count++; - if (_count >= _capacity) - _capacity <<= 1; - - instance = new EcsMask(typeof(TWorldArchetype), uniqueID, inc_, exc_); - } - - public readonly static EcsMask instance; - } - } - #endregion -} diff --git a/src/EcsWorld.cs b/src/EcsWorld.cs index ab93668..3056aa0 100644 --- a/src/EcsWorld.cs +++ b/src/EcsWorld.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; -using static DCFApixels.DragonECS.WorldMetaStorage; namespace DCFApixels.DragonECS { @@ -155,11 +154,6 @@ namespace DCFApixels.DragonECS #endregion #region IsMaskCompatible - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public bool IsMaskCompatible(int entityID) where TInc : struct, IInc where TExc : struct, IExc - { - return IsMaskCompatible(EcsMaskMap.GetMask(), entityID); - } public bool IsMaskCompatible(EcsComponentMask mask, int entityID) { #if (DEBUG && !DISABLE_DRAGONECS_DEBUG) || !DRAGONECS_NO_SANITIZE_CHECKS diff --git a/src/Interfaces/IEcsTable.cs b/src/Interfaces/IEcsTable.cs index dc6517e..d2d9909 100644 --- a/src/Interfaces/IEcsTable.cs +++ b/src/Interfaces/IEcsTable.cs @@ -20,7 +20,6 @@ namespace DCFApixels.DragonECS public TQuery Where(out TQuery query) where TQuery : EcsQueryBase; public TQuery Select() where TQuery : EcsQueryBase; - public bool IsMaskCompatible(int entityID) where TInc : struct, IInc where TExc : struct, IExc; public bool IsMaskCompatible(EcsComponentMask mask, int entityID); public void Destroy(); @@ -32,12 +31,4 @@ namespace DCFApixels.DragonECS internal void ReleaseGroup(EcsGroup group); #endregion } - - public static class IEcsReadonlyTableExtensions - { - public static bool IsMaskCompatible(this IEcsTable self, int entityID) where TInc : struct, IInc - { - return self.IsMaskCompatible(entityID); - } - } }