fix: some factories not assigning fields correctly

This commit is contained in:
Syntriax 2025-08-04 22:02:48 +03:00
parent e00319d7ff
commit 63bc94c7a6
3 changed files with 41 additions and 20 deletions

View File

@ -4,10 +4,10 @@ namespace Syntriax.Engine.Core.Factory;
public class BehaviourControllerFactory public class BehaviourControllerFactory
{ {
public static IBehaviourController Instantiate(IUniverseObject universeObject) public static IBehaviourController Instantiate(IUniverseObject universeObject, IStateEnable? stateEnable = null)
=> Instantiate<BehaviourController>(universeObject); => Instantiate<BehaviourController>(universeObject, stateEnable);
public static T Instantiate<T>(IUniverseObject universeObject, params object?[]? args) public static T Instantiate<T>(IUniverseObject universeObject, IStateEnable? stateEnable = null, params object?[]? args)
where T : class, IBehaviourController where T : class, IBehaviourController
{ {
T behaviourController = TypeFactory.Get<T>(args); T behaviourController = TypeFactory.Get<T>(args);
@ -18,6 +18,17 @@ public class BehaviourControllerFactory
if (!behaviourController.Assign(universeObject)) if (!behaviourController.Assign(universeObject))
throw AssignFailedException.From(behaviourController, 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; return behaviourController;
} }
} }

View File

@ -12,12 +12,15 @@ public class BehaviourFactory
{ {
T behaviour = TypeFactory.Get<T>(args); T behaviour = TypeFactory.Get<T>(args);
stateEnable ??= TypeFactory.Get<StateEnable>(); if (stateEnable is not null)
if (!stateEnable.Assign(behaviour)) {
throw AssignFailedException.From(stateEnable, behaviour); if (!stateEnable.Assign(behaviour))
throw AssignFailedException.From(stateEnable, behaviour);
if (!behaviour.Assign(stateEnable)) if (!behaviour.Assign(stateEnable))
throw AssignFailedException.From(behaviour, stateEnable); throw AssignFailedException.From(behaviour, stateEnable);
}
else
StateEnableFactory.Instantiate(behaviour);
return behaviour; return behaviour;
} }

View File

@ -18,18 +18,25 @@ public class UniverseObjectFactory
{ {
T universeObject = TypeFactory.Get<T>(args); T universeObject = TypeFactory.Get<T>(args);
behaviourController ??= TypeFactory.Get<BehaviourController>(); if (behaviourController is not null)
stateEnable ??= TypeFactory.Get<StateEnable>(); {
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)) if (stateEnable is not null)
throw AssignFailedException.From(behaviourController, universeObject); {
if (!stateEnable.Assign(universeObject)) if (!stateEnable.Assign(universeObject))
throw AssignFailedException.From(stateEnable, universeObject); throw AssignFailedException.From(stateEnable, universeObject);
if (!universeObject.Assign(stateEnable))
if (!universeObject.Assign(behaviourController)) throw AssignFailedException.From(universeObject, stateEnable);
throw AssignFailedException.From(universeObject, behaviourController); }
if (!universeObject.Assign(stateEnable)) else
throw AssignFailedException.From(universeObject, stateEnable); StateEnableFactory.Instantiate(universeObject);
return universeObject; return universeObject;
} }