From b68c7545cdd7086a1e633e4810ac3ff2d8a1113d Mon Sep 17 00:00:00 2001 From: Boondorl Date: Tue, 21 Jan 2025 14:43:59 -0500 Subject: [PATCH] Fixes for dynamic lights Fixed released lights not unlinking in rare cases. Fixed first Actor in cache being missed when destruction checking. Fixed results cache not being cleared on update. --- src/playsim/a_dynlight.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/playsim/a_dynlight.cpp b/src/playsim/a_dynlight.cpp index 2c38049af..3fe9356db 100644 --- a/src/playsim/a_dynlight.cpp +++ b/src/playsim/a_dynlight.cpp @@ -305,6 +305,7 @@ void FDynamicLight::Tick() if (!target) { // How did we get here? :? + UnlinkLight(); ReleaseLight(); return; } @@ -444,16 +445,18 @@ void FDynamicLight::Tick() if(updated) { ActorList.Clear(); + ActorResult.Clear(); } else if(ActorList.Size() > 0) { - unsigned i = ActorList.Size() - 1; + unsigned i = ActorList.Size(); while(i > 0) { - if(ActorList[i]->ObjectFlags & OF_EuthanizeMe) + const unsigned index = i - 1u; + if(ActorList[index]->ObjectFlags & OF_EuthanizeMe) { - ActorList.Delete(i); - ActorResult.Delete(i); + ActorList.Delete(index); + ActorResult.Delete(index); } i--; }