From 0b6c1e8d268b61de4b754f41d7f63b5cacb1221f Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Sun, 31 Dec 2023 21:02:53 +0800 Subject: [PATCH] fixes --- src/Collections/EcsGroup.cs | 8 ++++---- src/EcsWorld.static.cs | 10 +++++++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/Collections/EcsGroup.cs b/src/Collections/EcsGroup.cs index fba66cb..6323e1c 100644 --- a/src/Collections/EcsGroup.cs +++ b/src/Collections/EcsGroup.cs @@ -107,7 +107,7 @@ namespace DCFApixels.DragonECS public bool IsSubsetOf(EcsGroup group) => _source.IsSubsetOf(group); [MethodImpl(MethodImplOptions.AggressiveInlining)] - public bool IsSupersetOf(EcsReadonlyGroup group) => _source.Overlaps(group._source); + public bool IsSupersetOf(EcsReadonlyGroup group) => _source.IsSupersetOf(group._source); public bool IsSupersetOf(EcsGroup group) => _source.IsSupersetOf(group); #endregion @@ -648,7 +648,7 @@ namespace DCFApixels.DragonECS public Enumerator(EcsGroup group) { _dense = group._dense; - _index = (uint)(group._count > _dense.Length ? _dense.Length : group._count); + _index = (uint)(group._count > _dense.Length ? _dense.Length : group._count) + 1; } public int Current { @@ -689,7 +689,7 @@ namespace DCFApixels.DragonECS { world = group.World; _dense = group._dense; - _index = (uint)(group._count > _dense.Length ? _dense.Length : group._count); + _index = (uint)(group._count > _dense.Length ? _dense.Length : group._count) + 1; } public entlong Current { @@ -698,7 +698,7 @@ namespace DCFApixels.DragonECS } object IEnumerator.Current => Current; [MethodImpl(MethodImplOptions.AggressiveInlining)] - public bool MoveNext() => ++_index > 0; // <= потму что отсчет начинается с индекса 1 //_count < _dense.Length дает среде понять что проверки на выход за границы не нужны + public bool MoveNext() => --_index > 0; // <= потму что отсчет начинается с индекса 1 //_count < _dense.Length дает среде понять что проверки на выход за границы не нужны [MethodImpl(MethodImplOptions.AggressiveInlining)] public void Dispose() { } [MethodImpl(MethodImplOptions.AggressiveInlining)] diff --git a/src/EcsWorld.static.cs b/src/EcsWorld.static.cs index fdea0e9..10c18e9 100644 --- a/src/EcsWorld.static.cs +++ b/src/EcsWorld.static.cs @@ -64,7 +64,8 @@ namespace DCFApixels.DragonECS [MethodImpl(MethodImplOptions.AggressiveInlining)] public static ref T GetForWorld(int worldID) { - return ref _items[GetItemIndex(worldID)]; + int index = GetItemIndex(worldID); + return ref _items[index]; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static ref T GetForWorldUnchecked(int worldID) @@ -78,8 +79,11 @@ namespace DCFApixels.DragonECS public static int GetItemIndex(int worldID) { if (_mapping.Length < Worlds.Length) + { Array.Resize(ref _mapping, Worlds.Length); + } + ref short itemIndex = ref _mapping[worldID]; if (itemIndex <= 0) { @@ -92,6 +96,10 @@ namespace DCFApixels.DragonECS { itemIndex = ++_count; } + if(_items.Length <= itemIndex) + { + Array.Resize(ref _items, _items.Length << 1); + } _interface.Init(ref _items[itemIndex], Worlds[worldID]); _dataReleaseres.Add(new Releaser()); }