Script da mettere nella palla su cui sedersi.
Se la palla si chiama “Pippo” dovete mettere coppie di coni a livello suolo ogni coppia deve avere lo stesso nome:
Pippo-0, Pippo-0
Pippo-1, Pippo-1
e così via delineando un percorso
Ricordatevi di fare il reset della palla nella posizione iniziale in modo che torni. Mettete inoltre l’animazione “skate012″ nella palla.
key id;
key last=NULL_KEY;
vector offset=<0,0,0.01>;
integer index=0;
vector originalpos;
rotation originalrot;
integer idtarget;
vector newpos;
rotation newrot;
float tau=0.5;
reset()
{
//llSay(0,"unsit");
llStopAnimation("skate012");
while(llVecDist(llGetPos(),originalpos)>0.1) llSetPos(originalpos);
llSetRot(originalrot);
llResetScript();
}
default
{
state_entry()
{
//llSay(0, "Reset!");
llSetStatus(STATUS_PHYSICS,FALSE);
llSitTarget(offset,ZERO_ROTATION);
originalpos=llGetPos();
originalrot=llGetRot();
}
changed(integer change)
{
id=llAvatarOnSitTarget();
//llSay(0,"id: "+(string)id+" last: "+(string)last);
if(change & CHANGED_LINK)
{
if(id==NULL_KEY && last!=NULL_KEY)
{
reset();
return;
}
if(id!=NULL_KEY && last==NULL_KEY)
{
last=id;
//llSay(0,"sit");
llRequestPermissions(id,PERMISSION_TRIGGER_ANIMATION);
return;
}
}
}
run_time_permissions(integer perm)
{
llStopAnimation("sit");
llStartAnimation("skate012");
index=0;
llSensor(llGetObjectName()+"-"+(string)index,NULL_KEY,PASSIVE,92.0,PI);
}
no_sensor()
{
llSay(0,"no_sensor");
// end of the journey, no further steps, go back to origin
llUnSit(id);
reset();
}
sensor(integer num)
{
integer i; newpos=<0,0,0>;
if(num==1) newpos=llDetectedPos(0);
if(num==2)
{
newpos=(llDetectedPos(0)+llDetectedPos(1))/2;
}
newpos+=<0,0,1>;
llSay(0,"going to "+(string)newpos);
//newpos=llDetectedPos(0);
vector diff=newpos-llGetPos(); diff.z=0;
//llSetRot(llRotBetween(<0,0,1>,diff)/llGetRootRotation());
llSetRot(llRotBetween(<1,0,0>,diff));
//newrot=llDetectedRot(0);
float dist=llVecDist(llGetPos(),newpos);
idtarget=llTarget(newpos,.5);
llSetBuoyancy(1.3);
llSetStatus(STATUS_PHYSICS,TRUE);
llMoveToTarget(newpos,tau);
}
at_target(integer tnum, vector pos, vector our)
{
llSay(0,"at_target");
llTargetRemove(idtarget);
llSetStatus(STATUS_PHYSICS,FALSE);
llSetPos(newpos);
index++;
llSensor(llGetObjectName()+"-"+(string)index,NULL_KEY,PASSIVE,92,PI);
}
}