LlSetLinkPrimitiveParamsFast
De DigiWiki.
A simple script to light up a prim in a linkset when touched, and unlight the others using llSetLinkPrimitiveParams, when script is installed in the root prim of the linkset.
default { touch_start(integer num_detected) { // Turn off all prims llSetLinkPrimitiveParamsFast(LINK_SET, [PRIM_FULLBRIGHT, ALL_SIDES, FALSE]); // Turn on the one that was touched llSetLinkPrimitiveParamsFast(llDetectedLinkNumber(0), [PRIM_FULLBRIGHT, ALL_SIDES, TRUE]); } }
A simple script which moves all child prims .25m higher than the root prim when touched.
default { touch_start(integer total_number) { vector obj_pos = llGetPos(); rotation obj_rot = llGetRot(); integer i=1; while (i <= llGetNumberOfPrims()) { vector prim_pos = llList2Vector(llGetLinkPrimitiveParams(i,[PRIM_POSITION]),0); if (i > 1) // If not the root prim { prim_pos = (prim_pos - obj_pos) / obj_rot; // Convert from region coordinates to local coordinates prim_pos.z += 0.25; // increase the Z position by .25m llSetLinkPrimitiveParamsFast(i,[PRIM_POSITION,prim_pos]); } ++i; } } }
//-- PRIM_ROTATION workaround for child prims (works in unattached objects only) llSetLinkPrimitiveParamsFast( linknumber, [PRIM_ROT_LOCAL, rot * llGetRootRotation()] ) //-- PRIM_ROTATION workaround for child prims (works in linked objects only) llSetLinkPrimitiveParamsFast( linknumber, [PRIM_ROT_LOCAL, rot * llList2Rot( llGetLinkPrimitiveParams( LINK_ROOT, [PRIM_ROT_LOCAL] ), 0 )] ) //-- PRIM_ROTATION workaround for child prims (works in all scenarios) llSetLinkPrimitiveParamsFast( linknumber, [PRIM_ROT_LOCAL, rot * llList2Rot( llGetLinkPrimitiveParams( !!llGetLinkNumber(), [PRIM_ROT_LOCAL] ), 0 )] )