/assets/ScriptsAssetSet/KanEd-Test16.lsl |
@@ -0,0 +1,66 @@ |
// 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; |
} |
} |
} |
|