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