// Makes an object go up or down, gradually,
// with a slow rotation.
//
// Includes option for touch control.
//
// Warning:
// * The animation will go a little weird if it is taken into inventory
// whilst moving.
// * It can't be used with a rezzer unless it is stopped (so
// touch control is mandatory to turn it back on).
//
// Thanks to the members of the Advanced Scripters of SL group.
//
// Update Jan 2013: Added touch.
//
// Kimm Paulino
// February 2012
//
float gMoveTime = 4.0; // Time for each movement
vector gOffset = <0.0, 0.0, 2.0>; // Where to move to (and back from)
vector gDegRot = <0.0, 0.0, 180.0>; // rotation to apply going up, then going down again
integer gTouchControl = TRUE; // FALSE to disable touch
integer gState;
default
{
state_entry ()
{
gState = 0;
llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_PHYSICS_SHAPE_TYPE, PRIM_PHYSICS_SHAPE_CONVEX]);
}
touch_start (integer num_detected)
{
if (gTouchControl)
{
// 0 = first time; 1 = off; 2 = on
if (gState == 0)
{
gState = 2;
llSetKeyframedMotion (
[
gOffset, llEuler2Rot (gDegRot*DEG_TO_RAD), gMoveTime,
-gOffset, llEuler2Rot (gDegRot*DEG_TO_RAD), gMoveTime
],
[KFM_MODE, KFM_LOOP]);
}
else if (gState == 1)
{
// turn on
gState = 2;
llSetKeyframedMotion ([], [KFM_COMMAND, KFM_CMD_PLAY]);
}
else
{
// turn off
gState = 1;
llSetKeyframedMotion ([], [KFM_COMMAND, KFM_CMD_PAUSE]);
}
}
}
on_rez (integer n)
{
llResetScript();
}
}