Difference between revisions of "LlSetLinkPrimitiveParamsFast"

From Second Life Wiki
Jump to navigation Jump to search
m (moved example script showing use of llSetLinkPrimitiveParamsFast in combination with PRIM_LINK_TARGET into a side-by-side comparison table)
m
 
(5 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{LSL Function
#redirect[[llSetPrimitiveParams#llSetLinkPrimitiveParamsFast]]
|inject-2={{LSL Function/link|link}}{{LSL PrimitiveParam Categorize|Link}}
{{:llSetPrimitiveParams|default=llSetLinkPrimitiveParamsFast}}
|func_id=353|func_sleep=0.0|func_energy=10.0
|func=llSetLinkPrimitiveParamsFast|sort=SetLinkPrimitiveParamsFast
|p1_type=integer|p1_name=link
|p2_type=list|p2_name=rules
|func_desc=Set primitive parameters for {{LSLP|link}} based on {{LSLP|rules}} with no built-in script sleep.  This function is identical to [[llSetLinkPrimitiveParams]] except without the delay.
|spec
|caveats=
*Applying an operation to [[LINK_SET]] will apply it first to the root prim, then to each child prim.
* [[PRIM_LINK_TARGET]] is a special paramter which can be inserted to perfom actions on multiple prims on the linkset with one call.
*The sim will clamp attributes before storing them.
*The client will clamp attributes before rendering.
* [[PRIM_ROTATION]] is bugged in child prims, see [[llSetLinkPrimitiveParams#Useful_Snipptes|Useful Snippets]] for a workaround, or the linked SVC-93 issue below.
* '''Some prim properties are reset''' by this function
** A flexible prim will become not flexible
** A sliced prim will become unsliced
: In order to preserve properties they must be saved and explicitly set in the function call
{{LSL Tip|When wanting to change the alpha value of a face, please consider using [[llSetLinkAlpha]](integer link, float alpha, integer face); instead of [[llSetLinkPrimitiveParamsFast]](integer link, [ [[PRIM_COLOR]], integer face, vector color, float alpha ]);, that way you don't have to mess with the color settings.}}
|constants={{LSL Constants/PrimitiveParams|set|remote=true}}
|examples =
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.
<lsl>
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]);       
    }
}
</lsl>
A simple script which moves all child prims .25m higher than the root prim when touched.
<lsl>
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;
        }
    }
}
</lsl>
{{LSL Tip|You can use one function call instead of two when making use of [[PRIM_LINK_TARGET]].}}
{{{!}} class="sortable" width="100%" {{Prettytable}}
{{!}}- {{Hl2}}
! '''Preferred method using [[PRIM_LINK_TARGET]]'''
! '''Second method does the same effect-wise.'''
{{!}}-
{{!!}}<lsl>
default
{
    touch_start(integer num_detected)
    {
    //  color the root prim red and the first linked-prim green
 
        llSetLinkPrimitiveParamsFast(LINK_ROOT,
                [PRIM_COLOR, ALL_SIDES, <1.0, 0.0, 0.0>, 1.0,
            PRIM_LINK_TARGET, 2,
                PRIM_COLOR, ALL_SIDES, <0.0, 1.0, 0.0>, 1.0]);
    }
}
</lsl>
{{!!}}
<lsl>
default
{
    touch_start(integer num_detected)
    {
    //  color the root prim red and the first linked-prim green
 
        llSetLinkPrimitiveParamsFast(LINK_ROOT,
                [PRIM_COLOR, ALL_SIDES, <1.0, 0.0, 0.0>, 1.0]);
        llSetLinkPrimitiveParamsFast(2,
                [PRIM_COLOR, ALL_SIDES, <0.0, 1.0, 0.0>, 1.0]);
    }
}
</lsl>
{{!}}}
|helpers=
<lsl>
//-- 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 )] )
</lsl>
|also_functions=
{{LSL DefineRow||[[llSetLinkPrimitiveParams]]|Set many primitive parameters}}
{{LSL DefineRow||[[llGetLinkPrimitiveParams]]|Get many primitive parameters}}
{{LSL DefineRow||[[llSetPrimitiveParams]]|Set many primitive parameters}}
{{LSL DefineRow||[[llGetPrimitiveParams]]|Get many primitive parameters}}
{{LSL DefineRow||[[llSetLinkAlpha]]|}}
{{LSL DefineRow||[[llSetLinkColor]]|}}
{{LSL DefineRow||[[llSetLinkTexture]]|}}
{{LSL DefineRow||[[llSetLinkTextureAnim]]|}}
|also_tests
|also_events
|also_articles
|notes=
===[[PRIM_POSITION]]===
{{#var:PRIM_POSITION/SLPP&A}}
|cat1=Prim
|cat2=Movement
|cat3=Status
|cat4=Texture
|cat5=Object
|cat6=Sit/Teleport
|cat7=Link/Set
|cat8
}}

Latest revision as of 16:37, 12 September 2013