mirror of
https://github.com/DCFApixels/DragonECS.git
synced 2025-09-18 09:54:35 +08:00
Optimization
This commit is contained in:
parent
de7762861c
commit
fd653dc06f
@ -198,21 +198,22 @@ namespace DCFApixels.DragonECS
|
||||
|
||||
#region AddGroup/RemoveGroup
|
||||
public void AddGroup(EcsReadonlyGroup group)
|
||||
{
|
||||
foreach (var item in group) UncheckedAdd(item.id);
|
||||
}
|
||||
{ foreach (var item in group) Add(item.id); }
|
||||
public void RemoveGroup(EcsReadonlyGroup group)
|
||||
{
|
||||
foreach (var item in group) UncheckedRemove(item.id);
|
||||
}
|
||||
{ foreach (var item in group) Remove(item.id); }
|
||||
public void AddGroup(EcsGroup group)
|
||||
{
|
||||
foreach (var item in group) UncheckedAdd(item.id);
|
||||
}
|
||||
{ foreach (var item in group) Add(item.id); }
|
||||
public void RemoveGroup(EcsGroup group)
|
||||
{
|
||||
foreach (var item in group) UncheckedRemove(item.id);
|
||||
}
|
||||
{ foreach (var item in group) Remove(item.id); }
|
||||
|
||||
public void UncheckedAddGroup(EcsReadonlyGroup group)
|
||||
{ foreach (var item in group) AddInternal(item.id); }
|
||||
public void UncheckedRemoveGroup(EcsReadonlyGroup group)
|
||||
{ foreach (var item in group) RemoveInternal(item.id); }
|
||||
public void UncheckedAddGroup(EcsGroup group)
|
||||
{ foreach (var item in group) AddInternal(item.id); }
|
||||
public void UncheckedRemoveGroup(EcsGroup group)
|
||||
{ foreach (var item in group) RemoveInternal(item.id); }
|
||||
#endregion
|
||||
|
||||
#region GetEnumerator
|
||||
@ -231,16 +232,12 @@ namespace DCFApixels.DragonECS
|
||||
{
|
||||
delayedOp op = _delayedOps[i];
|
||||
if (op >= 0) //delayedOp.IsAdded
|
||||
{
|
||||
UncheckedAdd(op & int.MaxValue); //delayedOp.Entity
|
||||
}
|
||||
else
|
||||
{
|
||||
UncheckedRemove(op & int.MaxValue); //delayedOp.Entity
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public Enumerator GetEnumerator()
|
||||
{
|
||||
@ -253,31 +250,29 @@ namespace DCFApixels.DragonECS
|
||||
public struct Enumerator : IDisposable
|
||||
{
|
||||
private readonly EcsGroup _source;
|
||||
private readonly int[] _dense;
|
||||
private readonly int _count;
|
||||
private int _pointer;
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public Enumerator(EcsGroup group)
|
||||
{
|
||||
_source = group;
|
||||
_dense = group._dense;
|
||||
_count = group.Count;
|
||||
_pointer = 0;
|
||||
}
|
||||
|
||||
private static EcsProfilerMarker _marker = new EcsProfilerMarker("EcsGroup.Enumerator.Current");
|
||||
|
||||
public ent Current
|
||||
{
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
get
|
||||
{
|
||||
using (_marker.Auto())
|
||||
return _source.World.GetEntity(_source._dense[_pointer]);
|
||||
}
|
||||
get => _source.World.GetEntity(_dense[_pointer]);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public bool MoveNext()
|
||||
{
|
||||
return ++_pointer <= _source.Count;
|
||||
return ++_pointer <= _count && _count < _dense.Length; //_count < _dense.Length дает среде понять что проверки на выход за границы не нужны
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
@ -287,10 +282,7 @@ namespace DCFApixels.DragonECS
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public void Reset()
|
||||
{
|
||||
_pointer = -1;
|
||||
}
|
||||
public void Reset() { }
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
@ -14,9 +14,9 @@ namespace DCFApixels.DragonECS
|
||||
public IEcsWorld World { get; }
|
||||
public Type DataType { get; }
|
||||
public int ID { get; }
|
||||
public bool Has(int index);
|
||||
public void Write(int index);
|
||||
public void Del(int index);
|
||||
public bool Has(int entityID);
|
||||
public void Write(int entityID);
|
||||
public void Del(int entityID);
|
||||
|
||||
internal void OnWorldResize(int newSize);
|
||||
}
|
||||
@ -149,7 +149,6 @@ namespace DCFApixels.DragonECS
|
||||
_recycledItems[_recycledItemsCount++] = _mapping[entityID];
|
||||
_mapping[entityID] = 0;
|
||||
_itemsCount--;
|
||||
//_entities.UncheckedRemove(entityID);
|
||||
_source.OnEntityComponentRemoved(entityID, _id);
|
||||
_poolRunnres.del.OnComponentDel<T>(entityID);
|
||||
// }
|
||||
@ -157,9 +156,9 @@ namespace DCFApixels.DragonECS
|
||||
#endregion
|
||||
|
||||
#region IEcsPool
|
||||
void IEcsPool.Write(int index)
|
||||
void IEcsPool.Write(int entityID)
|
||||
{
|
||||
Write(index);
|
||||
Write(entityID);
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user