mirror of
https://github.com/DCFApixels/DragonECS.git
synced 2025-09-19 02:24:37 +08:00
Update EcsSubject.cs
This commit is contained in:
parent
1c5ce4561b
commit
9aef47e66b
@ -125,21 +125,18 @@ namespace DCFApixels.DragonECS
|
|||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
|
||||||
|
|
||||||
#region Extensions
|
#region Iterator
|
||||||
public static class EcsSubjectExtensions
|
public EcsSubjectIterator GetIterator<TSubject>() where TSubject : EcsSubject
|
||||||
{
|
{
|
||||||
public static EcsSubjectIterator<TSubject> GetIterator<TSubject>(this TSubject self) where TSubject : EcsSubject
|
return new EcsSubjectIterator(this, World.Entities);
|
||||||
{
|
|
||||||
return new EcsSubjectIterator<TSubject>(self, self.World.Entities);
|
|
||||||
}
|
}
|
||||||
public static EcsSubjectIterator<TSubject> GetIteratorFor<TSubject>(this TSubject self, EcsReadonlyGroup sourceGroup) where TSubject : EcsSubject
|
public EcsSubjectIterator GetIteratorFor<TSubject>(EcsReadonlyGroup sourceGroup) where TSubject : EcsSubject
|
||||||
{
|
{
|
||||||
return new EcsSubjectIterator<TSubject>(self, sourceGroup);
|
return new EcsSubjectIterator(this, sourceGroup);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
#region BuilderBase
|
#region BuilderBase
|
||||||
public abstract class EcsSubjectBuilderBase
|
public abstract class EcsSubjectBuilderBase
|
||||||
@ -201,20 +198,20 @@ namespace DCFApixels.DragonECS
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Iterator
|
#region Iterator
|
||||||
public ref struct EcsSubjectIterator<TSubject> where TSubject : EcsSubject
|
public ref struct EcsSubjectIterator
|
||||||
{
|
{
|
||||||
public readonly TSubject s;
|
public readonly EcsMask mask;
|
||||||
private EcsReadonlyGroup _sourceGroup;
|
private EcsReadonlyGroup _sourceGroup;
|
||||||
private Enumerator _enumerator;
|
private Enumerator _enumerator;
|
||||||
|
|
||||||
public EcsSubjectIterator(TSubject s, EcsReadonlyGroup sourceGroup)
|
public EcsSubjectIterator(EcsSubject subject, EcsReadonlyGroup sourceGroup)
|
||||||
{
|
{
|
||||||
this.s = s;
|
mask = subject.mask;
|
||||||
_sourceGroup = sourceGroup;
|
_sourceGroup = sourceGroup;
|
||||||
_enumerator = default;
|
_enumerator = default;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Entity
|
public int Current
|
||||||
{
|
{
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
get => _enumerator.Current;
|
get => _enumerator.Current;
|
||||||
@ -230,9 +227,8 @@ namespace DCFApixels.DragonECS
|
|||||||
while (enumerator.MoveNext())
|
while (enumerator.MoveNext())
|
||||||
group.AddInternal(enumerator.Current);
|
group.AddInternal(enumerator.Current);
|
||||||
}
|
}
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
||||||
public Enumerator GetEnumerator() => new Enumerator(_sourceGroup, s);
|
|
||||||
|
|
||||||
|
#region object
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
StringBuilder result = new StringBuilder();
|
StringBuilder result = new StringBuilder();
|
||||||
@ -243,6 +239,11 @@ namespace DCFApixels.DragonECS
|
|||||||
}
|
}
|
||||||
return result.ToString();
|
return result.ToString();
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Enumerator
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public Enumerator GetEnumerator() => new Enumerator(_sourceGroup, mask);
|
||||||
|
|
||||||
public ref struct Enumerator
|
public ref struct Enumerator
|
||||||
{
|
{
|
||||||
@ -251,12 +252,12 @@ namespace DCFApixels.DragonECS
|
|||||||
private readonly int[] _exc;
|
private readonly int[] _exc;
|
||||||
private readonly IEcsPoolImplementation[] _pools;
|
private readonly IEcsPoolImplementation[] _pools;
|
||||||
|
|
||||||
public Enumerator(EcsReadonlyGroup sourceGroup, EcsSubject subject)
|
public Enumerator(EcsReadonlyGroup sourceGroup, EcsMask mask)
|
||||||
{
|
{
|
||||||
_sourceGroup = sourceGroup.GetEnumerator();
|
_sourceGroup = sourceGroup.GetEnumerator();
|
||||||
_inc = subject.mask._inc;
|
_inc = mask._inc;
|
||||||
_exc = subject.mask._exc;
|
_exc = mask._exc;
|
||||||
_pools = subject.World._pools;
|
_pools = sourceGroup.World._pools;
|
||||||
}
|
}
|
||||||
public int Current
|
public int Current
|
||||||
{
|
{
|
||||||
@ -278,6 +279,7 @@ namespace DCFApixels.DragonECS
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user