Difference between revisions of "LlApplyImpulse"

From Second Life Wiki
Jump to navigation Jump to search
m (missed a line)
m
Line 15: Line 15:
|examples=
|examples=
<lsl>
<lsl>
//Rez an object, and drop this script in it.
// Rez an object, and drop this script in it.
//This will launch it at the owner.
// This will launch it at the owner.
default {
 
    state_entry() {
default
          list p = llGetObjectDetails(llGetOwner(), [OBJECT_POS]);
{
          if(p != []) {
    state_entry()
              llSetStatus(STATUS_PHYSICS, TRUE);
    {
              vector pos = llList2Vector(p, 0);
        key ownerKey = llGetOwner();
              vector direction = llVecNorm(pos - llGetPos());
        vector ownerPosition = llList2Vector(llGetObjectDetails(ownerKey, [OBJECT_POS]), 0);
              llApplyImpulse(direction * 100, 0);
 
          }
//  if the owner is not in the sim, stop fooling around
    }
        if (llGetAgentSize(ownerKey) == ZERO_VECTOR)
            return;
 
//  else
        llSetStatus(STATUS_PHYSICS, TRUE);
 
        vector objectPosition = llGetPos();
        vector direction = llVecNorm(ownerPosition - objectPosition);
 
        llApplyImpulse(direction * 100, 0);
    }
}
}
</lsl>
</lsl>

Revision as of 08:57, 1 November 2012

Summary

Function: llApplyImpulse( vector force, integer local );

Applies impulse to object

• vector force
• integer local boolean, if TRUE force is treated as a local directional vector, if FALSE force is treated as a region directional vector

Instantaneous impulse. llSetForce has continuous push. "Instantaneous" seems to mean a one second impulse, as an application of a force (in newtons) equal to the object's mass (in kg) for one second will accelerate it to a velocity of 1 (in meters per second), which appears to be what happens with this function.

Caveats

  • Only works in physics-enabled objects.
  • The magnitude of force may be scaled back by the object's available energy.
  • The maximum magnitude of force is 20.0 and if it exceeds that it will be scaled back.
  • Silently fails when not called from inside the root prim.
All Issues ~ Search JIRA for related Bugs

Examples

<lsl> // Rez an object, and drop this script in it. // This will launch it at the owner.

default {

   state_entry()
   {
       key ownerKey = llGetOwner();
       vector ownerPosition = llList2Vector(llGetObjectDetails(ownerKey, [OBJECT_POS]), 0);

// if the owner is not in the sim, stop fooling around

       if (llGetAgentSize(ownerKey) == ZERO_VECTOR)
           return;

// else

       llSetStatus(STATUS_PHYSICS, TRUE);
       vector objectPosition = llGetPos();
       vector direction = llVecNorm(ownerPosition - objectPosition);
       llApplyImpulse(direction * 100, 0);
   }

}

</lsl>

See Also

Functions

•  llApplyRotationalImpulse
•  llSetForce Set continuous force

Deep Notes

Unpredictability

Taken from Simulator User Group/Transcripts/2012.10.05

[16:24] Andrew Linden: the llApplyImpulse() is even more unpredictable
[16:24] Andrew Linden: because it uses the legacy script "energy budget"
[16:25] Andrew Linden: which will attenuate the results if the scripted object doesn't have enough "energy" to execute the impulse that it wants
[16:25] Andrew Linden: also, that llApplyImpulse() has great griefing potential
[16:25] Andrew Linden: so we hobbled it a long time ago with a very high energy consumption rate

All Issues

~ Search JIRA for related Issues
   llApplyImpulse now works only in the root prim.

Signature

function void llApplyImpulse( vector force, integer local );