53 lines
1.4 KiB
C#
53 lines
1.4 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using BlueWest.Coroutines;
|
|
using BlueWest.Tools;
|
|
|
|
namespace BlueWest.Core.ComponentSystem
|
|
{
|
|
public class Component
|
|
{
|
|
protected readonly EventManager _eventManager;
|
|
|
|
public bool IsActive { get; private set; } = true;
|
|
|
|
private readonly Dictionary<int, IEnumerator> _coroutines = new Dictionary<int, IEnumerator>(10000);
|
|
|
|
private int _coroutineCount = 0;
|
|
|
|
public Component(EventManager eventManager)
|
|
{
|
|
_eventManager = eventManager;
|
|
}
|
|
|
|
public void StartCoroutine(IEnumerator routine)
|
|
{
|
|
_coroutines.Add(_coroutineCount, routine);
|
|
_coroutineCount++;
|
|
}
|
|
|
|
public void HandleCoroutines()
|
|
{
|
|
for (var i = 0; i < _coroutineCount; i++)
|
|
{
|
|
var yielded = _coroutines[i].Current is CustomYieldInstruction yielder && yielder.MoveNext();
|
|
|
|
if (yielded || _coroutines[i].MoveNext()) continue;
|
|
_coroutines.Remove(i);
|
|
_coroutineCount--;
|
|
i--;
|
|
}
|
|
}
|
|
|
|
public void EveryFrame(double delta)
|
|
{
|
|
if (!IsActive) return;
|
|
Update(delta);
|
|
HandleCoroutines();
|
|
}
|
|
|
|
public virtual void Update(double delta) { }
|
|
|
|
public virtual void Start() { }
|
|
}
|
|
} |