Difference between revisions of "Curtain script"
Jump to navigation
Jump to search
Kireji Haiku (talk | contribs) (replaced example script with three example scripts, one for each axis.) |
Lady Sumoku (talk | contribs) m (Replaced old <LSL> block with <source lang="lsl2">) |
||
(2 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
{{LSL Header}} | {{LSL Header}} | ||
== About | == About this script: == | ||
Drop | 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. | You can use these scripts with any prim type. | ||
= | <source lang="lsl2"> | ||
// 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 | default | ||
Line 117: | Line 27: | ||
state_entry() | 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); | |||
} | |||
} | } | ||
} | } | ||
</source> | |||
</ | |||
{{LSLC|Library}} | {{LSLC|Library}} |
Latest revision as of 13:08, 22 January 2015
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
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);
}
}
}