* Added llApplyImpulse in the local frame.
parent
15a22e993d
commit
dd6e6e7bdf
|
@ -560,13 +560,29 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
/// This is sent up to the group, which then finds the root prim
|
/// This is sent up to the group, which then finds the root prim
|
||||||
/// and applies the force on the root prim of the group
|
/// and applies the force on the root prim of the group
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="impulse">Vector force</param>
|
/// <param name="impulsei">Vector force</param>
|
||||||
public void ApplyImpulse(LLVector3 impulsei)
|
/// <param name="localGlobalTF">true for the local frame, false for the global frame</param>
|
||||||
|
public void ApplyImpulse(LLVector3 impulsei, bool localGlobalTF)
|
||||||
{
|
{
|
||||||
PhysicsVector impulse = new PhysicsVector(impulsei.X, impulsei.Y, impulsei.Z);
|
PhysicsVector impulse = new PhysicsVector(impulsei.X, impulsei.Y, impulsei.Z);
|
||||||
if (m_parentGroup != null)
|
|
||||||
|
if (localGlobalTF)
|
||||||
{
|
{
|
||||||
m_parentGroup.applyImpulse(impulse);
|
|
||||||
|
LLQuaternion grot = GetWorldRotation();
|
||||||
|
Quaternion AXgrot = new Quaternion(grot.W,grot.X,grot.Y,grot.Z);
|
||||||
|
Vector3 AXimpulsei = new Vector3(impulsei.X, impulsei.Y, impulsei.Z);
|
||||||
|
Vector3 newimpulse = AXgrot * AXimpulsei;
|
||||||
|
impulse = new PhysicsVector(newimpulse.x, newimpulse.y, newimpulse.z);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
if (m_parentGroup != null)
|
||||||
|
{
|
||||||
|
m_parentGroup.applyImpulse(impulse);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1110,20 +1110,22 @@ namespace OpenSim.Region.ScriptEngine.Common
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
//No energy force yet
|
//No energy force yet
|
||||||
|
|
||||||
|
if (force.x > 20000)
|
||||||
|
force.x = 20000;
|
||||||
|
if (force.y > 20000)
|
||||||
|
force.y = 20000;
|
||||||
|
if (force.z > 20000)
|
||||||
|
force.z = 20000;
|
||||||
|
|
||||||
if (local == 1)
|
if (local == 1)
|
||||||
{
|
{
|
||||||
NotImplemented("llApplyImpulse Local Force");
|
m_host.ApplyImpulse(new LLVector3((float)force.x, (float)force.y, (float)force.z), true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (force.x > 20000)
|
|
||||||
force.x = 20000;
|
m_host.ApplyImpulse(new LLVector3((float)force.x,(float)force.y,(float)force.z), false);
|
||||||
if (force.y > 20000)
|
|
||||||
force.y = 20000;
|
|
||||||
if (force.z > 20000)
|
|
||||||
force.z = 20000;
|
|
||||||
|
|
||||||
m_host.ApplyImpulse(new LLVector3((float)force.x,(float)force.y,(float)force.z));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue