diff --git a/source/game/EntityManager.cpp b/source/game/EntityManager.cpp index a82c879464e48d3e9304701b4e8454632a06c399..7075321213822d2510c056703d53f226be6184ad 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 4e3a3d8385859b29ac5381fae25cabd43413e33f..080b91df75f2223b2db8fb24356231882e6b8ba6 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 0b70bd0d40ae457dca811dee19703e10d35f4ca2..c6264bbe403b34c217020010b302052459424402 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); }