Curtain script

From Second Life Wiki
Revision as of 14:08, 22 January 2015 by Lady Sumoku (talk | contribs) (Replaced old <LSL> block with <source lang="lsl2">)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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.

About this script:

Drop this script into the prim you want to use as a curtain etc. 
The script will change the length of the prim on one or more axes. 
Use sliced or path-cut prims to keep an edge stationary, e.g. in a blind.
For a Mesh prim, arrange for the pivot point to be on one edge.

You can use these scripts with any prim type.

// Prim Resizer (shrink/expand) by Omei Qunhua
// e.g. Roll a blind from the top. (use a prim with slice end = 50%)

// Note: This script can rescale a prim on any or all axes

// Define the large and small sizes of the prim here:-
// (if the prim is sliced or path cut, it will appear to be half size on the affected dimension)
vector  gScaleLarge = <0.1, 3.0, 6.0>;
vector  gScaleSmall = <0.1, 3.0, 1.2>;

integer gSteps  = 20;   	// Number of steps in the shrink/expand process
float   gSwitch = 1.0;  	// Action on first touch. +1.0 = shrink, -1.0 = expand

default
{
    state_entry()
    {
	llSetScale(gScaleLarge);
    }

    on_rez(integer x)
    {
	llResetScript();
    }

    touch_start(integer total_number)
    {
	vector ScaleStep = (gScaleLarge - gScaleSmall) / gSteps;  // Compute the scale augment per step
	vector wscale = llGetScale();
	gSwitch *= -1;   	// Switch between stretch and contract
	integer i;
	for ( ; i < gSteps; ++i )
	{
	    // It is more lag-friendly to incorporate a sleep per step
	    // Rather than greatly increasing the number of steps
	    llSleep(0.1);  	
	    llSetScale(wscale + ScaleStep * (float) i * gSwitch); 
	}
    }
}