aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Environment/Scenes/SceneObjectPart.cs')
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectPart.cs24
1 files changed, 20 insertions, 4 deletions
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
index b2ba70c..48177dc 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
@@ -560,13 +560,29 @@ namespace OpenSim.Region.Environment.Scenes
560 /// This is sent up to the group, which then finds the root prim 560 /// This is sent up to the group, which then finds the root prim
561 /// and applies the force on the root prim of the group 561 /// and applies the force on the root prim of the group
562 /// </summary> 562 /// </summary>
563 /// <param name="impulse">Vector force</param> 563 /// <param name="impulsei">Vector force</param>
564 public void ApplyImpulse(LLVector3 impulsei) 564 /// <param name="localGlobalTF">true for the local frame, false for the global frame</param>
565 public void ApplyImpulse(LLVector3 impulsei, bool localGlobalTF)
565 { 566 {
566 PhysicsVector impulse = new PhysicsVector(impulsei.X, impulsei.Y, impulsei.Z); 567 PhysicsVector impulse = new PhysicsVector(impulsei.X, impulsei.Y, impulsei.Z);
567 if (m_parentGroup != null) 568
569 if (localGlobalTF)
568 { 570 {
569 m_parentGroup.applyImpulse(impulse); 571
572 LLQuaternion grot = GetWorldRotation();
573 Quaternion AXgrot = new Quaternion(grot.W,grot.X,grot.Y,grot.Z);
574 Vector3 AXimpulsei = new Vector3(impulsei.X, impulsei.Y, impulsei.Z);
575 Vector3 newimpulse = AXgrot * AXimpulsei;
576 impulse = new PhysicsVector(newimpulse.x, newimpulse.y, newimpulse.z);
577
578 }
579 else
580 {
581
582 if (m_parentGroup != null)
583 {
584 m_parentGroup.applyImpulse(impulse);
585 }
570 } 586 }
571 } 587 }
572 588