From 39a8ca131f783a0634a7e9ac7cbced2aa59f8864 Mon Sep 17 00:00:00 2001 From: Diren D Bharwani Date: Thu, 17 Nov 2022 00:11:55 +0800 Subject: [PATCH] Fixed Collision & Trigger Messages not being cleared on deactivating objects --- .../src/Physics/Collision/SHCollisionListener.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/SHADE_Engine/src/Physics/Collision/SHCollisionListener.cpp b/SHADE_Engine/src/Physics/Collision/SHCollisionListener.cpp index e8379b09..f16303f4 100644 --- a/SHADE_Engine/src/Physics/Collision/SHCollisionListener.cpp +++ b/SHADE_Engine/src/Physics/Collision/SHCollisionListener.cpp @@ -16,6 +16,7 @@ // Project Headers #include "Physics/PhysicsObject/SHPhysicsObject.h" #include "Physics/System/SHPhysicsSystem.h" +#include "Scene/SHSceneManager.h" /*-------------------------------------------------------------------------------------*/ /* Local Helper Functions */ @@ -80,10 +81,15 @@ namespace SHADE { for (auto eventIter = container.begin(); eventIter != container.end();) { - const bool CLEAR_EVENT = eventIter->GetCollisionState() == SHCollisionInfo::State::EXIT - || eventIter->GetCollisionState() == SHCollisionInfo::State::INVALID; + const SHCollisionInfo& C_INFO = *eventIter; - if (CLEAR_EVENT) + const bool CLEAR_EVENT = C_INFO.GetCollisionState() == SHCollisionInfo::State::EXIT + || C_INFO.GetCollisionState() == SHCollisionInfo::State::INVALID; + + const bool INACTIVE_OBJECT = !SHSceneManager::CheckNodeAndComponentsActive(C_INFO.GetEntityA()) + || !SHSceneManager::CheckNodeAndComponentsActive(C_INFO.GetEntityB()); + + if (CLEAR_EVENT || INACTIVE_OBJECT) eventIter = container.erase(eventIter); else ++eventIter;