User talk:Kimm Paulino/Scripts1
Hello Kimm,
Your non-physical move and rotate script is jerky because you're using llSetPos() which has a built-in delay of 0.2 secs.
Replacing the llSetPos() with this line makes it much smoother:-
llSetLinkPrimitiveParamsFast ( LINK_THIS, [PRIM_POSITION, gCurrentPosition] );
Omei Qunhua 17:45, 28 December 2012 (PST)
Looking again, there's a lot of do-nothing code that can come out like all the stuff involving gState
if (gState == DOWN) { gState = GO_UP; gState = UP; // ? eh? you've just set it to GO_UP } else if (gState == UP) { gState = GO_DOWN; gState = DOWN; // ?eh? }
anyway, gState never gets used.
You can initialise global variables like gDirection where you declare them rather than setting values in state_entry.
So you script can reduce to: <lsl> // Period for the up/down movement is MOVE_COUNT * MOVE_TIME integer MOVE_COUNT = 40; float MOVE_TIME = 0.1;
// Rotation value to use vector gRotationAxis = <0.0, 0.0, 1.0>; float gPiDivisor = 2.0;
// The vector to add to the start position for MOVE_COUNT times vector gOffset = <0.0, 0.0, 0.05>; vector gCurrentPosition; integer gCount; integer gDirection = 1;
default {
state_entry() { gCurrentPosition = llGetPos(); // Start the rotation llTargetOmega (gRotationAxis, PI/gPiDivisor, 1.0); llSetTimerEvent (MOVE_TIME); } on_rez(integer n) { llResetScript(); } timer () { gCount++; if (gCount > MOVE_COUNT) { gCount = 0; gDirection = -gDirection; } gCurrentPosition += (gOffset * gDirection); llSetLinkPrimitiveParamsFast ( LINK_THIS, [PRIM_POSITION, gCurrentPosition] ); }
} </lsl> Omei Qunhua 01:48, 29 December 2012 (PST)