67 lines
1.9 KiB
Plaintext
67 lines
1.9 KiB
Plaintext
|
// 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;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|