From e00319d7ffbf11e5bb11db2631c72562e1215b1e Mon Sep 17 00:00:00 2001 From: Syntriax Date: Mon, 4 Aug 2025 22:01:16 +0300 Subject: [PATCH] fix: active checks on behaviour base and universe object not working properly --- Engine.Core/BehaviourBase.cs | 6 +++++- Engine.Core/UniverseObject.cs | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Engine.Core/BehaviourBase.cs b/Engine.Core/BehaviourBase.cs index b8a6fcc..37b521a 100644 --- a/Engine.Core/BehaviourBase.cs +++ b/Engine.Core/BehaviourBase.cs @@ -44,6 +44,7 @@ public abstract class BehaviourBase : BaseEntity, IBehaviour _behaviourController = behaviourController; OnAssign(behaviourController); behaviourController.OnUniverseObjectAssigned.AddListener(delegateOnUniverseObjectAssigned); + behaviourController.StateEnable.OnEnabledChanged.AddListener(delegateOnStateEnabledChanged); if (behaviourController.UniverseObject is not null) OnUniverseObjectAssigned(behaviourController); OnBehaviourControllerAssigned?.Invoke(this); @@ -68,6 +69,7 @@ public abstract class BehaviourBase : BaseEntity, IBehaviour BehaviourController.UniverseObject.OnActiveChanged.RemoveListener(delegateOnUniverseObjectActiveChanged); StateEnable.OnEnabledChanged.RemoveListener(delegateOnStateEnabledChanged); BehaviourController.OnUniverseObjectAssigned.RemoveListener(delegateOnUniverseObjectAssigned); + BehaviourController.StateEnable.OnEnabledChanged.RemoveListener(delegateOnStateEnabledChanged); base.UnassignInternal(); _behaviourController = null!; } @@ -76,6 +78,8 @@ public abstract class BehaviourBase : BaseEntity, IBehaviour { Debug.Assert.AssertBehaviourControllerAssigned(this); Debug.Assert.AssertStateEnableAssigned(this); + + UpdateActive(); } private void OnStateEnabledChanged(IStateEnable sender, IStateEnable.EnabledChangedArguments args) => UpdateActive(); @@ -84,7 +88,7 @@ public abstract class BehaviourBase : BaseEntity, IBehaviour private void UpdateActive() { bool previousActive = IsActive; - _isActive = StateEnable.Enabled && _behaviourController.UniverseObject.IsActive; + _isActive = StateEnable.Enabled && _behaviourController.StateEnable.Enabled && _behaviourController.UniverseObject.IsActive; if (previousActive != IsActive) OnActiveChanged?.Invoke(this, new(previousActive)); diff --git a/Engine.Core/UniverseObject.cs b/Engine.Core/UniverseObject.cs index 94ff25a..50d63a6 100644 --- a/Engine.Core/UniverseObject.cs +++ b/Engine.Core/UniverseObject.cs @@ -133,6 +133,7 @@ public class UniverseObject : BaseEntity, IUniverseObject base.OnAssign(stateEnable); stateEnable.OnEnabledChanged.AddListener(OnStateEnabledChanged); + UpdateActive(); } private void OnParentActiveChanged(IActive sender, IActive.ActiveChangedArguments args) => UpdateActive();