From d75bae802abfd044457d3bd9cfc6d9e5faad4656 Mon Sep 17 00:00:00 2001 From: Syntriax Date: Fri, 24 Nov 2023 17:20:43 +0300 Subject: [PATCH] fix: UnAssign Problems --- Engine.Core/Behaviour.cs | 2 +- Engine.Core/BehaviourController.cs | 4 ++-- Engine.Core/BehaviourOverride.cs | 4 ++++ Engine.Core/Behaviours/DrawableBehaviour.cs | 6 +++--- Engine.Core/StateEnable.cs | 2 +- 5 files changed, 11 insertions(+), 7 deletions(-) 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;