From 1b6f3151860bfade36179853e096a4e7d9c46c83 Mon Sep 17 00:00:00 2001 From: Adam Johnson Date: Fri, 7 Aug 2015 17:04:52 -0400 Subject: [PATCH] Allow PXPhysicals to change scene nodes If this isn't done, the client will crash on exit when markers have been loaded at some point in the game --- Sources/Plasma/PubUtilLib/plPhysX/plPXPhysical.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Sources/Plasma/PubUtilLib/plPhysX/plPXPhysical.cpp b/Sources/Plasma/PubUtilLib/plPhysX/plPXPhysical.cpp index a4362c31..d518c31b 100644 --- a/Sources/Plasma/PubUtilLib/plPhysX/plPXPhysical.cpp +++ b/Sources/Plasma/PubUtilLib/plPhysX/plPXPhysical.cpp @@ -821,7 +821,18 @@ plKey plPXPhysical::GetSceneNode() const void plPXPhysical::SetSceneNode(plKey newNode) { - // Not Supported + plKey oldNode = GetSceneNode(); + if (oldNode == newNode) + return; + + // If we don't do this, we get leaked keys and a crash on exit with certain clones + // Note this has nothing do to with the world that the physical is in + if (newNode) { + plNodeRefMsg* refMsg = new plNodeRefMsg(newNode, plNodeRefMsg::kOnRequest, -1, plNodeRefMsg::kPhysical); + hsgResMgr::ResMgr()->SendRef(GetKey(), refMsg, plRefFlags::kActiveRef); + } + if (oldNode) + oldNode->Release(GetKey()); } /////////////////////////////////////////////////////////////////////