From 2fb247a534e00c84e6dae49b8060b4ce4e3f44ef Mon Sep 17 00:00:00 2001
From: DCFApixels <99481254+DCFApixels@users.noreply.github.com>
Date: Wed, 20 Nov 2024 13:18:42 +0800
Subject: [PATCH 1/5] fix namespace
---
src/Builtin/EcsGraphWorld.cs | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/src/Builtin/EcsGraphWorld.cs b/src/Builtin/EcsGraphWorld.cs
index 10ace88..82ae5a5 100644
--- a/src/Builtin/EcsGraphWorld.cs
+++ b/src/Builtin/EcsGraphWorld.cs
@@ -1,7 +1,6 @@
-using DCFApixels.DragonECS;
-using System.Diagnostics;
+using System.Diagnostics;
-namespace DCFApixels.Assets.Plugins.DragonECS_Graphs.src.Builtin
+namespace DCFApixels.DragonECS
{
/// EcsWrold for store regular game entities.
[MetaColor(MetaColor.DragonRose)]
From 6dcc8ccf382e9ef7af60f49496c4d4296d55377c Mon Sep 17 00:00:00 2001
From: DCFApixels <99481254+DCFApixels@users.noreply.github.com>
Date: Wed, 20 Nov 2024 15:54:46 +0800
Subject: [PATCH 2/5] remane queries
---
src/EntityGraph.cs | 2 +-
src/Executors/GraphQueries.cs | 22 +++++++++++-----------
2 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/src/EntityGraph.cs b/src/EntityGraph.cs
index 47c0bd9..8f97368 100644
--- a/src/EntityGraph.cs
+++ b/src/EntityGraph.cs
@@ -239,7 +239,7 @@ namespace DCFApixels.DragonECS
EcsSubGraph subGraph;
EcsWorld graphWorld = _graph._graphWorld;
- subGraph = graphWorld.JoinToSubGraph(EcsSubGraphMode.All);
+ subGraph = graphWorld.JoinGraph(EcsSubGraphMode.All);
foreach (var sourceE in delEntities)
{
var relEs = subGraph.GetRelations(sourceE);
diff --git a/src/Executors/GraphQueries.cs b/src/Executors/GraphQueries.cs
index 95b393b..f942e8a 100644
--- a/src/Executors/GraphQueries.cs
+++ b/src/Executors/GraphQueries.cs
@@ -6,7 +6,7 @@ namespace DCFApixels.DragonECS
public static class GraphQueriesExtensions
{
#region JoinToGraph Empty
- public static EcsSubGraph JoinToSubGraph(this EcsWorld entities, EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
+ public static EcsSubGraph JoinGraph(this EcsWorld entities, EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
{
entities.GetQueryCache(out JoinToSubGraphExecutor executor, out EmptyAspect _);
return executor.Execute(mode);
@@ -14,7 +14,7 @@ namespace DCFApixels.DragonECS
#endregion
#region JoinToGraph Mask
- public static EcsSubGraph JoinToSubGraph(this TCollection entities, IComponentMask mask, EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
+ public static EcsSubGraph JoinSubGraph(this TCollection entities, IComponentMask mask, EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
where TCollection : IEntityStorage
{
if (ReferenceEquals(entities, entities.World))
@@ -22,13 +22,13 @@ namespace DCFApixels.DragonECS
var executor = entities.World.GetExecutorForMask(mask);
return executor.Execute();
}
- return entities.ToSpan().JoinToSubGraph(mask, mode);
+ return entities.ToSpan().JoinSubGraph(mask, mode);
}
- public static EcsSubGraph JoinToSubGraph(this EcsReadonlyGroup group, IComponentMask mask, EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
+ public static EcsSubGraph JoinSubGraph(this EcsReadonlyGroup group, IComponentMask mask, EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
{
- return group.ToSpan().JoinToSubGraph(mask, mode);
+ return group.ToSpan().JoinSubGraph(mask, mode);
}
- public static EcsSubGraph JoinToSubGraph(this EcsSpan span, IComponentMask mask, EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
+ public static EcsSubGraph JoinSubGraph(this EcsSpan span, IComponentMask mask, EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
{
var executor = span.World.GetExecutorForMask(mask);
return executor.ExecuteFor(span, mode);
@@ -36,7 +36,7 @@ namespace DCFApixels.DragonECS
#endregion
#region JoinToGraph
- public static EcsSubGraph JoinToSubGraph(this TCollection entities, out TAspect aspect, EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
+ public static EcsSubGraph JoinSubGraph(this TCollection entities, out TAspect aspect, EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
where TAspect : EcsAspect, new()
where TCollection : IEntityStorage
{
@@ -45,14 +45,14 @@ namespace DCFApixels.DragonECS
entities.World.GetQueryCache(out JoinToSubGraphExecutor executor, out aspect);
return executor.Execute();
}
- return entities.ToSpan().JoinToSubGraph(out aspect, mode);
+ return entities.ToSpan().JoinSubGraph(out aspect, mode);
}
- public static EcsSubGraph JoinToSubGraph(this EcsReadonlyGroup group, out TAspect aspect, EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
+ public static EcsSubGraph JoinSubGraph(this EcsReadonlyGroup group, out TAspect aspect, EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
where TAspect : EcsAspect, new()
{
- return group.ToSpan().JoinToSubGraph(out aspect, mode);
+ return group.ToSpan().JoinSubGraph(out aspect, mode);
}
- public static EcsSubGraph JoinToSubGraph(this EcsSpan span, out TAspect aspect, EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
+ public static EcsSubGraph JoinSubGraph(this EcsSpan span, out TAspect aspect, EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
where TAspect : EcsAspect, new()
{
span.World.GetQueryCache(out JoinToSubGraphExecutor executor, out aspect);
From cc23ba0b8a39638687393dcb777e29f4a39a4128 Mon Sep 17 00:00:00 2001
From: DCFApixels <99481254+DCFApixels@users.noreply.github.com>
Date: Wed, 20 Nov 2024 16:46:41 +0800
Subject: [PATCH 3/5] renaming
---
src/EntityGraph.cs | 4 +-
src/Executors/GraphQueries.cs | 14 +--
src/Executors/JoinToSubGraphExecutor.cs | 156 ++++++++++++------------
3 files changed, 87 insertions(+), 87 deletions(-)
diff --git a/src/EntityGraph.cs b/src/EntityGraph.cs
index 8f97368..705ca7e 100644
--- a/src/EntityGraph.cs
+++ b/src/EntityGraph.cs
@@ -236,10 +236,10 @@ namespace DCFApixels.DragonECS
#region Callbacks
public void OnReleaseDelEntityBuffer(ReadOnlySpan delEntities)
{
- EcsSubGraph subGraph;
+ SubGraphMap subGraph;
EcsWorld graphWorld = _graph._graphWorld;
- subGraph = graphWorld.JoinGraph(EcsSubGraphMode.All);
+ subGraph = graphWorld.JoinGraph(JoinMode.All);
foreach (var sourceE in delEntities)
{
var relEs = subGraph.GetRelations(sourceE);
diff --git a/src/Executors/GraphQueries.cs b/src/Executors/GraphQueries.cs
index f942e8a..c33541f 100644
--- a/src/Executors/GraphQueries.cs
+++ b/src/Executors/GraphQueries.cs
@@ -6,7 +6,7 @@ namespace DCFApixels.DragonECS
public static class GraphQueriesExtensions
{
#region JoinToGraph Empty
- public static EcsSubGraph JoinGraph(this EcsWorld entities, EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
+ public static SubGraphMap JoinGraph(this EcsWorld entities, JoinMode mode = JoinMode.StartToEnd)
{
entities.GetQueryCache(out JoinToSubGraphExecutor executor, out EmptyAspect _);
return executor.Execute(mode);
@@ -14,7 +14,7 @@ namespace DCFApixels.DragonECS
#endregion
#region JoinToGraph Mask
- public static EcsSubGraph JoinSubGraph(this TCollection entities, IComponentMask mask, EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
+ public static SubGraphMap JoinSubGraph(this TCollection entities, IComponentMask mask, JoinMode mode = JoinMode.StartToEnd)
where TCollection : IEntityStorage
{
if (ReferenceEquals(entities, entities.World))
@@ -24,11 +24,11 @@ namespace DCFApixels.DragonECS
}
return entities.ToSpan().JoinSubGraph(mask, mode);
}
- public static EcsSubGraph JoinSubGraph(this EcsReadonlyGroup group, IComponentMask mask, EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
+ public static SubGraphMap JoinSubGraph(this EcsReadonlyGroup group, IComponentMask mask, JoinMode mode = JoinMode.StartToEnd)
{
return group.ToSpan().JoinSubGraph(mask, mode);
}
- public static EcsSubGraph JoinSubGraph(this EcsSpan span, IComponentMask mask, EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
+ public static SubGraphMap JoinSubGraph(this EcsSpan span, IComponentMask mask, JoinMode mode = JoinMode.StartToEnd)
{
var executor = span.World.GetExecutorForMask(mask);
return executor.ExecuteFor(span, mode);
@@ -36,7 +36,7 @@ namespace DCFApixels.DragonECS
#endregion
#region JoinToGraph
- public static EcsSubGraph JoinSubGraph(this TCollection entities, out TAspect aspect, EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
+ public static SubGraphMap JoinSubGraph(this TCollection entities, out TAspect aspect, JoinMode mode = JoinMode.StartToEnd)
where TAspect : EcsAspect, new()
where TCollection : IEntityStorage
{
@@ -47,12 +47,12 @@ namespace DCFApixels.DragonECS
}
return entities.ToSpan().JoinSubGraph(out aspect, mode);
}
- public static EcsSubGraph JoinSubGraph(this EcsReadonlyGroup group, out TAspect aspect, EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
+ public static SubGraphMap JoinSubGraph(this EcsReadonlyGroup group, out TAspect aspect, JoinMode mode = JoinMode.StartToEnd)
where TAspect : EcsAspect, new()
{
return group.ToSpan().JoinSubGraph(out aspect, mode);
}
- public static EcsSubGraph JoinSubGraph(this EcsSpan span, out TAspect aspect, EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
+ public static SubGraphMap JoinSubGraph(this EcsSpan span, out TAspect aspect, JoinMode mode = JoinMode.StartToEnd)
where TAspect : EcsAspect, new()
{
span.World.GetQueryCache(out JoinToSubGraphExecutor executor, out aspect);
diff --git a/src/Executors/JoinToSubGraphExecutor.cs b/src/Executors/JoinToSubGraphExecutor.cs
index 876727c..7c58df3 100644
--- a/src/Executors/JoinToSubGraphExecutor.cs
+++ b/src/Executors/JoinToSubGraphExecutor.cs
@@ -81,7 +81,7 @@ namespace DCFApixels.DragonECS.Graphs.Internal
#region Execute
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- private EcsSubGraph Execute_Internal(EcsSubGraphMode mode)
+ private SubGraphMap Execute_Internal(JoinMode mode)
{
//_executeMarker.Begin();
@@ -121,14 +121,14 @@ namespace DCFApixels.DragonECS.Graphs.Internal
_linkedList.Clear();
//Заполнение массивов
- if ((mode & EcsSubGraphMode.StartToEnd) != 0)
+ if ((mode & JoinMode.StartToEnd) != 0)
{
for (int i = 0; i < _filteredAllEntitiesCount; i++)
{
AddStart(_filteredAllEntities[i]);
}
}
- if ((mode & EcsSubGraphMode.EndToStart) != 0)
+ if ((mode & JoinMode.EndToStart) != 0)
{
for (int i = 0; i < _filteredAllEntitiesCount; i++)
{
@@ -140,10 +140,10 @@ namespace DCFApixels.DragonECS.Graphs.Internal
_version++;
//_executeMarker.End();
- return new EcsSubGraph(this);
+ return new SubGraphMap(this);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- private EcsSubGraph ExecuteFor_Internal(EcsSpan span, EcsSubGraphMode mode)
+ private SubGraphMap ExecuteFor_Internal(EcsSpan span, JoinMode mode)
{
//_executeMarker.Begin();
#if (DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_ASSERT_CHEKS
@@ -184,14 +184,14 @@ namespace DCFApixels.DragonECS.Graphs.Internal
_linkedList.Clear();
//Заполнение массивов
- if ((mode & EcsSubGraphMode.StartToEnd) != 0)
+ if ((mode & JoinMode.StartToEnd) != 0)
{
for (int i = 0; i < _filteredEntitiesCount; i++)
{
AddStart(_filteredEntities[i]);
}
}
- if ((mode & EcsSubGraphMode.EndToStart) != 0)
+ if ((mode & JoinMode.EndToStart) != 0)
{
for (int i = 0; i < _filteredEntitiesCount; i++)
{
@@ -201,14 +201,14 @@ namespace DCFApixels.DragonECS.Graphs.Internal
//_executeMarker.End();
- return new EcsSubGraph(this);
+ return new SubGraphMap(this);
}
- public EcsSubGraph Execute(EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
+ public SubGraphMap Execute(JoinMode mode = JoinMode.StartToEnd)
{
return Execute_Internal(mode);
}
- public EcsSubGraph ExecuteFor(EcsSpan span, EcsSubGraphMode mode = EcsSubGraphMode.StartToEnd)
+ public SubGraphMap ExecuteFor(EcsSpan span, JoinMode mode = JoinMode.StartToEnd)
{
return ExecuteFor_Internal(span, mode);
}
@@ -246,10 +246,10 @@ namespace DCFApixels.DragonECS.Graphs.Internal
#region Internal result methods
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- internal EcsSubGraphSpan GetRelations_Internal(int sourceEntityID)
+ internal SubGraphMap.Node GetRelations_Internal(int sourceEntityID)
{
LinkedListHead basket = _linkedListSourceHeads[sourceEntityID];
- return new EcsSubGraphSpan(_linkedList._nodes, basket.head, basket.count);
+ return new SubGraphMap.Node(_linkedList._nodes, basket.head, basket.count);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal int GetRelation_Internal(int sourceEntityID)
@@ -305,7 +305,7 @@ namespace DCFApixels.DragonECS.Graphs.Internal
namespace DCFApixels.DragonECS
{
- public enum EcsSubGraphMode : byte
+ public enum JoinMode : byte
{
NONE = 0,
StartToEnd = 1 << 0,
@@ -313,15 +313,15 @@ namespace DCFApixels.DragonECS
All = StartToEnd | EndToStart,
}
- #region EcsSubGraphSpan/EcsSubGraph
- public readonly ref struct EcsSubGraph
+ #region SubGraphMap/SubGraphMapNode
+ public readonly ref struct SubGraphMap
{
private readonly JoinToSubGraphExecutor _executer;
public EntityGraph Graph
{
get { return _executer.Graph; }
}
- internal EcsSubGraph(JoinToSubGraphExecutor executer)
+ internal SubGraphMap(JoinToSubGraphExecutor executer)
{
_executer = executer;
}
@@ -333,7 +333,7 @@ namespace DCFApixels.DragonECS
{
return _executer.GetRelEntities();
}
- public EcsSubGraphSpan GetRelations(int startEntityID)
+ public Node GetRelations(int startEntityID)
{
return _executer.GetRelations_Internal(startEntityID);
}
@@ -345,74 +345,74 @@ namespace DCFApixels.DragonECS
{
return _executer.GetRelationsCount_Internal(startEntityID);
}
- }
- public readonly ref struct EcsSubGraphSpan
- {
- public static EcsSubGraphSpan Empty
+ public readonly ref struct Node
{
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- get { return new EcsSubGraphSpan(null, 0, 0); }
- }
-
- private readonly LinkedList.Node[] _nodes;
- private readonly LinkedList.NodeIndex _startNodeIndex;
- private readonly int _count;
- public int Count
- {
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- get { return _count; }
- }
- private IEnumerable E
- {
- get
- {
- List result = new List();
- foreach (var item in this)
- {
- result.Add(item);
- }
- return result;
- }
- }
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- internal EcsSubGraphSpan(LinkedList.Node[] nodes, LinkedList.NodeIndex startNodeIndex, int count)
- {
- _nodes = nodes;
- _startNodeIndex = startNodeIndex;
- _count = count;
- }
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- public Enumerator GetEnumerator()
- {
- return new Enumerator(_nodes, _startNodeIndex, _count);
- }
- public ref struct Enumerator
- {
- private readonly LinkedList.Node[] _nodes;
- private int _index;
- private int _count;
- private int _next;
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- internal Enumerator(LinkedList.Node[] nodes, LinkedList.NodeIndex startIndex, int count)
- {
- _nodes = nodes;
- _index = -1;
- _count = count;
- _next = (int)startIndex;
- }
- public int Current
+ public static Node Empty
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- get { return _nodes[_index].entityID; }
+ get { return new Node(null, 0, 0); }
+ }
+
+ private readonly LinkedList.Node[] _nodes;
+ private readonly LinkedList.NodeIndex _startNodeIndex;
+ private readonly int _count;
+ public int Count
+ {
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ get { return _count; }
+ }
+ private IEnumerable E
+ {
+ get
+ {
+ List result = new List();
+ foreach (var item in this)
+ {
+ result.Add(item);
+ }
+ return result;
+ }
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- public bool MoveNext()
+ internal Node(LinkedList.Node[] nodes, LinkedList.NodeIndex startNodeIndex, int count)
{
- _index = _next;
- _next = (int)_nodes[_next].next;
- return _index > 0 && _count-- > 0;
- //return _count-- > 0;
+ _nodes = nodes;
+ _startNodeIndex = startNodeIndex;
+ _count = count;
+ }
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public Enumerator GetEnumerator()
+ {
+ return new Enumerator(_nodes, _startNodeIndex, _count);
+ }
+ public ref struct Enumerator
+ {
+ private readonly LinkedList.Node[] _nodes;
+ private int _index;
+ private int _count;
+ private int _next;
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ internal Enumerator(LinkedList.Node[] nodes, LinkedList.NodeIndex startIndex, int count)
+ {
+ _nodes = nodes;
+ _index = -1;
+ _count = count;
+ _next = (int)startIndex;
+ }
+ public int Current
+ {
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ get { return _nodes[_index].entityID; }
+ }
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public bool MoveNext()
+ {
+ _index = _next;
+ _next = (int)_nodes[_next].next;
+ return _index > 0 && _count-- > 0;
+ //return _count-- > 0;
+ }
}
}
}
From 3b57922be3ea7ba8f3626d4fca158934e66a1b3b Mon Sep 17 00:00:00 2001
From: DCFApixels <99481254+DCFApixels@users.noreply.github.com>
Date: Wed, 20 Nov 2024 17:11:17 +0800
Subject: [PATCH 4/5] renaming
---
src/Executors/GraphQueries.cs | 14 +++++++-------
src/Executors/JoinToSubGraphExecutor.cs | 18 +++++++++---------
2 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/src/Executors/GraphQueries.cs b/src/Executors/GraphQueries.cs
index c33541f..1791c96 100644
--- a/src/Executors/GraphQueries.cs
+++ b/src/Executors/GraphQueries.cs
@@ -6,7 +6,7 @@ namespace DCFApixels.DragonECS
public static class GraphQueriesExtensions
{
#region JoinToGraph Empty
- public static SubGraphMap JoinGraph(this EcsWorld entities, JoinMode mode = JoinMode.StartToEnd)
+ public static SubGraphMap JoinGraph(this EcsWorld entities, JoinMode mode = JoinMode.Start)
{
entities.GetQueryCache(out JoinToSubGraphExecutor executor, out EmptyAspect _);
return executor.Execute(mode);
@@ -14,7 +14,7 @@ namespace DCFApixels.DragonECS
#endregion
#region JoinToGraph Mask
- public static SubGraphMap JoinSubGraph(this TCollection entities, IComponentMask mask, JoinMode mode = JoinMode.StartToEnd)
+ public static SubGraphMap JoinSubGraph(this TCollection entities, IComponentMask mask, JoinMode mode = JoinMode.Start)
where TCollection : IEntityStorage
{
if (ReferenceEquals(entities, entities.World))
@@ -24,11 +24,11 @@ namespace DCFApixels.DragonECS
}
return entities.ToSpan().JoinSubGraph(mask, mode);
}
- public static SubGraphMap JoinSubGraph(this EcsReadonlyGroup group, IComponentMask mask, JoinMode mode = JoinMode.StartToEnd)
+ public static SubGraphMap JoinSubGraph(this EcsReadonlyGroup group, IComponentMask mask, JoinMode mode = JoinMode.Start)
{
return group.ToSpan().JoinSubGraph(mask, mode);
}
- public static SubGraphMap JoinSubGraph(this EcsSpan span, IComponentMask mask, JoinMode mode = JoinMode.StartToEnd)
+ public static SubGraphMap JoinSubGraph(this EcsSpan span, IComponentMask mask, JoinMode mode = JoinMode.Start)
{
var executor = span.World.GetExecutorForMask(mask);
return executor.ExecuteFor(span, mode);
@@ -36,7 +36,7 @@ namespace DCFApixels.DragonECS
#endregion
#region JoinToGraph
- public static SubGraphMap JoinSubGraph(this TCollection entities, out TAspect aspect, JoinMode mode = JoinMode.StartToEnd)
+ public static SubGraphMap JoinSubGraph(this TCollection entities, out TAspect aspect, JoinMode mode = JoinMode.Start)
where TAspect : EcsAspect, new()
where TCollection : IEntityStorage
{
@@ -47,12 +47,12 @@ namespace DCFApixels.DragonECS
}
return entities.ToSpan().JoinSubGraph(out aspect, mode);
}
- public static SubGraphMap JoinSubGraph(this EcsReadonlyGroup group, out TAspect aspect, JoinMode mode = JoinMode.StartToEnd)
+ public static SubGraphMap JoinSubGraph(this EcsReadonlyGroup group, out TAspect aspect, JoinMode mode = JoinMode.Start)
where TAspect : EcsAspect, new()
{
return group.ToSpan().JoinSubGraph(out aspect, mode);
}
- public static SubGraphMap JoinSubGraph(this EcsSpan span, out TAspect aspect, JoinMode mode = JoinMode.StartToEnd)
+ public static SubGraphMap JoinSubGraph(this EcsSpan span, out TAspect aspect, JoinMode mode = JoinMode.Start)
where TAspect : EcsAspect, new()
{
span.World.GetQueryCache(out JoinToSubGraphExecutor executor, out aspect);
diff --git a/src/Executors/JoinToSubGraphExecutor.cs b/src/Executors/JoinToSubGraphExecutor.cs
index 7c58df3..d193260 100644
--- a/src/Executors/JoinToSubGraphExecutor.cs
+++ b/src/Executors/JoinToSubGraphExecutor.cs
@@ -121,14 +121,14 @@ namespace DCFApixels.DragonECS.Graphs.Internal
_linkedList.Clear();
//Заполнение массивов
- if ((mode & JoinMode.StartToEnd) != 0)
+ if ((mode & JoinMode.Start) != 0)
{
for (int i = 0; i < _filteredAllEntitiesCount; i++)
{
AddStart(_filteredAllEntities[i]);
}
}
- if ((mode & JoinMode.EndToStart) != 0)
+ if ((mode & JoinMode.End) != 0)
{
for (int i = 0; i < _filteredAllEntitiesCount; i++)
{
@@ -184,14 +184,14 @@ namespace DCFApixels.DragonECS.Graphs.Internal
_linkedList.Clear();
//Заполнение массивов
- if ((mode & JoinMode.StartToEnd) != 0)
+ if ((mode & JoinMode.Start) != 0)
{
for (int i = 0; i < _filteredEntitiesCount; i++)
{
AddStart(_filteredEntities[i]);
}
}
- if ((mode & JoinMode.EndToStart) != 0)
+ if ((mode & JoinMode.End) != 0)
{
for (int i = 0; i < _filteredEntitiesCount; i++)
{
@@ -204,11 +204,11 @@ namespace DCFApixels.DragonECS.Graphs.Internal
return new SubGraphMap(this);
}
- public SubGraphMap Execute(JoinMode mode = JoinMode.StartToEnd)
+ public SubGraphMap Execute(JoinMode mode = JoinMode.Start)
{
return Execute_Internal(mode);
}
- public SubGraphMap ExecuteFor(EcsSpan span, JoinMode mode = JoinMode.StartToEnd)
+ public SubGraphMap ExecuteFor(EcsSpan span, JoinMode mode = JoinMode.Start)
{
return ExecuteFor_Internal(span, mode);
}
@@ -308,9 +308,9 @@ namespace DCFApixels.DragonECS
public enum JoinMode : byte
{
NONE = 0,
- StartToEnd = 1 << 0,
- EndToStart = 1 << 1,
- All = StartToEnd | EndToStart,
+ Start = 1 << 0,
+ End = 1 << 1,
+ All = Start | End,
}
#region SubGraphMap/SubGraphMapNode
From a747b5043c1e091c481ad992e0dec0048b794935 Mon Sep 17 00:00:00 2001
From: DCFApixels <99481254+DCFApixels@users.noreply.github.com>
Date: Fri, 22 Nov 2024 12:15:29 +0800
Subject: [PATCH 5/5] api polishing
---
src/EntityGraph.cs | 2 +-
src/EntityGraphExtensions.cs | 9 ++
src/Executors/GraphQueries.cs | 24 ++---
src/Executors/JoinToSubGraphExecutor.cs | 113 ++++++++++++++++--------
4 files changed, 96 insertions(+), 52 deletions(-)
diff --git a/src/EntityGraph.cs b/src/EntityGraph.cs
index 705ca7e..55a8f7b 100644
--- a/src/EntityGraph.cs
+++ b/src/EntityGraph.cs
@@ -239,7 +239,7 @@ namespace DCFApixels.DragonECS
SubGraphMap subGraph;
EcsWorld graphWorld = _graph._graphWorld;
- subGraph = graphWorld.JoinGraph(JoinMode.All);
+ subGraph = graphWorld.Join(JoinMode.All);
foreach (var sourceE in delEntities)
{
var relEs = subGraph.GetRelations(sourceE);
diff --git a/src/EntityGraphExtensions.cs b/src/EntityGraphExtensions.cs
index d764839..c4bad67 100644
--- a/src/EntityGraphExtensions.cs
+++ b/src/EntityGraphExtensions.cs
@@ -71,6 +71,15 @@ namespace DCFApixels.DragonECS
Throw.UndefinedException();
return null;
}
+ public static EcsWorld GetGraphWorld(this EcsWorld self)
+ {
+ if (self.TryGetGraph(out EntityGraph graph))
+ {
+ return graph.GraphWorld;
+ }
+ Throw.UndefinedException();
+ return null;
+ }
public static bool IsGraphWorld(this EcsWorld self)
{
diff --git a/src/Executors/GraphQueries.cs b/src/Executors/GraphQueries.cs
index 1791c96..d6c494b 100644
--- a/src/Executors/GraphQueries.cs
+++ b/src/Executors/GraphQueries.cs
@@ -6,56 +6,56 @@ namespace DCFApixels.DragonECS
public static class GraphQueriesExtensions
{
#region JoinToGraph Empty
- public static SubGraphMap JoinGraph(this EcsWorld entities, JoinMode mode = JoinMode.Start)
+ public static SubGraphMap Join(this EcsWorld entities, JoinMode mode = JoinMode.Start)
{
- entities.GetQueryCache(out JoinToSubGraphExecutor executor, out EmptyAspect _);
+ entities.GetQueryCache(out JoinExecutor executor, out EmptyAspect _);
return executor.Execute(mode);
}
#endregion
#region JoinToGraph Mask
- public static SubGraphMap JoinSubGraph(this TCollection entities, IComponentMask mask, JoinMode mode = JoinMode.Start)
+ public static SubGraphMap Join(this TCollection entities, IComponentMask mask, JoinMode mode = JoinMode.Start)
where TCollection : IEntityStorage
{
if (ReferenceEquals(entities, entities.World))
{
- var executor = entities.World.GetExecutorForMask(mask);
+ var executor = entities.World.GetExecutorForMask(mask);
return executor.Execute();
}
return entities.ToSpan().JoinSubGraph(mask, mode);
}
- public static SubGraphMap JoinSubGraph(this EcsReadonlyGroup group, IComponentMask mask, JoinMode mode = JoinMode.Start)
+ public static SubGraphMap Join(this EcsReadonlyGroup group, IComponentMask mask, JoinMode mode = JoinMode.Start)
{
return group.ToSpan().JoinSubGraph(mask, mode);
}
public static SubGraphMap JoinSubGraph(this EcsSpan span, IComponentMask mask, JoinMode mode = JoinMode.Start)
{
- var executor = span.World.GetExecutorForMask(mask);
+ var executor = span.World.GetExecutorForMask(mask);
return executor.ExecuteFor(span, mode);
}
#endregion
#region JoinToGraph
- public static SubGraphMap JoinSubGraph(this TCollection entities, out TAspect aspect, JoinMode mode = JoinMode.Start)
+ public static SubGraphMap Join(this TCollection entities, out TAspect aspect, JoinMode mode = JoinMode.Start)
where TAspect : EcsAspect, new()
where TCollection : IEntityStorage
{
if (ReferenceEquals(entities, entities.World))
{
- entities.World.GetQueryCache(out JoinToSubGraphExecutor executor, out aspect);
+ entities.World.GetQueryCache(out JoinExecutor executor, out aspect);
return executor.Execute();
}
- return entities.ToSpan().JoinSubGraph(out aspect, mode);
+ return entities.ToSpan().Join(out aspect, mode);
}
public static SubGraphMap JoinSubGraph(this EcsReadonlyGroup group, out TAspect aspect, JoinMode mode = JoinMode.Start)
where TAspect : EcsAspect, new()
{
- return group.ToSpan().JoinSubGraph(out aspect, mode);
+ return group.ToSpan().Join(out aspect, mode);
}
- public static SubGraphMap JoinSubGraph(this EcsSpan span, out TAspect aspect, JoinMode mode = JoinMode.Start)
+ public static SubGraphMap Join(this EcsSpan span, out TAspect aspect, JoinMode mode = JoinMode.Start)
where TAspect : EcsAspect, new()
{
- span.World.GetQueryCache(out JoinToSubGraphExecutor executor, out aspect);
+ span.World.GetQueryCache(out JoinExecutor executor, out aspect);
return executor.ExecuteFor(span, mode);
}
#endregion
diff --git a/src/Executors/JoinToSubGraphExecutor.cs b/src/Executors/JoinToSubGraphExecutor.cs
index d193260..7ad71b1 100644
--- a/src/Executors/JoinToSubGraphExecutor.cs
+++ b/src/Executors/JoinToSubGraphExecutor.cs
@@ -3,12 +3,13 @@ using DCFApixels.DragonECS.Graphs.Internal;
using DCFApixels.DragonECS.UncheckedCore;
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Runtime.CompilerServices;
using LinkedList = DCFApixels.DragonECS.Graphs.Internal.OnlyAppendHeadLinkedList;
namespace DCFApixels.DragonECS.Graphs.Internal
{
- internal sealed class JoinToSubGraphExecutor : MaskQueryExecutor, IEcsWorldEventListener
+ internal sealed class JoinExecutor : MaskQueryExecutor, IEcsWorldEventListener
{
private EntityGraph _graph;
private EcsMaskIterator _iterator;
@@ -62,6 +63,11 @@ namespace DCFApixels.DragonECS.Graphs.Internal
#region OnInitialize/OnDestroy
protected override void OnInitialize()
{
+ if (World.IsGraphWorld() == false)
+ {
+ Throw.Exception("The JounSubGraph query can only be used for EntityGraph.GraphWorld or a collection of that world.");
+ }
+
_versionsChecker = new WorldStateVersionsChecker(Mask);
_linkedList = new OnlyAppendHeadLinkedList(World.Capacity);
_linkedListSourceHeads = new LinkedListHead[World.Capacity];
@@ -246,10 +252,10 @@ namespace DCFApixels.DragonECS.Graphs.Internal
#region Internal result methods
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- internal SubGraphMap.Node GetRelations_Internal(int sourceEntityID)
+ internal SubGraphMap.NodeInfo GetRelations_Internal(int sourceEntityID)
{
LinkedListHead basket = _linkedListSourceHeads[sourceEntityID];
- return new SubGraphMap.Node(_linkedList._nodes, basket.head, basket.count);
+ return new SubGraphMap.NodeInfo(_linkedList._nodes, basket.head, basket.count);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal int GetRelation_Internal(int sourceEntityID)
@@ -291,7 +297,7 @@ namespace DCFApixels.DragonECS.Graphs.Internal
#endregion
#region GetEntites
- internal EcsSpan GetSourceEntities()
+ internal EcsSpan GetNodeEntities()
{
return UncheckedCoreUtility.CreateSpan(WorldID, _sourceEntities, _sourceEntitiesCount);
}
@@ -313,47 +319,64 @@ namespace DCFApixels.DragonECS
All = Start | End,
}
- #region SubGraphMap/SubGraphMapNode
+ #region SubGraphMap
public readonly ref struct SubGraphMap
{
- private readonly JoinToSubGraphExecutor _executer;
+ private readonly JoinExecutor _executer;
public EntityGraph Graph
{
get { return _executer.Graph; }
}
- internal SubGraphMap(JoinToSubGraphExecutor executer)
+ internal SubGraphMap(JoinExecutor executer)
{
_executer = executer;
}
- public EcsSpan GetSourceEntities()
+
+ public EcsSpan WhereNodes(out TAspect a)
+ where TAspect : EcsAspect, new()
{
- return _executer.GetSourceEntities();
+ return _executer.GetNodeEntities().Where(out a);
}
- public EcsSpan GetAllRelEntities()
+ public EcsSpan WhereNodes(IComponentMask mask)
+ {
+ return _executer.GetNodeEntities().Where(mask);
+ }
+ public EcsSpan WhereNodes(out TAspect a, Comparison comparison)
+ where TAspect : EcsAspect, new()
+ {
+ return _executer.GetNodeEntities().Where(out a, comparison);
+ }
+ public EcsSpan WhereNodes(IComponentMask mask, Comparison comparison)
+ {
+ return _executer.GetNodeEntities().Where(mask, comparison);
+ }
+
+ public EcsSpan GetNodes()
+ {
+ return _executer.GetNodeEntities();
+ }
+ public EcsSpan GetAllRelations()
{
return _executer.GetRelEntities();
}
- public Node GetRelations(int startEntityID)
+
+ public NodeInfo GetRelations(int nodeEntityID)
{
- return _executer.GetRelations_Internal(startEntityID);
- }
- public int GetRelation(int startEntityID)
- {
- return _executer.GetRelation_Internal(startEntityID);
- }
- public int GetRelationsCount(int startEntityID)
- {
- return _executer.GetRelationsCount_Internal(startEntityID);
+ return _executer.GetRelations_Internal(nodeEntityID);
}
- public readonly ref struct Node
+ public int GetRelation(int nodeEntityID)
{
- public static Node Empty
- {
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- get { return new Node(null, 0, 0); }
- }
+ return _executer.GetRelation_Internal(nodeEntityID);
+ }
+ public int GetRelationsCount(int nodeEntityID)
+ {
+ return _executer.GetRelationsCount_Internal(nodeEntityID);
+ }
+ [DebuggerTypeProxy(typeof(DebuggerProxy))]
+ public readonly ref struct NodeInfo
+ {
private readonly LinkedList.Node[] _nodes;
private readonly LinkedList.NodeIndex _startNodeIndex;
private readonly int _count;
@@ -362,20 +385,8 @@ namespace DCFApixels.DragonECS
[MethodImpl(MethodImplOptions.AggressiveInlining)]
get { return _count; }
}
- private IEnumerable E
- {
- get
- {
- List result = new List();
- foreach (var item in this)
- {
- result.Add(item);
- }
- return result;
- }
- }
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- internal Node(LinkedList.Node[] nodes, LinkedList.NodeIndex startNodeIndex, int count)
+ internal NodeInfo(LinkedList.Node[] nodes, LinkedList.NodeIndex startNodeIndex, int count)
{
_nodes = nodes;
_startNodeIndex = startNodeIndex;
@@ -414,6 +425,30 @@ namespace DCFApixels.DragonECS
//return _count-- > 0;
}
}
+ private class DebuggerProxy
+ {
+ private readonly LinkedList.Node[] _nodes;
+ private readonly LinkedList.NodeIndex _startNodeIndex;
+ private readonly int _count;
+ private IEnumerable Entities
+ {
+ get
+ {
+ List result = new List();
+ foreach (var item in new NodeInfo(_nodes, _startNodeIndex, _count))
+ {
+ result.Add(item);
+ }
+ return result;
+ }
+ }
+ public DebuggerProxy(NodeInfo node)
+ {
+ _nodes = node._nodes;
+ _startNodeIndex = node._startNodeIndex;
+ _count = node._count;
+ }
+ }
}
}
#endregion