LSL Status/Kan-ed16
From OpenSimulator
(Difference between revisions)
(New page: '''Code:''' // This is a script designed to orbit its owner. vector startPos; vector curPos; vector offset; // offset from Agent integer iteration; float rotationRate; ...) |
m (Robot: Cosmetic changes) |
||
| (5 intermediate revisions by 5 users not shown) | |||
| Line 1: | Line 1: | ||
| + | __NOTOC__ | ||
| + | {{Quicklinks}} | ||
| + | <br /> | ||
| + | |||
'''Code:''' | '''Code:''' | ||
| − | // This is a script designed to orbit its owner. | + | // This is a script designed to orbit its owner. |
| − | vector startPos; | + | vector startPos; |
| − | vector curPos; | + | vector curPos; |
| − | + | ||
| − | vector offset; // offset from Agent | + | vector offset; // offset from Agent |
| − | integer iteration; | + | integer iteration; |
float rotationRate; // degrees of rotation per iteration | float rotationRate; // degrees of rotation per iteration | ||
float sensorInterval; // seconds between sensor scan. | float sensorInterval; // seconds between sensor scan. | ||
| Line 67: | Line 71: | ||
} | } | ||
| − | '''Status:''' | + | '''Status:''' Working! |
| + | |||
| + | [[Category:Scripts]] | ||
Latest revision as of 19:30, 3 March 2012
Code:
// This is a script designed to orbit its owner.
vector startPos;
vector curPos;
vector offset; // offset from Agent
integer iteration;
float rotationRate; // degrees of rotation per iteration
float sensorInterval; // seconds between sensor scan.
default
{
state_entry()
{
llOwnerSay( "Hello, Avatar! Touch to start orbiting." );
llSetStatus( 1, FALSE ); // turn Physics off.
offset = < 2, 2, 1 >;
iteration = 0;
rotationRate = .5;
sensorInterval = .3;
}
touch_start(integer total_number)
{
startPos = llGetPos();
curPos = startPos;
llSleep( .1 );
key id = llGetOwner();
llSensorRepeat( "", id, AGENT, 96, PI, sensorInterval );
}
sensor(integer total_number)
{
iteration++;
if( iteration > 300 )
{
llResetScript();
}
if( llDetectedOwner( 0 ) == llGetOwner() )
{ // the detected Agent is my owner.
vector position = llDetectedPos(0); // find Owner position.
// calculate next object position relative both to the Owner's
// position and the current time interval counter. That is,
// use the iteration counter to define a rotation, multiply
// the rotation by the constant offset to get a rotated offset
// vector, and add that rotated offset to the current position
// to defne the new position.
float degreeRotation = llRound( rotationRate * iteration ) % 360;
rotation Rotation =
llEuler2Rot( < 0, 0, degreeRotation * DEG_TO_RAD > );
vector rotatedOffset = offset * Rotation;
position += rotatedOffset;
// change the location of the object and save the current (rotated)
// offset for use during the next iteration.
llSetPos( position );
offset = rotatedOffset;
}
}
}
Status: Working!