Update EcsJoinToSubGraphExecutor.cs

This commit is contained in:
Mikhail 2024-10-11 18:26:27 +08:00
parent ed521a5b8a
commit 6a0a28a199

View File

@ -8,8 +8,6 @@ namespace DCFApixels.DragonECS
{ {
public sealed class EcsJoinToSubGraphExecutor : EcsQueryExecutor, IEcsWorldEventListener public sealed class EcsJoinToSubGraphExecutor : EcsQueryExecutor, IEcsWorldEventListener
{ {
private EcsAspect _aspect;
private EntityLinkedList _linkedList; private EntityLinkedList _linkedList;
private Basket[] _baskets; private Basket[] _baskets;
private int[] _startEntities; private int[] _startEntities;
@ -22,6 +20,8 @@ namespace DCFApixels.DragonECS
private int _targetWorldCapacity = -1; private int _targetWorldCapacity = -1;
private EcsProfilerMarker _executeMarker = new EcsProfilerMarker("JoinAttach"); private EcsProfilerMarker _executeMarker = new EcsProfilerMarker("JoinAttach");
private EcsMaskIterator _iterator;
#region Properties #region Properties
public sealed override long Version public sealed override long Version
{ {
@ -42,6 +42,7 @@ namespace DCFApixels.DragonECS
_baskets = new Basket[World.Capacity]; _baskets = new Basket[World.Capacity];
World.AddListener(this); World.AddListener(this);
_graph = World.GetGraph(); _graph = World.GetGraph();
_iterator = Mask.GetIterator();
} }
protected override void OnDestroy() protected override void OnDestroy()
{ {
@ -81,26 +82,24 @@ namespace DCFApixels.DragonECS
if ((mode & EcsSubGraphMode.StartToEnd) != 0) if ((mode & EcsSubGraphMode.StartToEnd) != 0)
{ {
if (_aspect.Mask.IsEmpty) if (Mask.IsEmpty)
{ {
foreach (var relationEntityID in span) { AddStart(relationEntityID); } foreach (var relationEntityID in span) { AddStart(relationEntityID); }
} }
else else
{ {
var iterator = _aspect.Mask.GetIterator(); foreach (var relationEntityID in _iterator.Iterate(span)) { AddStart(relationEntityID); }
foreach (var relationEntityID in iterator.Iterate(span)) { AddStart(relationEntityID); }
} }
} }
if ((mode & EcsSubGraphMode.EndToStart) != 0) if ((mode & EcsSubGraphMode.EndToStart) != 0)
{ {
if (_aspect.Mask.IsEmpty) if (Mask.IsEmpty)
{ {
foreach (var relationEntityID in span) { AddEnd(relationEntityID); } foreach (var relationEntityID in span) { AddEnd(relationEntityID); }
} }
else else
{ {
var iterator = _aspect.Mask.GetIterator(); foreach (var relationEntityID in _iterator.Iterate(span)) { AddEnd(relationEntityID); }
foreach (var relationEntityID in iterator.Iterate(span)) { AddEnd(relationEntityID); }
} }
} }