using System; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; namespace DCFApixels.DragonECS { public readonly struct EcsTag : IEcsMemberCachePool, T> { private readonly EcsFieldPool _pool; private readonly int _poolID; public EcsFieldPool Pool => _pool; public int PoolID => _poolID; private EcsTag(int poolID) { _pool = null; _poolID = poolID; } internal EcsTag(EcsFieldPool pool) { _pool = pool; _poolID = pool.ID; } public void Add(int entityID) { _pool.Add(entityID); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static implicit operator EcsTag(in int poolID) => new EcsTag(poolID); void IEcsMemberCachePool, T>.Inject(out EcsTag self, EcsFieldPool pool) { self = new EcsTag(pool); } } public readonly struct EcsIncTag : IEcsTableMember { private readonly int _poolID; public int PoolID => _poolID; private EcsIncTag(int poolID) { _poolID = poolID; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static implicit operator EcsIncTag(in int poolID) => new EcsIncTag(poolID); } public readonly struct EcsExcTag : IEcsTableMember { private readonly int _poolID; public int PoolID => _poolID; private EcsExcTag(int poolID) { _poolID = poolID; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static implicit operator EcsExcTag(in int poolID) => new EcsExcTag(poolID); } }