[Scummvm-git-logs] scummvm master -> 873d28366b81f6906c1a96b93e5cd72cef9ec1d7

grisenti noreply at scummvm.org
Mon Jan 9 21:50:35 UTC 2023


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
873d28366b HPL1: fix removal of player collide scripts


Commit: 873d28366b81f6906c1a96b93e5cd72cef9ec1d7
    https://github.com/scummvm/scummvm/commit/873d28366b81f6906c1a96b93e5cd72cef9ec1d7
Author: grisenti (emanuele at grisenti.net)
Date: 2023-01-09T22:50:25+01:00

Commit Message:
HPL1: fix removal of player collide scripts

the problem was caused by an incorrect fix for iterator invalidation

Changed paths:
    engines/hpl1/penumbra-overture/Player.cpp


diff --git a/engines/hpl1/penumbra-overture/Player.cpp b/engines/hpl1/penumbra-overture/Player.cpp
index f939ffba2da..4f5c801ce2a 100644
--- a/engines/hpl1/penumbra-overture/Player.cpp
+++ b/engines/hpl1/penumbra-overture/Player.cpp
@@ -524,17 +524,21 @@ void cPlayer::AddCollideScript(eGameCollideScriptType aType, const tString &asFu
 //-----------------------------------------------------------------------
 
 void cPlayer::RemoveCollideScriptWithChildEntity(iGameEntity *apEntity) {
-	for (auto& kv : m_mapCollideCallbacks) {
-		cGameCollideScript *pCallback = kv.second;
+	tGameCollideScriptMapIt it = m_mapCollideCallbacks.begin();
+	for (; it != m_mapCollideCallbacks.end();) {
+		cGameCollideScript *pCallback = it->second;
+		tGameCollideScriptMapIt currentIt = it;
+		++it;
 
 		if (pCallback && pCallback->mpEntity == apEntity) {
-			if (mbUpdatingCollisionCallbacks)
+			if (mbUpdatingCollisionCallbacks) {
 				pCallback->mbDeleteMe = true;
-			else
+			} else {
 				hplDelete(pCallback);
+				m_mapCollideCallbacks.erase(currentIt);
+			}
 		}
 	}
-	m_mapCollideCallbacks.clear();
 }
 
 //-----------------------------------------------------------------------




More information about the Scummvm-git-logs mailing list