From c92696286215ca8260fa80472e2678d0482553b7 Mon Sep 17 00:00:00 2001 From: Teravus Ovares Date: Tue, 12 Feb 2008 00:01:55 +0000 Subject: * This resolves the null exceptions when a script is manipulating a physical object in ODE and you delete the object. The script is still running and trying to add force, but the object reference is null. --- OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs') diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs index c94a57d..a745d9c 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs @@ -580,11 +580,17 @@ namespace OpenSim.Region.Environment.Scenes public void applyImpulse(PhysicsVector impulse) { + // We check if rootpart is null here because scripts don't delete if you delete the host. + // This means that unfortunately, we can pass a null physics actor to Simulate! + // Make sure we don't do that! SceneObjectPart rootpart = m_rootPart; - if (m_rootPart.PhysActor != null) + if (rootpart != null) { - m_rootPart.PhysActor.AddForce(impulse); - m_scene.PhysicsScene.AddPhysicsActorTaint(m_rootPart.PhysActor); + if (rootpart.PhysActor != null) + { + rootpart.PhysActor.AddForce(impulse); + m_scene.PhysicsScene.AddPhysicsActorTaint(rootpart.PhysActor); + } } } -- cgit v1.1