$nav ===== Function: llApplyImpulse ===== llApplyImpulse(vector impulse, integer local) Apply an instant impulse (a change in the linear [[http://en.wikipedia.org/wiki/Momentum|momentum]], like a "kick") to a physical object (or the avatar if it's in an attachment). It has no effect on non-physical objects. ===== Parameters ===== === impulse === A $lty[vector] specifying the impulse to apply. Impulse is expressed in units of $lart[lindogram|lindograms]·m/s. For example, in absence of other effects such as gravity or friction, applying an impulse vector of `<1, 0, 0> to an object with a mass of 1.25 $art[lindograms] will add a velocity of 0.8 m/s in the given direction (applied according to the $prm[local] parameter). === local === $lty[Boolean] value indicating whether the $prm[impulse] vector applies its effect in coordinates local to the root prim or avatar (if $lct[TRUE]) or in sim coordinates (if $lct[FALSE]). When $ct[TRUE], the $prm[impulse] vector specifies coordinates local to the root prim. For example, if $prm[impulse] is `<1, 0, 0> and the X axis of the root prim is looking northwest, then the impulse will be applied in the northwest direction, aligned with the root prim's X axis. If it's an attachment, the vector is relative to the avatar's orientation. When $ct[FALSE], the vector specifies sim coordinates, where positive X is east, positive Y is north, positive Z is up, and vice versa for negative; for example, if $prm[impulse] is `<-1, 0, 0>, the impulse will be applied in the westward direction, no matter how the root prim or the avatar is oriented. ===== Notes ===== * To change the velocity of the object by a given amount, multiply the desired velocity difference by its $lfn[llGetMass|mass in Lindograms] (see example below). * The maximum speed (magnitude of the velocity vector) of an object seems to be limited to 202.8125 m/s, although the value measured by $lfn[llGetVel] can be greater for an instant before it is actually applied. The value returned by $fn[llGetVel] seems to be limited to a magnitude of 250 m/s. * FIXME: official wiki says total momentum has a cap too. Test. ===== Short examples ===== llApplyImpulse(<0, 0, 5>, FALSE); // Applies an impulse to a physical object, making it "jump". llApplyImpulse(<3, 4, 0>*llGetMass(), TRUE); // Adds <3,4,0> m/s to a prim. // If it wasn't moving, its final speed will be 5 m/s // (the length of that vector). ===== See also ===== * $lfn[llApplyRotationalImpulse] is the same but for [[http://en.wikipedia.org/wiki/Angular_momentum|angular momentum]] instead of linear. * $lfn[llSetForce] applies a force to an object continuously. * $lfn[llSetTorque] is the angular equivalent to $fn[llSetForce]. * $lfn[llSetForceAndTorque] sets both force and torque at the same time. * $lfn[llSetVelocity] applies the necessary impulse to an object for its velocity to match the given value. * $lfn[llGetVel] returns the current velocity of the object. * $lfn[llSetAngularVelocity] and $lfn[llGetOmega] are the angular equivalents of $fn[llSetVelocity]/$fn[llGetVel]. * $lfn[llGetMass] returns the mass in $lart[lindogram|Lindograms] of an object. * $lfn[llGetMassMKS] returns the mass in kilograms of an object. Most LSL functions use $art[Lindograms], so this function is of limited use in physics calculations.