using Syntriax.Engine.Core.Abstract; using Syntriax.Engine.Core.Exceptions; namespace Syntriax.Engine.Core.Factory; public class BehaviourFactory { public static T Instantiate(IHierarchyObject hierarchyObject, params object?[]? args) where T : class, IBehaviour => Instantiate(hierarchyObject, stateEnable: null, args); public static T Instantiate(IHierarchyObject hierarchyObject, IStateEnable? stateEnable, params object?[]? args) where T : class, IBehaviour { T behaviour = TypeFactory.Get(args); stateEnable ??= TypeFactory.Get(); if (!stateEnable.Assign(behaviour)) throw AssignException.From(stateEnable, behaviour); if (!behaviour.Assign(hierarchyObject.BehaviourController)) throw AssignException.From(behaviour, hierarchyObject.BehaviourController); if (!behaviour.Assign(stateEnable)) throw AssignException.From(behaviour, stateEnable); return behaviour; } }