aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectPart.cs24
-rw-r--r--OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs20
2 files changed, 31 insertions, 13 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
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
index 499445a..82d67d4 100644
--- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
+++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
@@ -1110,20 +1110,22 @@ namespace OpenSim.Region.ScriptEngine.Common
1110 { 1110 {
1111 m_host.AddScriptLPS(1); 1111 m_host.AddScriptLPS(1);
1112 //No energy force yet 1112 //No energy force yet
1113
1114 if (force.x > 20000)
1115 force.x = 20000;
1116 if (force.y > 20000)
1117 force.y = 20000;
1118 if (force.z > 20000)
1119 force.z = 20000;
1120
1113 if (local == 1) 1121 if (local == 1)
1114 { 1122 {
1115 NotImplemented("llApplyImpulse Local Force"); 1123 m_host.ApplyImpulse(new LLVector3((float)force.x, (float)force.y, (float)force.z), true);
1116 } 1124 }
1117 else 1125 else
1118 { 1126 {
1119 if (force.x > 20000) 1127
1120 force.x = 20000; 1128 m_host.ApplyImpulse(new LLVector3((float)force.x,(float)force.y,(float)force.z), false);
1121 if (force.y > 20000)
1122 force.y = 20000;
1123 if (force.z > 20000)
1124 force.z = 20000;
1125
1126 m_host.ApplyImpulse(new LLVector3((float)force.x,(float)force.y,(float)force.z));
1127 } 1129 }
1128 } 1130 }
1129 1131