SurfBoard

De DigiWiki.

default
{
    on_rez(integer flag) { do { llSay(0, "Resetting..."); llResetScript(); } while (TRUE); }
 
    state_entry()
    {
        llSetClickAction(CLICK_ACTION_SIT);
 
        llSitTarget(<-0.25, 0.0, 0.75>, <0.0, 0.0, 0.0, 0.0>);
 
        llSetCameraEyeOffset(<-5, 0, 2> *  <0.0, 0.0, 0.0, 0.0>);
        llSetCameraAtOffset(<3, 0, 1> *  <0.0, 0.0, 0.0, 0.0>);
    }
 
    changed(integer change)
    {
        if ( change & (CHANGED_REGION_RESTART | CHANGED_REGION_START))
            do { llOwnerSay("Resetting..."); llResetScript(); } while (TRUE);
 
        if (change & CHANGED_LINK)
        {
            key avatar = llAvatarOnSitTarget();
            if ( avatar != NULL_KEY ) llRequestPermissions(avatar,PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS);
            else if (llGetPermissionsKey() != NULL_KEY)
            {
                llStopAnimation("surf");
                llReleaseControls();
 
                vector pos = llGetPos();
                float ground = llGround(ZERO_VECTOR);
                rotation rot = llGetRot();
                vector euler = llRot2Euler(rot) * RAD_TO_DEG;
 
                rot = <rot.x, rot.y, rot.z, -rot.s> * rot * llEuler2Rot(<0.0, 0.0, euler.z> * DEG_TO_RAD);
 
                if ((pos.z - ground) < 10.0) llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_POSITION, <pos.x, pos.y, ground + 0.0125>]);
                llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_ROTATION, rot]);
 
                llSay(0,"I have released control");
            }
        }
    }
 
    run_time_permissions(integer perm)
    {
        if (perm & ( PERMISSION_TRIGGER_ANIMATION | PERMISSION_TAKE_CONTROLS ))        
        {
            llStopAnimation("sit");
            llSleep(0.1);
            llStartAnimation("surf");
 
            llTakeControls(CONTROL_FWD | CONTROL_BACK |
                           CONTROL_ROT_LEFT | CONTROL_ROT_RIGHT |
                           CONTROL_UP | CONTROL_DOWN,
                           TRUE, FALSE);
 
            llSay(0,"I have control");
        }
    }
 
    control(key id, integer held, integer change)
    {
        vector pos = llGetPos();
        vector sim = ZERO_VECTOR;
        rotation rot = llGetRot();
 
        // Check sim boundry and Move
        if (held & CONTROL_FWD)
        {
            sim = pos + (llRot2Fwd(rot) * 1);
            if ((sim.x > 5.0) && (sim.x < 250.0) && (sim.y > 5.0) && (sim.y < 250.0)) { pos = sim; }
        }
 
        if (held & CONTROL_BACK)
        {
             sim = pos - (llRot2Fwd(rot) * 1);
             if ((sim.x > 5.0) && (sim.x < 250.0) && (sim.y > 5.0) && (sim.y < 250.0)) { pos = sim; }
        }
        // adjust rotation z axis
        if (held & CONTROL_ROT_LEFT)  { rot = rot * llEuler2Rot(<0.0, 0.0,  15.0> * DEG_TO_RAD); }
        if (held & CONTROL_ROT_RIGHT) { rot = rot * llEuler2Rot(<0.0, 0.0, -15.0> * DEG_TO_RAD); }
 
        // add banking
        if (held & change & CONTROL_ROT_LEFT)  { rot = llEuler2Rot(<-10.0, 0.0, 0.0> * DEG_TO_RAD) * rot; }
        if (held & change & CONTROL_ROT_RIGHT) { rot = llEuler2Rot(< 10.0, 0.0, 0.0> * DEG_TO_RAD) * rot; }
 
        // remove banking
        if (~held & change & CONTROL_ROT_LEFT)  { rot = llEuler2Rot(< 10.0, 0.0, 0.0> * DEG_TO_RAD) * rot; }
        if (~held & change & CONTROL_ROT_RIGHT) { rot = llEuler2Rot(<-10.0, 0.0, 0.0> * DEG_TO_RAD) * rot; }
 
        // Adjust rotation local y axis
        if (held & CONTROL_UP)   { rot = llEuler2Rot(<0.0,  1.0, 0.0> * DEG_TO_RAD) * rot; }
        if (held & CONTROL_DOWN) { rot = llEuler2Rot(<0.0, -1.0, 0.0> * DEG_TO_RAD) * rot; }
 
//        if (held & CONTROL_UP)   { pos = pos + (llRot2Up(rot) * 1); }
//        if (held & CONTROL_DOWN) { pos = pos - (llRot2Up(rot) * 1); }
 
        // fall have to change this.
        float ground = llGround(llGetPos() - pos);
        if (pos.z > ground) pos.z = pos.z - 0.25;
        if (pos.z < 1.0) pos.z = 1.0;
 
        llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_POSITION, pos, PRIM_ROTATION, rot]);
    }
}
Outils personnels
  • Cette page a été consultée 350 fois.
donate
Google Ads