MoonTools.ECS/src/IdAssigner.cs

35 lines
506 B
C#
Raw Normal View History

2023-11-03 19:40:26 +00:00
using MoonTools.ECS.Collections;
namespace MoonTools.ECS;
internal class IdAssigner
{
uint Next;
NativeArray<uint> AvailableIds = new NativeArray<uint>();
2023-11-08 01:46:44 +00:00
public uint Assign(out bool recycled)
2023-11-03 19:40:26 +00:00
{
2023-11-08 01:46:44 +00:00
recycled = AvailableIds.TryPop(out var id);
if (recycled)
2023-11-03 19:40:26 +00:00
{
2023-11-08 01:46:44 +00:00
return id;
2023-11-03 19:40:26 +00:00
}
2023-11-08 01:46:44 +00:00
id = Next;
Next += 1;
2023-11-03 19:40:26 +00:00
return id;
}
public void Unassign(uint id)
{
AvailableIds.Append(id);
}
public void CopyTo(IdAssigner other)
{
AvailableIds.CopyTo(other.AvailableIds);
other.Next = Next;
}
}