diff --git a/Engine.Core/Behaviour.cs b/Engine.Core/Behaviour.cs index 34bf242..943d366 100644 --- a/Engine.Core/Behaviour.cs +++ b/Engine.Core/Behaviour.cs @@ -1,4 +1,5 @@ using System; + using Syntriax.Engine.Core.Abstract; using Syntriax.Engine.Core.Exceptions; @@ -81,7 +82,6 @@ public abstract class Behaviour : IBehaviour _stateEnable = null!; _behaviourController = null!; - _stateEnable.Unassign(); OnUnassigned?.Invoke(this); return true; diff --git a/Engine.Core/BehaviourController.cs b/Engine.Core/BehaviourController.cs index 76aa214..ef60e98 100644 --- a/Engine.Core/BehaviourController.cs +++ b/Engine.Core/BehaviourController.cs @@ -88,7 +88,7 @@ public class BehaviourController : IBehaviourController public bool Assign(IGameObject gameObject) { - if (GameObject.Initialized) + if (GameObject is not null && GameObject.Initialized) return false; _gameObject = gameObject; @@ -98,7 +98,7 @@ public class BehaviourController : IBehaviourController public bool Unassign() { - if (GameObject.Initialized) + if (GameObject is not null && GameObject.Initialized) return false; _gameObject = null!; diff --git a/Engine.Core/BehaviourOverride.cs b/Engine.Core/BehaviourOverride.cs index 69189b9..0bc67d5 100644 --- a/Engine.Core/BehaviourOverride.cs +++ b/Engine.Core/BehaviourOverride.cs @@ -14,8 +14,12 @@ public abstract class BehaviourOverride : Behaviour { OnInitialized += OnInitialize; OnFinalized += OnFinalize; + OnUnassigned += OnUnassign; } + protected virtual void OnUnassign() { } + private void OnUnassign(IAssignable assignable) => OnUnassign(); + protected virtual void OnInitialize() { } private void OnInitialize(IInitialize _) { diff --git a/Engine.Core/Behaviours/DrawableBehaviour.cs b/Engine.Core/Behaviours/DrawableBehaviour.cs index 4b0784a..3a7a096 100644 --- a/Engine.Core/Behaviours/DrawableBehaviour.cs +++ b/Engine.Core/Behaviours/DrawableBehaviour.cs @@ -32,11 +32,11 @@ public class DrawableSpriteBehaviour : Behaviour, IDrawBehaviour, IAssignableSpr public bool Assign(ISprite sprite) { - if (Initialized) - return false; - _sprite = sprite; OnSpriteAssigned?.Invoke(this); return true; } + + public DrawableSpriteBehaviour() => OnUnassigned += OnUnassign; + private void OnUnassign(IAssignable assignable) => _sprite = null!; } diff --git a/Engine.Core/StateEnable.cs b/Engine.Core/StateEnable.cs index cf38305..70256ca 100644 --- a/Engine.Core/StateEnable.cs +++ b/Engine.Core/StateEnable.cs @@ -30,7 +30,7 @@ public class StateEnable : IStateEnable public bool Assign(IEntity entity) { - if (_entity.Initialized) + if (_entity is not null && _entity.Initialized) return false; _entity = entity;