Optimization

This commit is contained in:
Mikhail 2023-04-01 21:16:08 +08:00
parent de7762861c
commit fd653dc06f
2 changed files with 40 additions and 49 deletions

View File

@ -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
}

View File

@ -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