From ed40b87e9f3870482cfa926da9e2a1fd46c0e5ed Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Sat, 24 Feb 2024 16:48:43 +0800 Subject: [PATCH] fixes, rename EcsVirtualPool to EcsAnonymousPool --- src/EcsWorld.pools.cs | 19 +++++++-------- ...{EcsVirtualPool.cs => EcsAnonymousPool.cs} | 23 +++++++++++-------- src/Pools/EcsHybridPool.cs | 4 ++-- src/Pools/EcsPool.cs | 2 +- src/Pools/EcsPoolBase.cs | 4 ++-- src/Pools/EcsTagPool.cs | 2 +- 6 files changed, 29 insertions(+), 25 deletions(-) rename src/Pools/{EcsVirtualPool.cs => EcsAnonymousPool.cs} (93%) diff --git a/src/EcsWorld.pools.cs b/src/EcsWorld.pools.cs index b1b2815..4457dc1 100644 --- a/src/EcsWorld.pools.cs +++ b/src/EcsWorld.pools.cs @@ -29,7 +29,7 @@ namespace DCFApixels.DragonECS ref var pool = ref _pools[componentTypeID]; if (pool == _nullPool) { - pool = new EcsVirtualPool(); + pool = new EcsAnonymousPool(); pool.OnInit(this, _poolsMediator, componentTypeID); } return pool; @@ -190,18 +190,19 @@ namespace DCFApixels.DragonECS } var oldPool = _pools[componentTypeID]; - if (oldPool is EcsVirtualPool virtualPool) + + //if (oldPool.IsNullOrDummy() == false) + //{ + // Throw.UndefinedException(); + //} + + _pools[componentTypeID] = newPool; + newPool.OnInit(this, _poolsMediator, componentTypeID); + if (oldPool is EcsAnonymousPool virtualPool) { var data = virtualPool.GetDevirtualizationData(); newPool.OnDevirtualize(data); } - if (oldPool.IsNullOrDummy() == false) - { - Throw.UndefinedException(); - } - - _pools[componentTypeID] = newPool; - newPool.OnInit(this, _poolsMediator, componentTypeID); return newPool; } #endregion diff --git a/src/Pools/EcsVirtualPool.cs b/src/Pools/EcsAnonymousPool.cs similarity index 93% rename from src/Pools/EcsVirtualPool.cs rename to src/Pools/EcsAnonymousPool.cs index 4f9a166..3b8b95e 100644 --- a/src/Pools/EcsVirtualPool.cs +++ b/src/Pools/EcsAnonymousPool.cs @@ -5,7 +5,8 @@ using System.Collections; using System.Collections.Generic; using System.Runtime.CompilerServices; -public class EcsVirtualPool : IEcsPoolImplementation, IEnumerable +//EcsAnonymousPool > EcsVirtualPool > EcsPool +public class EcsAnonymousPool : IEcsPoolImplementation, IEnumerable { private EcsWorld _source; private Type _componentType; @@ -199,7 +200,7 @@ public class EcsVirtualPool : IEcsPoolImplementation, IEnumerable } public readonly ref struct Data { - private readonly EcsVirtualPool _target; + private readonly EcsAnonymousPool _target; public int ComponentsCount { @@ -215,16 +216,16 @@ public class EcsVirtualPool : IEcsPoolImplementation, IEnumerable } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Data(EcsVirtualPool target) + public Data(EcsAnonymousPool target) { _target = target; } public readonly ref struct ListenersIterator { - private readonly EcsVirtualPool _target; + private readonly EcsAnonymousPool _target; [MethodImpl(MethodImplOptions.AggressiveInlining)] - public ListenersIterator(EcsVirtualPool target) + public ListenersIterator(EcsAnonymousPool target) { _target = target; } @@ -234,9 +235,9 @@ public class EcsVirtualPool : IEcsPoolImplementation, IEnumerable public readonly ref struct RawDataIterator { - private readonly EcsVirtualPool _target; + private readonly EcsAnonymousPool _target; [MethodImpl(MethodImplOptions.AggressiveInlining)] - public RawDataIterator(EcsVirtualPool target) + public RawDataIterator(EcsAnonymousPool target) { _target = target; } @@ -248,6 +249,7 @@ public class EcsVirtualPool : IEcsPoolImplementation, IEnumerable private readonly object[] _items; private readonly int _entitesCount; private int _entityID; + private int _itemIndex; [MethodImpl(MethodImplOptions.AggressiveInlining)] public Enumerator(RawDataIterator devirtualizator) { @@ -263,14 +265,15 @@ public class EcsVirtualPool : IEcsPoolImplementation, IEnumerable public EntityRawDataPair Current { [MethodImpl(MethodImplOptions.AggressiveInlining)] - get { return new EntityRawDataPair(_entityID, _items[_entityID]); } + get { return new EntityRawDataPair(_entityID, _items[_itemIndex]); } } [MethodImpl(MethodImplOptions.AggressiveInlining)] public bool MoveNext() { while (_entityID++ < _entitesCount) { - if (_mapping[_entityID] != 0) + _itemIndex = _mapping[_entityID]; + if (_itemIndex != 0) { return true; } @@ -306,6 +309,6 @@ public static class VirtualPoolExtensions { public static bool IsVirtual(this IEcsPool self) { - return self is EcsVirtualPool; + return self is EcsAnonymousPool; } } \ No newline at end of file diff --git a/src/Pools/EcsHybridPool.cs b/src/Pools/EcsHybridPool.cs index 57a7d33..3cf02eb 100644 --- a/src/Pools/EcsHybridPool.cs +++ b/src/Pools/EcsHybridPool.cs @@ -210,7 +210,7 @@ namespace DCFApixels.DragonECS _entities = new int[capacity]; _itemsCount = 0; } - void IEcsPoolImplementation.OnDevirtualize(EcsVirtualPool.Data data) + void IEcsPoolImplementation.OnDevirtualize(EcsAnonymousPool.Data data) { if (_items.Length < data.ComponentsCount) { @@ -424,7 +424,7 @@ public class HybridTypeMapping private EcsWorld _world; private Dictionary _declared = new Dictionary(); - private HashSet _canInstantiatedTypes = new HashSet(); + private Dictionary _canInstantiatedTypes = new Dictionary(); public void AddIntsanceType(object instance) { diff --git a/src/Pools/EcsPool.cs b/src/Pools/EcsPool.cs index 4bdeeed..75d0f78 100644 --- a/src/Pools/EcsPool.cs +++ b/src/Pools/EcsPool.cs @@ -178,7 +178,7 @@ namespace DCFApixels.DragonECS _items = new T[ArrayUtility.NormalizeSizeToPowerOfTwo(world.Config.Get_PoolComponentsCapacity())]; _itemsCount = 0; } - void IEcsPoolImplementation.OnDevirtualize(EcsVirtualPool.Data data) + void IEcsPoolImplementation.OnDevirtualize(EcsAnonymousPool.Data data) { if(_items.Length < data.ComponentsCount) { diff --git a/src/Pools/EcsPoolBase.cs b/src/Pools/EcsPoolBase.cs index c3e14fd..b25c8a7 100644 --- a/src/Pools/EcsPoolBase.cs +++ b/src/Pools/EcsPoolBase.cs @@ -53,7 +53,7 @@ namespace DCFApixels.DragonECS public interface IEcsPoolImplementation : IEcsPool { void OnInit(EcsWorld world, EcsWorld.PoolsMediator mediator, int componentTypeID); - void OnDevirtualize(EcsVirtualPool.Data data); + void OnDevirtualize(EcsAnonymousPool.Data data); void OnWorldResize(int newSize); void OnReleaseDelEntityBuffer(ReadOnlySpan buffer); void OnWorldDestroy(); @@ -114,7 +114,7 @@ namespace DCFApixels.DragonECS void IEcsPool.SetRaw(int entity, object dataRaw) => throw new NotImplementedException(); void IEcsPool.Copy(int fromEntityID, int toEntityID) => throw new NotImplementedException(); void IEcsPool.Copy(int fromEntityID, EcsWorld toWorld, int toEntityID) => throw new NotImplementedException(); - void IEcsPoolImplementation.OnDevirtualize(EcsVirtualPool.Data virtualPoolData) + void IEcsPoolImplementation.OnDevirtualize(EcsAnonymousPool.Data virtualPoolData) { Throw.UndefinedException(); } diff --git a/src/Pools/EcsTagPool.cs b/src/Pools/EcsTagPool.cs index d472cb3..8e4bfd6 100644 --- a/src/Pools/EcsTagPool.cs +++ b/src/Pools/EcsTagPool.cs @@ -159,7 +159,7 @@ namespace DCFApixels.DragonECS _mapping = new bool[world.Capacity]; _count = 0; } - void IEcsPoolImplementation.OnDevirtualize(EcsVirtualPool.Data data) + void IEcsPoolImplementation.OnDevirtualize(EcsAnonymousPool.Data data) { _count = data.ComponentsCount; foreach (var item in data.RawComponents)