llTargetOmega Replacement

From Second Life Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Summary

Function: KeyFramedOmega( vector axis, float spinrate );

Rotates the object/prim around axis at a rate of spinrate in radians per second

• vector axis arbitrary axis to rotate the object around
• float spinrate rate of rotation in radians per second

Specification

  • This doesn't make llTargetOmega redundant but in some cases a Key Framed motion may be preferred
  • The routine: "KeyFramedOmega" is easy to use for llTargetOmega: It takes the first two parameters in llTargetOmega: axis and spinrate
  • All viewers will see the same spin and rotation
  • The object will keep the rotation it has when spin is stopped
  • A spin will continue even when the script is deleted

Caveats

  • The script must be in the root prim
  • It can not spin child prims
  • The object must be convex hull physics type
  • Can not spin physical objects
  • If the center of mass is not at the center of the root, the object will shake and jerk and drift erratically (BUG-7266)

Examples

This script shows how to use the routine to start, stop and reverse a spin on repeated touches

// llTargetOmega substitution by Dora Gustafson, Studio Dora 2014

integer P;

KeyFramedOmega( vector axis, float spinrate)
{
    llSetKeyframedMotion( [], []);
    if ( spinrate )
    {
        float v = TWO_PI/3.0;
        if ( spinrate < 0 ) v = -v;
        list L = [llAxisAngle2Rot( axis/llGetRot(), v), v/spinrate];
        llSetKeyframedMotion( L+L+L, [KFM_DATA, KFM_ROTATION, KFM_MODE, KFM_LOOP]);
    }
}

default
{
    state_entry()
    {
        llSetPrimitiveParams([PRIM_PHYSICS_SHAPE_TYPE, PRIM_PHYSICS_SHAPE_CONVEX]);
    }
    touch_end( integer n)
    {
        P = ++P%4;
        if ( P == 1 ) KeyFramedOmega( <0,0,1>, 2.0);       // Positive spin
        else if ( P == 3 ) KeyFramedOmega( <0,0,1>, -2.0); // Negative spin
        else KeyFramedOmega( <0,0,1>, 0.0);                // Stop spin
    }
}

Notes

The magnitude of axis do not influence the spinrate

See Also

Deep Notes

Source

Signature

[[User:Dora Gustafson|Dora Gustafson]] 04:36, 12 August 2014 (PDT)