44 lines
909 B
C#
44 lines
909 B
C#
using VContainer.Internal;
|
|
|
|
namespace VContainer.Unity
|
|
{
|
|
interface IPlayerLoopItem
|
|
{
|
|
bool MoveNext();
|
|
}
|
|
|
|
sealed class PlayerLoopRunner
|
|
{
|
|
readonly FreeList<IPlayerLoopItem> runners = new FreeList<IPlayerLoopItem>(16);
|
|
|
|
int running;
|
|
|
|
public void Dispatch(IPlayerLoopItem item)
|
|
{
|
|
runners.Add(item);
|
|
}
|
|
|
|
public void Run()
|
|
{
|
|
var span =
|
|
#if NETSTANDARD2_1
|
|
runners.AsSpan();
|
|
#else
|
|
runners;
|
|
#endif
|
|
for (var i = 0; i < span.Length; i++)
|
|
{
|
|
var item = span[i];
|
|
if (item != null)
|
|
{
|
|
var continued = item.MoveNext();
|
|
if (!continued)
|
|
{
|
|
runners.RemoveAt(i);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|