diff --git a/Engine.Core/Abstract/IBehaviour.cs b/Engine.Core/Abstract/IBehaviour.cs index 47c30bc..95d12d8 100644 --- a/Engine.Core/Abstract/IBehaviour.cs +++ b/Engine.Core/Abstract/IBehaviour.cs @@ -16,4 +16,9 @@ public interface IBehaviour : IEntity, IAssignableBehaviourController, IAssignab /// Call priority of the . /// int Priority { get; set; } + + /// + /// If the is active. + /// + bool IsActive { get; } } diff --git a/Engine.Core/Behaviour.cs b/Engine.Core/Behaviour.cs index fb7ae2c..4b9241b 100644 --- a/Engine.Core/Behaviour.cs +++ b/Engine.Core/Behaviour.cs @@ -26,6 +26,8 @@ public abstract class Behaviour : IBehaviour public IStateEnable StateEnable => _stateEnable; public IBehaviourController BehaviourController => _behaviourController; + public bool IsActive => StateEnable.Enabled && BehaviourController.GameObject.StateEnable.Enabled; + public bool Initialized { get => _initialized; diff --git a/Engine.Core/BehaviourOverride.cs b/Engine.Core/BehaviourOverride.cs index 81a8d4c..6e8dcc9 100644 --- a/Engine.Core/BehaviourOverride.cs +++ b/Engine.Core/BehaviourOverride.cs @@ -39,13 +39,13 @@ public abstract class BehaviourOverride : Behaviour OnFinalize(); } - protected virtual void OnPreUpdatePreEnabledCheck() { } + protected virtual void OnPreUpdatePreActiveCheck() { } protected virtual void OnPreUpdate() { } private void PreUpdate(IBehaviourController _) { - OnPreUpdatePreEnabledCheck(); + OnPreUpdatePreActiveCheck(); - if (!StateEnable.Enabled) + if (!IsActive) return; if (isInitializedThisFrame) @@ -61,23 +61,23 @@ public abstract class BehaviourOverride : Behaviour isInitializedThisFrame = false; } - protected virtual void OnUpdatePreEnabledCheck() { } + protected virtual void OnUpdatePreActiveCheck() { } protected virtual void OnUpdate() { } private void Update(IBehaviourController _) { - OnUpdatePreEnabledCheck(); + OnUpdatePreActiveCheck(); - if (!StateEnable.Enabled) + if (!IsActive) return; OnUpdate(); } - protected virtual void OnPreDrawPreEnabledCheck() { } + protected virtual void OnPreDrawPreActiveCheck() { } protected virtual void OnPreDraw() { } private void PreDraw(IBehaviourController _) { - OnPreDrawPreEnabledCheck(); + OnPreDrawPreActiveCheck(); if (!StateEnable.Enabled) return; diff --git a/Engine.Physics2D/PhysicsEngine2D.cs b/Engine.Physics2D/PhysicsEngine2D.cs index 8b22240..c61af05 100644 --- a/Engine.Physics2D/PhysicsEngine2D.cs +++ b/Engine.Physics2D/PhysicsEngine2D.cs @@ -54,10 +54,16 @@ public class PhysicsEngine2D : IPhysicsEngine2D for (int x = 0; x < colliders.Count; x++) { ICollider2D? colliderX = colliders[x]; + if (!colliderX.IsActive) + return; + for (int y = x + 1; y < colliders.Count; y++) { ICollider2D? colliderY = colliders[y]; + if (!colliderY.IsActive) + return; + if (colliderX.RigidBody2D == colliderY.RigidBody2D) continue;