Aus gegebenem Anlass: Ein Bewegungs-Script ohne Physics für OpenSim

[code lang=“c“]
integer alpha = 0;
vector basepos;
vector newpos;
integer timerset = 0;
float meterProSec = 3;
float offsetX = 0.0;
float offsetY = 0.2;
float offsetZ = 0.0;
integer i = 0;
integer timerSec = 1;
float grenzeYL = 100.0;
float grenzeYH = 110.0;
float grenzeXL = 100.0;
float grenzeXH = 110.0;
default
{
state_entry() {
llSay(0, „ready“);
llSleep(0.1);
basepos = llGetPos();
}

timer() {
vector pos = llGetPos();
float miniOffsetY = offsetY / 10;
float miniOffsetX = offsetX / 10;
for (i = 1; i <= 20; i++) { newpos = pos + ;
llSetPrimitiveParams([PRIM_POSITION, newpos]);
llSleep(0.1);
}
//llOwnerSay(“ am at : “ + (string)newpos);
//llOwnerSay(“ offsets : “ + (string)offsetX + „/“ + (string)offsetY);

// die randsteine
if ((newpos.x <= grenzeXL) && (newpos.y >= grenzeYH)) {
offsetX = meterProSec;
offsetY = 0;
llSetRot(llEuler2Rot(<0.0, 0.0, -PI_BY_TWO>) * llGetRot());
//llOwnerSay(„c1“);
} else if ((newpos.x >= grenzeXH) && (newpos.y >= grenzeYH)) {
offsetX = 0;
offsetY = -meterProSec;
llSetRot(llEuler2Rot(<0.0, 0.0, -PI_BY_TWO>) * llGetRot());
//llOwnerSay(„c2“);
} else if ((newpos.x >= grenzeXH) && (newpos.y <= grenzeYL)) { offsetX = -meterProSec; offsetY = 0; llSetRot(llEuler2Rot(<0.0, 0.0, -PI_BY_TWO>) * llGetRot());
//llOwnerSay(„c3“);
} else if ((newpos.x <= grenzeXL) && (newpos.y <= grenzeYL)) { offsetX = 0; offsetY = meterProSec; llSetRot(llEuler2Rot(<0.0, 0.0, -PI_BY_TWO>) * llGetRot());
//llOwnerSay(„c4“);
}

// die notfallbremsen
else if ((newpos.y > grenzeYH) && (offsetY != 0)) {
offsetY = 0;
offsetX = meterProSec;
llSetRot(llEuler2Rot(<0.0, 0.0, -PI_BY_TWO>) * llGetRot());
//llOwnerSay(„c5“);
} else if ((newpos.x > grenzeXH) && (offsetX != 0)) {
offsetX = 0;
offsetY = meterProSec;
llSetRot(llEuler2Rot(<0.0, 0.0, -PI_BY_TWO>) * llGetRot());
//llOwnerSay(„c6“);
} else if ((newpos.y < grenzeYL) && (offsetY != 0)) { offsetY = 0; offsetX = meterProSec; llSetRot(llEuler2Rot(<0.0, 0.0, -PI_BY_TWO>) * llGetRot());
//llOwnerSay(„c7“);
} else if ((newpos.x < grenzeXL) && (offsetX != 0)) { offsetX = 0; offsetY = meterProSec; llSetRot(llEuler2Rot(<0.0, 0.0, -PI_BY_TWO>) * llGetRot());
//llOwnerSay(„c8“);
}
}
touch_start(integer total_number) {
if (timerset) {
llOwnerSay(„stopping timer“);
timerset = 0;
llSetTimerEvent(0);
} else {
llOwnerSay(„starting timer“);
timerset = 1;
llSetTimerEvent(timerSec);
}
}
}
[/code]