dddushesss 53ffc3a8f6 fixes
2022-02-05 22:15:01 +03:00

114 lines
3.3 KiB
C#

using System.Collections.Generic;
using Runtime.Controller;
namespace Controller
{
public class Controllers : IExecute, IInitialization, ILateExecute, ICleanup, IFixedExecute, IAwake
{
private readonly List<IInitialization> _initializeControllers;
private readonly List<IExecute> _executeControllers;
private readonly List<ILateExecute> _lateControllers;
private readonly List<ICleanup> _cleanupControllers;
private readonly List<IFixedExecute> _fixedExecuteControllers;
private readonly List<IAwake> _awakeExecuteControllers;
public Controllers()
{
_initializeControllers = new List<IInitialization>();
_executeControllers = new List<IExecute>();
_lateControllers = new List<ILateExecute>();
_cleanupControllers = new List<ICleanup>();
_fixedExecuteControllers = new List<IFixedExecute>();
}
internal Controllers Add(IController controller)
{
if (controller is IInitialization initializeController)
{
_initializeControllers.Add(initializeController);
}
if (controller is IExecute executeController)
{
_executeControllers.Add(executeController);
}
if (controller is ILateExecute lateExecuteController)
{
_lateControllers.Add(lateExecuteController);
}
if (controller is ICleanup cleanupController)
{
_cleanupControllers.Add(cleanupController);
}
if (controller is IFixedExecute fixedExecute)
{
_fixedExecuteControllers.Add(fixedExecute);
}
return this;
}
public void Remove(IController controller)
{
if (controller is IInitialization initializeController)
{
_initializeControllers.Remove(initializeController);
}
if (controller is IExecute executeController)
{
_executeControllers.Remove(executeController);
}
if (controller is ILateExecute lateExecuteController)
{
_lateControllers.Remove(lateExecuteController);
}
if (controller is ICleanup cleanupController)
{
_cleanupControllers.Remove(cleanupController);
}
if (controller is IFixedExecute fixedExecute)
{
_fixedExecuteControllers.Remove(fixedExecute);
}
}
public void Execute()
{
_executeControllers?.ForEach(x => x.Execute());
}
public void Init()
{
_initializeControllers.ForEach(x=> x.Init());
}
public void LateExecute()
{
_lateControllers?.ForEach(x => x.LateExecute());
}
public void Cleanup()
{
_cleanupControllers?.ForEach(x => x.Cleanup());
}
public void FixedExecute()
{
_fixedExecuteControllers?.ForEach(x => x.FixedExecute());
}
public void Awake()
{
_awakeExecuteControllers?.ForEach(x => x.Awake());
}
}
}