using Syntriax.Engine.Core.Abstract; using Syntriax.Engine.Core.Exceptions; namespace Syntriax.Engine.Core.Factory; public class BehaviourControllerFactory { public IBehaviourController Instantiate(IHierarchyObject hierarchyObject) => Instantiate(hierarchyObject); public T Instantiate(IHierarchyObject hierarchyObject, params object?[]? args) where T : class, IBehaviourController { T behaviourController = TypeFactory.Get(args); if (!behaviourController.Assign(hierarchyObject)) throw AssignException.From(behaviourController, hierarchyObject); return behaviourController; } }