mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-02-14 19:29:36 +01:00
61 lines
1.3 KiB
C#
61 lines
1.3 KiB
C#
using Arch.Core;
|
|
|
|
namespace Robust.Shared.GameObjects;
|
|
|
|
internal struct ArchChunkIterator
|
|
{
|
|
private readonly ArchetypeEnumerator _archetypes;
|
|
|
|
internal ArchChunkIterator(in ArchetypeEnumerator archetypes)
|
|
{
|
|
_archetypes = archetypes;
|
|
}
|
|
|
|
public ArchChunkEnumerator GetEnumerator()
|
|
{
|
|
return new ArchChunkEnumerator(_archetypes);
|
|
}
|
|
}
|
|
|
|
internal struct ArchChunkEnumerator
|
|
{
|
|
private ArchetypeEnumerator _archetypes;
|
|
private int _chunkIndex;
|
|
public Chunk Current => _archetypes.Current.GetChunk(_chunkIndex);
|
|
|
|
internal ArchChunkEnumerator(in ArchetypeEnumerator archetypes)
|
|
{
|
|
_archetypes = archetypes;
|
|
|
|
if (_archetypes.MoveNext())
|
|
{
|
|
_chunkIndex = _archetypes.Current.ChunkCount;
|
|
}
|
|
}
|
|
|
|
public bool MoveNext()
|
|
{
|
|
if (--_chunkIndex >= 0 && Current.Size > 0)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
if (!_archetypes.MoveNext())
|
|
{
|
|
return false;
|
|
}
|
|
|
|
_chunkIndex = _archetypes.Current.ChunkCount - 1;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
internal static partial class QueryExtensions
|
|
{
|
|
internal static ArchChunkIterator ChunkIterator(this in Query query, World world)
|
|
{
|
|
var archetypeEnumerator = new ArchetypeEnumerator(query.Matches);
|
|
return new ArchChunkIterator(in archetypeEnumerator);
|
|
}
|
|
}
|