Curtain script

From Second Life Wiki
Revision as of 07:46, 14 December 2012 by Omei Qunhua (talk | contribs) (Replace 3 rambling scripts with one concise multi-purpose script)
Jump to navigation Jump to search

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.

<lsl> // 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 ScaleLarge = <0.1, 3.0, 6.0>; vector ScaleSmall = <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(ScaleLarge);

   }
   on_rez(integer x)
   {

llResetScript();

   }
   touch_start(integer total_number)
   {

vector ScaleStep = (ScaleLarge - ScaleSmall) / gSteps; // Compute the scale augment per step vector wscale = llGetScale(); gSwitch *= -1; // Switch between stretch and contract integer i; for (i = 0; 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 * i * gSwitch); }

   }

}

</lsl>