32 lines
454 B
C#
32 lines
454 B
C#
|
using MoonTools.ECS.Collections;
|
||
|
|
||
|
namespace MoonTools.ECS;
|
||
|
|
||
|
internal class IdAssigner
|
||
|
{
|
||
|
uint Next;
|
||
|
NativeArray<uint> AvailableIds = new NativeArray<uint>();
|
||
|
|
||
|
public uint Assign()
|
||
|
{
|
||
|
if (!AvailableIds.TryPop(out var id))
|
||
|
{
|
||
|
id = Next;
|
||
|
Next += 1;
|
||
|
}
|
||
|
|
||
|
return id;
|
||
|
}
|
||
|
|
||
|
public void Unassign(uint id)
|
||
|
{
|
||
|
AvailableIds.Append(id);
|
||
|
}
|
||
|
|
||
|
public void CopyTo(IdAssigner other)
|
||
|
{
|
||
|
AvailableIds.CopyTo(other.AvailableIds);
|
||
|
other.Next = Next;
|
||
|
}
|
||
|
}
|