diff --git a/Engine.Core/Abstract/BaseEntity.cs b/Engine.Core/Abstract/BaseEntity.cs index 52e67a9..02a1ec4 100644 --- a/Engine.Core/Abstract/BaseEntity.cs +++ b/Engine.Core/Abstract/BaseEntity.cs @@ -86,7 +86,7 @@ public abstract class BaseEntity : IEntity if (IsInitialized) return false; - _stateEnable ??= new Factory.StateEnableFactory().Instantiate(this); + _stateEnable ??= Factory.StateEnableFactory.Instantiate(this); InitializeInternal(); diff --git a/Engine.Core/BehaviourController.cs b/Engine.Core/BehaviourController.cs index f25c099..361ff08 100644 --- a/Engine.Core/BehaviourController.cs +++ b/Engine.Core/BehaviourController.cs @@ -52,7 +52,7 @@ public class BehaviourController : IBehaviourController InsertBehaviourByPriority(behaviour); behaviour.Assign(this); - behaviour.Assign(HierarchyObject.StateEnable); + behaviour.Assign(Factory.StateEnableFactory.Instantiate(behaviour)); behaviour.Initialize(); behaviour.OnPriorityChanged += OnPriorityChange; @@ -61,7 +61,7 @@ public class BehaviourController : IBehaviourController } public T AddBehaviour(params object?[]? args) where T : class, IBehaviour - => AddBehaviour(new Factory.BehaviourFactory().Instantiate(_hierarchyObject, args)); + => AddBehaviour(Factory.BehaviourFactory.Instantiate(_hierarchyObject, args)); public T? GetBehaviour() { diff --git a/Engine.Core/Factory/BehaviourControllerFactory.cs b/Engine.Core/Factory/BehaviourControllerFactory.cs index d242503..08804b3 100644 --- a/Engine.Core/Factory/BehaviourControllerFactory.cs +++ b/Engine.Core/Factory/BehaviourControllerFactory.cs @@ -5,10 +5,10 @@ namespace Syntriax.Engine.Core.Factory; public class BehaviourControllerFactory { - public IBehaviourController Instantiate(IHierarchyObject hierarchyObject) + public static IBehaviourController Instantiate(IHierarchyObject hierarchyObject) => Instantiate(hierarchyObject); - public T Instantiate(IHierarchyObject hierarchyObject, params object?[]? args) + public static T Instantiate(IHierarchyObject hierarchyObject, params object?[]? args) where T : class, IBehaviourController { T behaviourController = TypeFactory.Get(args); diff --git a/Engine.Core/Factory/BehaviourFactory.cs b/Engine.Core/Factory/BehaviourFactory.cs index bf68861..7191d1f 100644 --- a/Engine.Core/Factory/BehaviourFactory.cs +++ b/Engine.Core/Factory/BehaviourFactory.cs @@ -5,10 +5,10 @@ namespace Syntriax.Engine.Core.Factory; public class BehaviourFactory { - public T Instantiate(IHierarchyObject hierarchyObject, params object?[]? args) where T : class, IBehaviour + public static T Instantiate(IHierarchyObject hierarchyObject, params object?[]? args) where T : class, IBehaviour => Instantiate(hierarchyObject, stateEnable: null, args); - public T Instantiate(IHierarchyObject hierarchyObject, IStateEnable? stateEnable, params object?[]? args) + public static T Instantiate(IHierarchyObject hierarchyObject, IStateEnable? stateEnable, params object?[]? args) where T : class, IBehaviour { T behaviour = TypeFactory.Get(args); diff --git a/Engine.Core/Factory/HierarchyObjectFactory.cs b/Engine.Core/Factory/HierarchyObjectFactory.cs index f3e23f1..1cb31d3 100644 --- a/Engine.Core/Factory/HierarchyObjectFactory.cs +++ b/Engine.Core/Factory/HierarchyObjectFactory.cs @@ -5,10 +5,10 @@ namespace Syntriax.Engine.Core.Factory; public class HierarchyObjectFactory { - public T Instantiate(params object?[]? args) where T : class, IHierarchyObject + public static T Instantiate(params object?[]? args) where T : class, IHierarchyObject => Instantiate(behaviourController: null, stateEnable: null, args); - public T Instantiate( + public static T Instantiate( IBehaviourController? behaviourController = null, IStateEnable? stateEnable = null, params object?[]? args diff --git a/Engine.Core/Factory/StateEnableFactory.cs b/Engine.Core/Factory/StateEnableFactory.cs index 05167ae..aa705af 100644 --- a/Engine.Core/Factory/StateEnableFactory.cs +++ b/Engine.Core/Factory/StateEnableFactory.cs @@ -5,9 +5,9 @@ namespace Syntriax.Engine.Core.Factory; public class StateEnableFactory { - public IStateEnable Instantiate(IEntity entity) => Instantiate(entity); + public static IStateEnable Instantiate(IEntity entity) => Instantiate(entity); - public T Instantiate(IEntity entity, params object?[]? args) where T : class, IStateEnable + public static T Instantiate(IEntity entity, params object?[]? args) where T : class, IStateEnable { T stateEnable = TypeFactory.Get(args); diff --git a/Engine.Core/Factory/TransformFactory.cs b/Engine.Core/Factory/TransformFactory.cs index 2b7a5dd..e8fcad8 100644 --- a/Engine.Core/Factory/TransformFactory.cs +++ b/Engine.Core/Factory/TransformFactory.cs @@ -4,7 +4,7 @@ namespace Syntriax.Engine.Core.Factory; public class TransformFactory { - public ITransform2D Instantiate() => TypeFactory.Get(); - public T Instantiate(params object?[]? args) where T : class, ITransform2D + public static ITransform2D Instantiate() => TypeFactory.Get(); + public static T Instantiate(params object?[]? args) where T : class, ITransform2D => TypeFactory.Get(args); } diff --git a/Engine.Core/GameManager.cs b/Engine.Core/GameManager.cs index 74e89db..8d12255 100644 --- a/Engine.Core/GameManager.cs +++ b/Engine.Core/GameManager.cs @@ -4,7 +4,6 @@ using System.Collections.Generic; using Syntriax.Engine.Core.Abstract; using Syntriax.Engine.Core.Exceptions; -using Syntriax.Engine.Core.Factory; namespace Syntriax.Engine.Core; @@ -19,16 +18,6 @@ public class GameManager : BaseEntity, IGameManager private readonly List _hierarchyObjects = new(Constants.GAME_OBJECTS_SIZE_INITIAL); - private HierarchyObjectFactory _hierarchyObjectFactory = null!; - private HierarchyObjectFactory HierarchyObjectFactory - { - get - { - _hierarchyObjectFactory ??= new HierarchyObjectFactory(); - return _hierarchyObjectFactory; - } - } - public IReadOnlyList HierarchyObjects => _hierarchyObjects; public override IStateEnable StateEnable @@ -37,7 +26,7 @@ public class GameManager : BaseEntity, IGameManager { if (base.StateEnable is null) { - Assign(new StateEnableFactory().Instantiate(this)); + Assign(Factory.StateEnableFactory.Instantiate(this)); if (base.StateEnable is null) throw NotAssignedException.From(this, base.StateEnable); } @@ -72,7 +61,7 @@ public class GameManager : BaseEntity, IGameManager public T InstantiateHierarchyObject(params object?[]? args) where T : class, IHierarchyObject { - T hierarchyObject = HierarchyObjectFactory.Instantiate(args); + T hierarchyObject = Factory.HierarchyObjectFactory.Instantiate(args); Register(hierarchyObject); return hierarchyObject; } diff --git a/Engine.Core/HierarchyObject.cs b/Engine.Core/HierarchyObject.cs index 8691f11..8247e76 100644 --- a/Engine.Core/HierarchyObject.cs +++ b/Engine.Core/HierarchyObject.cs @@ -128,7 +128,7 @@ public class HierarchyObject : BaseEntity, IHierarchyObject protected override void InitializeInternal() { base.InitializeInternal(); - _behaviourController ??= new Factory.BehaviourControllerFactory().Instantiate(this); + _behaviourController ??= Factory.BehaviourControllerFactory.Instantiate(this); } public IEnumerator GetEnumerator() => _children.GetEnumerator();