Jump to content

Scripting Tutorial-08

From OSgrid Wiki
Revision as of 15:40, 7 September 2018 by Osgridadmin (talk | contribs) (Created page with "== Scripting Lesson #8 - Held August 25th, 2018 at Sandbox Plaza by Fu Barr == <source lang="lsl"> /* Fu's basic light switch v0.2 - turn-off-the-lamp timeout...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Scripting Lesson #8 - Held August 25th, 2018 at Sandbox Plaza by Fu Barr

<source lang="lsl"> /*

   Fu's basic light switch
   v0.2 
   - turn-off-the-lamp timeout
   - expanded setup
   v0.1
   - basic on/off toggle
  • /


integer DEBUG = TRUE;

integer DIALOG_CHANNEL; integer dialog_listen_id;

float LAMP_TIMEOUT = 5.0; list lamps;

list colours_names = ["red", "blue", "green"]; list colours_rgb = [<1.0, 0, 0>, <0, 0, 1.0>, <0, 1.0, 0>]; float colours_glow = 0.20;

set_lamps(string colour_name) {

   vector  rgb;
   float   glow;
   if(colour_name == "none") {
       rgb = <1,1,1>;
       glow = 0.0;
   } else {
       integer id = llListFindList(colours_names, [colour_name]);
       
       if(id > -1) {
           rgb  = llList2Vector(colours_rgb, id);
           glow = colours_glow;
       }
   }
   integer i   = 0;
   integer end = llGetListLength(lamps);
   while(i < end) {
       llSetLinkPrimitiveParamsFast(llList2Integer(lamps, i), 
           // the UUID here is the OSgrid specific one for 'Blank Texture'
           [ PRIM_FULLBRIGHT,  ALL_SIDES, FALSE,
             PRIM_TEXTURE,     ALL_SIDES, "5748decc-f629-461c-9a36-a35a221fe21f", <1,1,0>, <0,0,0>, 0,
             PRIM_COLOR,       ALL_SIDES, rgb, 1.0, 
             PRIM_GLOW,        ALL_SIDES, glow ]
       );
       i++;
   }

}


default {

   state_entry() {
       llOwnerSay("running: " + llGetScriptName());
       // 0. setup lamps
       integer i   = 1;    // linked prims are numbered from 1
       integer end = llGetNumberOfPrims();
       while(i <= end) {
           if(llGetLinkName(i) == "lamp") {
               lamps += i;
           }
           i++;
       }
       if(DEBUG){llOwnerSay(llDumpList2String(lamps, ","));}
       // 1. generate random DIALOG_CHANNEL
       DIALOG_CHANNEL = ((integer) llFrand(10000000)) * -1;
       // 2. showtime!
       state unlit;
   }

}


state unlit {

   state_entry() {
       set_lamps("none");
   }
   touch_end(integer num_touches) {
       if(llDetectedKey(0) == llGetOwner()) {
           llDialog(llGetOwner(), "\npick a colour", colours_names, DIALOG_CHANNEL);
       }
       dialog_listen_id = llListen(DIALOG_CHANNEL, "", llGetOwner(), "");
   }
   
   listen(integer channel, string name, key uuid, string msg) {
       set_lamps(msg);
       
       state lit;
   }

}


state lit {

   state_entry() {
       // 1. setup timer event
       llSetTimerEvent(LAMP_TIMEOUT);
   }
   
   timer() {
       set_lamps("none");
       state unlit;
   }

} </source>