diff --git a/src/Builtin/Worlds.cs b/src/Builtin/Worlds.cs
index 5f50cfb..75e5e4d 100644
--- a/src/Builtin/Worlds.cs
+++ b/src/Builtin/Worlds.cs
@@ -13,9 +13,10 @@ namespace DCFApixels.DragonECS
[MetaID("DragonECS_4EE3527C92015BAB0299CB7B4E2663D1")]
public sealed class EcsDefaultWorld : EcsWorld, IInjectionUnit
{
- public EcsDefaultWorld() : base() { }
- public EcsDefaultWorld(EcsWorldConfig config = null, string name = null, short worldID = -1) : base(config, name == null ? "Default" : name, worldID) { }
- public EcsDefaultWorld(IConfigContainer configs, string name = null, short worldID = -1) : base(configs, name == null ? "Default" : name, worldID) { }
+ private const string DEFAULT_NAME = "Default";
+ public EcsDefaultWorld() : base(default(EcsWorldConfig), DEFAULT_NAME) { }
+ public EcsDefaultWorld(EcsWorldConfig config = null, string name = null, short worldID = -1) : base(config, name == null ? DEFAULT_NAME : name, worldID) { }
+ public EcsDefaultWorld(IConfigContainer configs, string name = null, short worldID = -1) : base(configs, name == null ? DEFAULT_NAME : name, worldID) { }
void IInjectionUnit.InitInjectionNode(InjectionGraph nodes) { nodes.AddNode(this); }
}
/// EcsWrold for store event entities.
@@ -26,9 +27,10 @@ namespace DCFApixels.DragonECS
[MetaID("DragonECS_D7CE527C920160BCD765EFA72DBF8B89")]
public sealed class EcsEventWorld : EcsWorld, IInjectionUnit
{
- public EcsEventWorld() : base() { }
- public EcsEventWorld(EcsWorldConfig config = null, string name = null, short worldID = -1) : base(config, name == null ? "Events" : name, worldID) { }
- public EcsEventWorld(IConfigContainer configs, string name = null, short worldID = -1) : base(configs, name == null ? "Events" : name, worldID) { }
+ private const string DEFAULT_NAME = "Events";
+ public EcsEventWorld() : base(default(EcsWorldConfig), DEFAULT_NAME) { }
+ public EcsEventWorld(EcsWorldConfig config = null, string name = null, short worldID = -1) : base(config, name == null ? DEFAULT_NAME : name, worldID) { }
+ public EcsEventWorld(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/EcsWorld.cs b/src/EcsWorld.cs
index 6ed6fe3..a07e9ab 100644
--- a/src/EcsWorld.cs
+++ b/src/EcsWorld.cs
@@ -257,6 +257,38 @@ namespace DCFApixels.DragonECS
{
return Get>().Instance;
}
+ public void GetAspects(out TAspect0 a0)
+ where TAspect0 : new()
+ {
+ a0 = GetAspect();
+ }
+ public void GetAspects(out TAspect0 a0, out TAspect1 a1)
+ where TAspect0 : new()
+ where TAspect1 : new()
+ {
+ a0 = GetAspect();
+ a1 = GetAspect();
+ }
+ public void GetAspects(out TAspect0 a0, out TAspect1 a1, out TAspect2 a2)
+ where TAspect0 : new()
+ where TAspect1 : new()
+ where TAspect2 : new()
+ {
+ a0 = GetAspect();
+ a1 = GetAspect();
+ a2 = GetAspect();
+ }
+ public void GetAspects(out TAspect0 a0, out TAspect1 a1, out TAspect2 a2, out TAspect3 a3)
+ where TAspect0 : new()
+ where TAspect1 : new()
+ where TAspect2 : new()
+ where TAspect3 : new()
+ {
+ a0 = GetAspect();
+ a1 = GetAspect();
+ a2 = GetAspect();
+ a3 = GetAspect();
+ }
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TAspect GetAspect(out EcsMask mask) where TAspect : new()
{
@@ -1185,6 +1217,7 @@ namespace DCFApixels.DragonECS
{
private EcsWorld _world;
private List _queries;
+ public string Name { get { return _world.Name; } }
public EntitySlotInfo[] Entities
{
get
diff --git a/src/Executors/EcsWhereToGroupExecutor.cs b/src/Executors/EcsWhereToGroupExecutor.cs
index 7765503..8d57c6e 100644
--- a/src/Executors/EcsWhereToGroupExecutor.cs
+++ b/src/Executors/EcsWhereToGroupExecutor.cs
@@ -68,6 +68,24 @@ namespace DCFApixels.DragonECS.Internal
{
_version++;
_iterator.IterateTo(World.Entities, _filteredAllGroup);
+#if DEBUG && DRAGONECS_DEEP_DEBUG
+ if(_filteredGroup == null)
+ {
+ _filteredGroup = EcsGroup.New(World);
+ }
+ _filteredGroup.Clear();
+ foreach (var e in World.Entities)
+ {
+ if(World.IsMatchesMask(Mask, e))
+ {
+ _filteredGroup.Add(e);
+ }
+ }
+ if(_filteredAllGroup.SetEquals(_filteredGroup) == false)
+ {
+ throw new System.InvalidOperationException();
+ }
+#endif
}
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
diff --git a/src/Executors/MaskQueryExecutor.cs b/src/Executors/MaskQueryExecutor.cs
index de96a69..849b8ed 100644
--- a/src/Executors/MaskQueryExecutor.cs
+++ b/src/Executors/MaskQueryExecutor.cs
@@ -158,17 +158,17 @@ namespace DCFApixels.DragonECS.Core
{
*_versions = _world.Version;
- long* ptr = _versions;
+ long* versionsPtr = _versions;
var slots = _world._poolSlots;
foreach (var slotIndex in _maskInc)
{
- ptr++;
- *ptr = slots[slotIndex].version;
+ versionsPtr++;
+ *versionsPtr = slots[slotIndex].version;
}
foreach (var slotIndex in _maskExc)
{
- ptr++;
- *ptr = slots[slotIndex].version;
+ versionsPtr++;
+ *versionsPtr = slots[slotIndex].version;
}
}
public bool CheckAndNext()
@@ -179,26 +179,28 @@ namespace DCFApixels.DragonECS.Core
}
*_versions = _world.Version;
- long* ptr = _versions;
+ long* versionsPtr = _versions;
var slots = _world._poolSlots;
bool result = _count != 1;
foreach (var slotIndex in _maskInc)
{
- ptr++;
- if (*ptr != slots[slotIndex].version)
+ versionsPtr++;
+ if (*versionsPtr != slots[slotIndex].version)
{
result = false;
- *ptr = slots[slotIndex].version;
+ *versionsPtr = slots[slotIndex].version;
}
}
foreach (var slotIndex in _maskExc)
{
- ptr++;
- if (*ptr != slots[slotIndex].version)
- {
- result = false;
- *ptr = slots[slotIndex].version;
- }
+ return false; //TODO hotfix, не правильная логика проверки версия для EXC, потому сейчас она скипается
+
+ //versionsPtr++;
+ //if (*versionsPtr != slots[slotIndex].version)
+ //{
+ // result = false;
+ // *versionsPtr = slots[slotIndex].version;
+ //}
}
return result;
}