// Makes an object go up or down, gradually, when touched. // In order to make it a gradual movement, it uses a physical // object, which means it might be a little wobbly ... // // Update: Jan 2012 // Add correction factor to correct for but SVC2441, when an // object will descend too fast. // // Kimm Paulino // Written for Nicollette Arabello, November 2009 // integer gState; integer DOWN=0; integer GO_UP=1; integer UP=2; integer GO_DOWN=3; float MOVE_DAMPING=4.0; float MOVE_TIME=4.0; float DOWN_CORRECTION=1.5; // Use trial-and-error to correct for SVC-2441 // Move to 2m above starting position vector gOffset = <0.0, 0.0, 2.0>; vector gStartPosition; default { state_entry() { // Use physics so that can use MoveToTarget gStartPosition = llGetPos (); // Stop the object rotating llSetStatus(STATUS_ROTATE_X|STATUS_ROTATE_Y|STATUS_ROTATE_Z, FALSE); llSetStatus(STATUS_PHYSICS, TRUE); llMoveToTarget (gStartPosition, MOVE_DAMPING); llSetTimerEvent (MOVE_TIME); } on_rez(integer n) { llResetScript(); } timer () { if (gState == DOWN) { gState = GO_UP; llMoveToTarget(gStartPosition + gOffset, MOVE_DAMPING); gState = UP; } else if (gState == UP) { gState = GO_DOWN; // Need to compensate (a bit) for SVC-2441 llMoveToTarget(gStartPosition, MOVE_DAMPING*DOWN_CORRECTION); gState = DOWN; } } }