From c9407e7d8999968cd572f0d15f5e9d6d5619b620 Mon Sep 17 00:00:00 2001
From: D-AIRY <admin@ds-servers.com>
Date: Tue, 15 Dec 2020 18:04:31 +0300
Subject: [PATCH] Small bugfix

---
 source/game/EntityManager.cpp | 7 ++++++-
 source/light/LightSystem.cpp  | 9 +++++++--
 source/light/ShadowCache.cpp  | 2 --
 3 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/source/game/EntityManager.cpp b/source/game/EntityManager.cpp
index a82c87946..707532121 100644
--- a/source/game/EntityManager.cpp
+++ b/source/game/EntityManager.cpp
@@ -272,14 +272,19 @@ void CEntityManager::unreg(ID ent)
 		to = &m_vOutputTimeout[i];
 		if(to->status == TS_WAIT)
 		{
-			to->status = TS_DONE;
+			int iRemoved = 0;
 			for(int j = 0; j < to->pOutput->iOutCount; ++j)
 			{
 				if(to->pOutput->pOutputs[j].pTarget == pEnt)
 				{
 					to->pOutput->pOutputs[j].pTarget = NULL;
+					++iRemoved;
 				}
 			}
+			if(iRemoved == to->pOutput->iOutCount)
+			{
+				to->status = TS_DONE;
+			}
 		}
 	}
 
diff --git a/source/light/LightSystem.cpp b/source/light/LightSystem.cpp
index 4e3a3d838..080b91df7 100644
--- a/source/light/LightSystem.cpp
+++ b/source/light/LightSystem.cpp
@@ -584,9 +584,14 @@ void XMETHODCALLTYPE CLightSystem::updateVisibility()
 
 	for(UINT i = 0, l = m_aLights.size(); i < l; ++i)
 	{
-		if(m_aLights[i]->isEnabled() && m_aLights[i]->isDirty(LRT_ALL))
+		if(m_aLights[i]->isEnabled())
 		{
-			m_aLights[i]->updateVisibility(m_pMainCamera, vLPVmin, vLPVmax, iCascades > 0);
+			m_aLights[i]->testDirty();
+
+			if(m_aLights[i]->isDirty(LRT_ALL))
+			{
+				m_aLights[i]->updateVisibility(m_pMainCamera, vLPVmin, vLPVmax, iCascades > 0);
+			}
 		}
 	}
 }
diff --git a/source/light/ShadowCache.cpp b/source/light/ShadowCache.cpp
index 0b70bd0d4..c6264bbe4 100644
--- a/source/light/ShadowCache.cpp
+++ b/source/light/ShadowCache.cpp
@@ -230,13 +230,11 @@ void CShadowCache::nextFrame()
 
 void CShadowCache::addLight(CXLight *pLight)
 {
-	pLight->testDirty();
 	m_aFrameLights.push_back(pLight);
 }
 
 void CShadowCache::addRSMLight(CXLight *pLight)
 {
-	pLight->testDirty();
 	m_aFrameRSMLights.push_back(pLight);
 }
 
-- 
GitLab