LSL Status/Kan-ed9
From OpenSimulator
(Difference between revisions)
(New page: '''Code:''' vector startPos; vector curPos; vector curForce; integer second; default { state_entry() { llSay( 0, "Hello, Avatar! Touch to launch me straight up."); ...) |
|||
| Line 1: | Line 1: | ||
'''Code:''' | '''Code:''' | ||
| − | vector startPos; | + | vector startPos; |
| − | vector curPos; | + | vector curPos; |
vector curForce; | vector curForce; | ||
integer second; | integer second; | ||
| − | + | ||
default | default | ||
{ | { | ||
| Line 14: | Line 14: | ||
startPos = < 0, 0, 0 >; | startPos = < 0, 0, 0 >; | ||
} | } | ||
| − | + | ||
touch_start(integer total_number) | touch_start(integer total_number) | ||
{ | { | ||
Revision as of 23:16, 16 December 2007
Code:
vector startPos;
vector curPos;
vector curForce;
integer second;
default
{
state_entry()
{
llSay( 0, "Hello, Avatar! Touch to launch me straight up.");
llSetStatus( 1, TRUE );
startPos = < 0, 0, 0 >;
}
touch_start(integer total_number)
{
startPos = llGetPos();
curPos = startPos;
curForce = < 0, 0, 0 >;
second = 0;
llSetColor( < 1.0, 0.0, 0.0 > , ALL_SIDES ); // set color to red.
float objMass = llGetMass();
float Z_force = 10.2 * objMass;
llSetForce( < 0.0, 0.0, Z_force >, FALSE );
llSay( 0, "Force of " + (string)Z_force + " being applied." );
llSetTimerEvent(1);
}
timer()
{
second++;
curPos = llGetPos();
float curDisplacement = llVecMag( curPos - startPos );
if( ( curDisplacement > 30. ) && // then object is too far away, and
( llGetForce() != < 0.0, 0.0, 0.0 > ) ) // force not already zero,
{ // then let gravity take over, and change color to green.
llSetForce( < 0.0, 0.0, 0.0 >, FALSE );
llSetColor( < 0, 1.0, 0 >, ALL_SIDES );
llSay( 0, "Force removed; object in free flight." );
}
if ( second > 19 ) // then time to wrap this up.
{
// turn object blue and zero force to be safe....
llSetColor( < 0, 0, 1.0 >, ALL_SIDES ); // change color to blue.
llSetForce( < 0, 0, 0 >, FALSE );
// ...move object back to starting position...
// ...after saving current status of Physics attribute.
integer savedStatus = llGetStatus( 1 );
llSetStatus( 1, FALSE ); // turn physics off.
while ( llVecDist( llGetPos(), startPos ) > 0.001)
{
llSetPos( startPos );
}
llSetStatus( 1, savedStatus ); // restore Physics status.
//...and then turn color to black and Reset the script.
llSetColor( < 1, 1, 1 >, ALL_SIDES );
llSetTimerEvent( 0 ); // turn off timer events.
llSay( 0, "Done and resetting script." );
llResetScript(); // return object to ready state.
}
}
}
Status: Not working. Missing llSetStatus(), llSetForce(), and llGetMass(). Physics engine is not currently fully implemented.