diff --git a/Engine.Core/Factory/BehaviourControllerFactory.cs b/Engine.Core/Factory/BehaviourControllerFactory.cs index f3302a6..13f8c46 100644 --- a/Engine.Core/Factory/BehaviourControllerFactory.cs +++ b/Engine.Core/Factory/BehaviourControllerFactory.cs @@ -4,10 +4,10 @@ namespace Syntriax.Engine.Core.Factory; public class BehaviourControllerFactory { - public static IBehaviourController Instantiate(IUniverseObject universeObject) - => Instantiate(universeObject); + public static IBehaviourController Instantiate(IUniverseObject universeObject, IStateEnable? stateEnable = null) + => Instantiate(universeObject, stateEnable); - public static T Instantiate(IUniverseObject universeObject, params object?[]? args) + public static T Instantiate(IUniverseObject universeObject, IStateEnable? stateEnable = null, params object?[]? args) where T : class, IBehaviourController { T behaviourController = TypeFactory.Get(args); @@ -18,6 +18,17 @@ public class BehaviourControllerFactory if (!behaviourController.Assign(universeObject)) throw AssignFailedException.From(behaviourController, universeObject); + if (stateEnable is not null) + { + if (!stateEnable.Assign(behaviourController)) + throw AssignFailedException.From(stateEnable, behaviourController); + + if (!behaviourController.Assign(stateEnable)) + throw AssignFailedException.From(behaviourController, stateEnable); + } + else + StateEnableFactory.Instantiate(behaviourController); + return behaviourController; } } diff --git a/Engine.Core/Factory/BehaviourFactory.cs b/Engine.Core/Factory/BehaviourFactory.cs index f9efb66..0502465 100644 --- a/Engine.Core/Factory/BehaviourFactory.cs +++ b/Engine.Core/Factory/BehaviourFactory.cs @@ -12,12 +12,15 @@ public class BehaviourFactory { T behaviour = TypeFactory.Get(args); - stateEnable ??= TypeFactory.Get(); - if (!stateEnable.Assign(behaviour)) - throw AssignFailedException.From(stateEnable, behaviour); - - if (!behaviour.Assign(stateEnable)) - throw AssignFailedException.From(behaviour, stateEnable); + if (stateEnable is not null) + { + if (!stateEnable.Assign(behaviour)) + throw AssignFailedException.From(stateEnable, behaviour); + if (!behaviour.Assign(stateEnable)) + throw AssignFailedException.From(behaviour, stateEnable); + } + else + StateEnableFactory.Instantiate(behaviour); return behaviour; } diff --git a/Engine.Core/Factory/UniverseObjectFactory.cs b/Engine.Core/Factory/UniverseObjectFactory.cs index 39c59fc..917ee18 100644 --- a/Engine.Core/Factory/UniverseObjectFactory.cs +++ b/Engine.Core/Factory/UniverseObjectFactory.cs @@ -18,18 +18,25 @@ public class UniverseObjectFactory { T universeObject = TypeFactory.Get(args); - behaviourController ??= TypeFactory.Get(); - stateEnable ??= TypeFactory.Get(); + if (behaviourController is not null) + { + if (!behaviourController.Assign(universeObject)) + throw AssignFailedException.From(behaviourController, universeObject); + if (!universeObject.Assign(behaviourController)) + throw AssignFailedException.From(universeObject, behaviourController); + } + else + BehaviourControllerFactory.Instantiate(universeObject); - if (!behaviourController.Assign(universeObject)) - throw AssignFailedException.From(behaviourController, universeObject); - if (!stateEnable.Assign(universeObject)) - throw AssignFailedException.From(stateEnable, universeObject); - - if (!universeObject.Assign(behaviourController)) - throw AssignFailedException.From(universeObject, behaviourController); - if (!universeObject.Assign(stateEnable)) - throw AssignFailedException.From(universeObject, stateEnable); + if (stateEnable is not null) + { + if (!stateEnable.Assign(universeObject)) + throw AssignFailedException.From(stateEnable, universeObject); + if (!universeObject.Assign(stateEnable)) + throw AssignFailedException.From(universeObject, stateEnable); + } + else + StateEnableFactory.Instantiate(universeObject); return universeObject; }