using System.Collections.Generic; using Runtime.Controller; namespace Controller { public class Controllers : IExecute, IInitialization, ILateExecute, ICleanup, IFixedExecute, IAwake { private readonly List _initializeControllers; private readonly List _executeControllers; private readonly List _lateControllers; private readonly List _cleanupControllers; private readonly List _fixedExecuteControllers; private readonly List _awakeExecuteControllers; public Controllers() { _initializeControllers = new List(); _executeControllers = new List(); _lateControllers = new List(); _cleanupControllers = new List(); _fixedExecuteControllers = new List(); } 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()); } } }