From 240e8646dac402068930065c1fb792e647f1ce4b Mon Sep 17 00:00:00 2001 From: Teravus Ovares Date: Tue, 6 May 2008 00:23:19 +0000 Subject: * If you llApplyImpulse on an attachment, it applies impulse on the avatar, not the attachment. --- OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs | 17 ++++++++++++++--- OpenSim/Region/Environment/Scenes/ScenePresence.cs | 8 ++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) (limited to 'OpenSim/Region/Environment/Scenes') diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs index 2e44c54..2bc7fd3 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs @@ -1301,8 +1301,19 @@ namespace OpenSim.Region.Environment.Scenes { if (rootpart.PhysActor != null) { - rootpart.PhysActor.AddForce(impulse); - m_scene.PhysicsScene.AddPhysicsActorTaint(rootpart.PhysActor); + if (rootpart.m_IsAttachment) + { + ScenePresence avatar = m_scene.GetScenePresence(rootpart.m_attachedAvatar); + if (avatar != null) + { + avatar.PushForce(impulse); + } + } + else + { + rootpart.PhysActor.AddForce(impulse,true); + m_scene.PhysicsScene.AddPhysicsActorTaint(rootpart.PhysActor); + } } } } @@ -1909,7 +1920,7 @@ namespace OpenSim.Region.Environment.Scenes LLVector3 llmoveforce = pos - AbsolutePosition; PhysicsVector grabforce = new PhysicsVector(llmoveforce.X, llmoveforce.Y, llmoveforce.Z); grabforce = (grabforce / 10) * m_rootPart.PhysActor.Mass; - m_rootPart.PhysActor.AddForce(grabforce); + m_rootPart.PhysActor.AddForce(grabforce,true); m_scene.PhysicsScene.AddPhysicsActorTaint(m_rootPart.PhysActor); } else diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index fcd93d8..aefecd0 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs @@ -2389,5 +2389,13 @@ namespace OpenSim.Region.Environment.Scenes info.AddValue("m_knownPrimUUID", knownPrimUUID_work); } + + internal void PushForce(PhysicsVector impulse) + { + if (PhysicsActor != null) + { + PhysicsActor.AddForce(impulse,true); + } + } } } -- cgit v1.1