hot fixes

This commit is contained in:
DCFApixels 2025-03-30 22:40:39 +08:00
parent dca386f0d2
commit 17813b29cb
4 changed files with 76 additions and 21 deletions

View File

@ -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); }
}
/// <summary> EcsWrold for store event entities. </summary>
@ -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); }
}
}

View File

@ -257,6 +257,38 @@ namespace DCFApixels.DragonECS
{
return Get<AspectCache<TAspect>>().Instance;
}
public void GetAspects<TAspect0>(out TAspect0 a0)
where TAspect0 : new()
{
a0 = GetAspect<TAspect0>();
}
public void GetAspects<TAspect0, TAspect1>(out TAspect0 a0, out TAspect1 a1)
where TAspect0 : new()
where TAspect1 : new()
{
a0 = GetAspect<TAspect0>();
a1 = GetAspect<TAspect1>();
}
public void GetAspects<TAspect0, TAspect1, TAspect2>(out TAspect0 a0, out TAspect1 a1, out TAspect2 a2)
where TAspect0 : new()
where TAspect1 : new()
where TAspect2 : new()
{
a0 = GetAspect<TAspect0>();
a1 = GetAspect<TAspect1>();
a2 = GetAspect<TAspect2>();
}
public void GetAspects<TAspect0, TAspect1, TAspect2, TAspect3>(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<TAspect0>();
a1 = GetAspect<TAspect1>();
a2 = GetAspect<TAspect2>();
a3 = GetAspect<TAspect3>();
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TAspect GetAspect<TAspect>(out EcsMask mask) where TAspect : new()
{
@ -1185,6 +1217,7 @@ namespace DCFApixels.DragonECS
{
private EcsWorld _world;
private List<MaskQueryExecutor> _queries;
public string Name { get { return _world.Name; } }
public EntitySlotInfo[] Entities
{
get

View File

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

View File

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