Script di movimento sci

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);

    }    

}

I commenti sono chiusi.