Difference between revisions of "User:Toady Nakamura/Two States Light"

From Second Life Wiki
Jump to navigation Jump to search
m (Undo revision 1173349 by Kireji Haiku (Talk) stop changing my user pages so they no longer match my class notes)
m (appended fancier version of script to bottom of page with explanatory note. It's annoying to waste this time reverting edits just to get my own pages back to functional.)
Line 6: Line 6:
<lsl>
<lsl>


vector color = <1,1,1>;  // Use to change the color of the light
vector color = <1.0, 1.0, 1.0>;  // Use to change the color of the light
float intensity = 1.000; // Use to change the intensity of the light, from 0 up to 1
float intensity = 1.0;   // Use to change the intensity of the light, from 0 up to 1
float radius = 10.000; //  Use to change the Radius of the light, from 0 up to 20
float radius = 10.0;     //  Use to change the Radius of the light, from 0 up to 20
float falloff = 0.750; //  Use to set the falloff of the light, from 0 up to 2
float falloff = 0.75;   //  Use to set the falloff of the light, from 0 up to 2


default  
default  
{  
{  
    on_rez(integer param)
   
    {
        llResetScript();
    }
     
     touch_start(integer total_number)  
     touch_start(integer total_number)  
     {  
     {  
Line 30: Line 26:
     touch_start(integer total_number)  
     touch_start(integer total_number)  
     {  
     {  
         llSetPrimitiveParams([PRIM_POINT_LIGHT, FALSE, llSetPrimitiveParams([PRIM_POINT_LIGHT, FALSE,  // when this is false, light is off,
         llSetPrimitiveParams([PRIM_POINT_LIGHT, FALSE, color, intensity, radius, falloff]);                               
                                    color, intensity, radius, falloff]);                              // rest of params don't matter
         llSetPrimitiveParams([PRIM_FULLBRIGHT, ALL_SIDES, FALSE]);
         llSetPrimitiveParams([PRIM_FULLBRIGHT, ALL_SIDES, FALSE]);
         state default;  
         state default;  
     }  
     }  
    on_rez(integer param)
    {
        llResetScript();
    }
}  
}  


</lsl>
== Another way to do the same thing ==
After this script was posted an "expert" scriptor came along and changed it.  Since their new version has no explanatory notes, and no longer matches the in world student notes, I have reverted the original version and appended their version here.  It does exactly the same thing, but is considered by the person changing these pages to be "better."
<lsl>
vector color = <1.0, 1.0, 1.0>;
float intensity = 1.000;// from 0.0 up to 1.0
float radius = 10.000;//  from 0.0 up to 20.0
float falloff = 0.750;//  from 0.0 up to 2.0
default
{
    on_rez(integer start_param)
    {
        llResetScript();
    }
    touch_start(integer num_detected)
    {
        llSetLinkPrimitiveParamsFast(LINK_THIS,
            [PRIM_POINT_LIGHT, TRUE, color, intensity, radius, falloff,
            PRIM_FULLBRIGHT, ALL_SIDES, TRUE]);
        state lightOn;
    }
}
state lightOn
{
    on_rez(integer start_param)
    {
        llResetScript();
    }
    touch_start(integer num_detected)
    {
        llSetLinkPrimitiveParamsFast(LINK_THIS,
            [PRIM_POINT_LIGHT, FALSE, color, intensity, radius, falloff,
            PRIM_FULLBRIGHT, ALL_SIDES, FALSE]);
        state default;
    }
}


</lsl>
</lsl>

Revision as of 09:22, 4 November 2012

Using two states can sometimes be an elegant solution to on/off.

  • Original framework 04-16-08 by Toady Nakamura
  • Light call modified from Simon Kline's classes "Scripting from Scratch"

<lsl>

vector color = <1.0, 1.0, 1.0>; // Use to change the color of the light float intensity = 1.0; // Use to change the intensity of the light, from 0 up to 1 float radius = 10.0; // Use to change the Radius of the light, from 0 up to 20 float falloff = 0.75; // Use to set the falloff of the light, from 0 up to 2

default {

   touch_start(integer total_number) 
   { 
       llSetPrimitiveParams([PRIM_POINT_LIGHT, TRUE, color, intensity, radius, falloff]);
       llSetPrimitiveParams([PRIM_FULLBRIGHT, ALL_SIDES, TRUE]);
       state unlit; 
   } 

}

state unlit {

   touch_start(integer total_number) 
   { 
       llSetPrimitiveParams([PRIM_POINT_LIGHT, FALSE, color, intensity, radius, falloff]);                               
       llSetPrimitiveParams([PRIM_FULLBRIGHT, ALL_SIDES, FALSE]);
       state default; 
   } 
   on_rez(integer param)
   {
       llResetScript();
   }

}


</lsl>

Another way to do the same thing

After this script was posted an "expert" scriptor came along and changed it. Since their new version has no explanatory notes, and no longer matches the in world student notes, I have reverted the original version and appended their version here. It does exactly the same thing, but is considered by the person changing these pages to be "better." <lsl> vector color = <1.0, 1.0, 1.0>; float intensity = 1.000;// from 0.0 up to 1.0 float radius = 10.000;// from 0.0 up to 20.0 float falloff = 0.750;// from 0.0 up to 2.0

default {

   on_rez(integer start_param)
   {
       llResetScript();
   }

   touch_start(integer num_detected)
   {
       llSetLinkPrimitiveParamsFast(LINK_THIS,
           [PRIM_POINT_LIGHT, TRUE, color, intensity, radius, falloff,
           PRIM_FULLBRIGHT, ALL_SIDES, TRUE]);

       state lightOn;
   }

}

state lightOn {

   on_rez(integer start_param)
   {
       llResetScript();
   }

   touch_start(integer num_detected)
   {
       llSetLinkPrimitiveParamsFast(LINK_THIS,
           [PRIM_POINT_LIGHT, FALSE, color, intensity, radius, falloff,
           PRIM_FULLBRIGHT, ALL_SIDES, FALSE]);

       state default;
   }

}

</lsl>