diff --git a/src/Builtin/EcsGraphWorld.cs b/src/Builtin/EcsGraphWorld.cs index ef7103a..468aec9 100644 --- a/src/Builtin/EcsGraphWorld.cs +++ b/src/Builtin/EcsGraphWorld.cs @@ -10,10 +10,10 @@ namespace DCFApixels.DragonECS [MetaID("DragonECS_ECC4CF479301897718600925B00A7DB4")] public sealed class EcsGraphWorld : EcsWorld, IInjectionUnit, IInjectionBlock { - public EcsGraphWorld() : base() { } - public EcsGraphWorld(EcsWorldConfig config = null, string name = null, short worldID = -1) : base(config, name == null ? "Default" : name, worldID) { } - public EcsGraphWorld(IConfigContainer configs, string name = null, short worldID = -1) : base(configs, name == null ? "Default" : name, worldID) { } - + private const string DEFAULT_NAME = "Graph"; + public EcsGraphWorld() : base(default(EcsWorldConfig), DEFAULT_NAME) { } + public EcsGraphWorld(EcsWorldConfig config = null, string name = null, short worldID = -1) : base(config, name == null ? DEFAULT_NAME : name, worldID) { } + public EcsGraphWorld(IConfigContainer configs, string name = null, short worldID = -1) : base(configs, name == null ? DEFAULT_NAME : name, worldID) { } void IInjectionUnit.InitInjectionNode(InjectionGraph nodes) { nodes.AddNode(this); diff --git a/src/EntityGraph.cs b/src/EntityGraph.cs index 0a040bb..12d9fb6 100644 --- a/src/EntityGraph.cs +++ b/src/EntityGraph.cs @@ -88,11 +88,29 @@ namespace DCFApixels.DragonECS { if (_matrix.TryGetValue(startEntityID, endEntityID, out int relEntityID)) { +#if DEBUG && DRAGONECS_DEEP_DEBUG + if(_graphWorld.IsUsed(relEntityID) == false) + { + throw new InvalidOperationException(); + } + var (s, e) = GetRelationStartEnd(relEntityID); + if (s != startEntityID || e != endEntityID) + { + throw new InvalidOperationException(); + } +#endif return relEntityID; } return NewRelationInternal(startEntityID, endEntityID); } [MethodImpl(MethodImplOptions.AggressiveInlining)] + public int GetOrNewRelationNoDirection(int entityID, int otherEntityID) + { + return GetOrNewRelation( + entityID < otherEntityID ? entityID : otherEntityID, + entityID > otherEntityID ? entityID : otherEntityID); + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public int GetOrNewInverseRelation(int relEntityID) { #if DEBUG || !DISABLE_DRAGONECS_ASSERT_CHEKS @@ -106,6 +124,15 @@ namespace DCFApixels.DragonECS private int NewRelationInternal(int startEntityID, int endEntityID) { int relEntityID = _graphWorld.NewEntity(); + +#if DEBUG && DRAGONECS_DEEP_DEBUG + var (s, e) = GetRelationStartEnd(relEntityID); + if (s != 0 || e != 0) + { + throw new InvalidOperationException(); + } +#endif + _matrix.Add(startEntityID, endEntityID, relEntityID); _relEntityInfos[relEntityID] = new RelationInfo(startEntityID, endEntityID); _count++;