Difference between revisions of "Rainbow palette"

From Second Life Wiki
Jump to navigation Jump to search
m
Line 9: Line 9:
// Touch face 1 of "Rainbow Palette" to change "Listen Object" color.
// Touch face 1 of "Rainbow Palette" to change "Listen Object" color.
//
//
//Modified by Rui Clary on 2011.06.20 - some corrections
// Available under the Creative Commons Attribution-ShareAlike 3.0 license
// Available under the Creative Commons Attribution-ShareAlike 3.0 license
// http://creativecommons.org/licenses/by-sa/3.0/
// http://creativecommons.org/licenses/by-sa/3.0/
Line 29: Line 30:
         if (llDetectedTouchFace(0)==1)
         if (llDetectedTouchFace(0)==1)
         {   
         {   
            x=360*touchedpos.x;
            x=360*touchedpos.x;
              
             r=0;
             if (x>=0&&x<=60)
             g=0;
                {r=255;}
            b=0;
             if (x>=300&&x<=360)
             if (x>=0&&x<=60){
                 {r=255;}
                 r=255;
            if (x>=120&&x<=240)
G=x*255/60;
                {r=0;}
            }
             if (x>60&&x<=120)
             if (x>60&&x<=120){
                 {r=255-(x-60)*255/60;}
                 r=255-(x-60)*255/60;
            if (x>240&&x<300)
                 g=255;
                 {r=(x-240)*255/60;}      
            }
             if (x>=0&&x<60)
             if (x>120&&x<=180){
                 {g=x*255/60;}   
                 g=255;
             if (x>=60&&x<=180)
                b=(x-120)*255/60;
                {g=255;}      
             }
             if (x>180&&x<240)
             if (x>180&&x<240){
                 {g=255-(x-180)*255/60;}       
                 g=255-(x-180)*255/60;
            if (x>=240&&x<=360)
                 b=255;
                 {g=0;}               
             }      
             if (x>=0&&x<=120)
             if (x>240&&x<300){
                {b=0;}  
                 r=(x-240)*255/60;
             if (x>120&&x<180)
                 b=255;
                 {b=(x-120)*255/60;}   
            }  
            if (x>=180&&x<=300)
             if (x>300&&x<=360){
                 {b=255;}      
                 r=255;
             if (x>300&&x<=360)
b=255-(x-300)*255/60;
                 {b=255-(x-300)*255/60;}   
            }   
                 llSay(4,"<"+(string)(r/255)+","+(string)(g/255)+","+(string)(b/255)+">");
                 llSay(4,"<"+(string)(r/255)+","+(string)(g/255)+","+(string)(b/255)+">");
         }
         }
Line 93: Line 94:
//
//
// Modified by Jor3l Boa. Better interface and more readable :P
// Modified by Jor3l Boa. Better interface and more readable :P
//
//Modified by Rui Clary on 2011.06.20 - some corrections
//
//
// Available under the Creative Commons Attribution-ShareAlike 3.0 license
// Available under the Creative Commons Attribution-ShareAlike 3.0 license
Line 161: Line 164:
         if(llDetectedTouchFace(0) != 1) { return;  }
         if(llDetectedTouchFace(0) != 1) { return;  }
         x=360*touchedpos.x;
         x=360*touchedpos.x;
         r=0;
         if (x >= 0 && x<= 60) {
        g=0;
            r = 255;
         b=0;
         }
         if (x>=0&&x<=60){
         if (x >= 300 && x<= 360) {
             r=255;
             r = 255;
            g=x*255/60;
         }
         }
         if (x >= 120 && x<=240) {
         if (x>60&&x<=120){
             r = 0;
             r=255-(x-60)*255/60;
            g=255;
         }
         }
         if (x > 60 && x<=120) {
         if (x>120&&x<=180){
             r = 255-(x-60)*255/60;
             g=255;
            b=(x-120)*255/60;
         }
         }
        if (x > 240 && x<300) {
         if (x>180&&x<240){
            r = (x-240)*255/60;
             g=255-(x-180)*255/60;
        }       
            b=255;
        if (x >= 0 && x<60) {
            g = x*255/60;
        }   
        if (x >= 60 && x<= 180) {
            g = 255;
        }       
         if (x > 180 && x<240) {
             g = 255-(x-180)*255/60;
         }         
         }         
         if (x >= 240 && x <= 360) {
         if (x>240&&x<300){
             g = 0;
             r=(x-240)*255/60;
        }               
             b=255;
        if (x >= 0 && x <= 120) {
            b = 0;
        }   
        if (x > 120 && x < 180) {
             b = (x-120)*255/60;
         }     
         }     
         if (x >= 180 && x <= 300) {
         if (x>300&&x<=360){
             b = 255;
             r=255;
        }       
             b=255-(x-300)*255/60;
        if (x > 300 && x <= 360) {
             b = 255-(x-300)*255/60;
         }   
         }   
       
         r = (r/255);
         r = (r/255);
         g = (g/255);
         g = (g/255);

Revision as of 03:52, 20 June 2011

<lsl> // Rainbow Palette by Rui Clary // This script will only run in Mono enabled, Second Life Viewer 1.21 or above. // // Interactive Rainbow Palette // // Add this script to a cube prim and add "Listen Palete" script to another Object. // You can resize and stretch the cube, the way you want, to make it look like a color palette. // Touch face 1 of "Rainbow Palette" to change "Listen Object" color. // //Modified by Rui Clary on 2011.06.20 - some corrections // Available under the Creative Commons Attribution-ShareAlike 3.0 license // http://creativecommons.org/licenses/by-sa/3.0/

default {

   state_entry()
   {
       llSetObjectName("pal");
       llSetTexture ("5748decc-f629-461c-9a36-a35a221fe21f",ALL_SIDES);
       llSetTexture("5543eaa7-4283-8383-eef9-945c0b3f25c7",1);
   }
   touch(integer num_detected) 
   {
       float x;
       float r;
       float g;
       float b;
        vector touchedpos = llDetectedTouchST(0);  
        if (llDetectedTouchFace(0)==1)
        {  
           x=360*touchedpos.x;
           r=0;
           g=0;
           b=0;
           if (x>=0&&x<=60){
               r=255;

G=x*255/60;

           }
           if (x>60&&x<=120){
               r=255-(x-60)*255/60;
               g=255;
           }
           if (x>120&&x<=180){
               g=255;
               b=(x-120)*255/60;
           }
           if (x>180&&x<240){
               g=255-(x-180)*255/60;
               b=255;
           }        
           if (x>240&&x<300){
               r=(x-240)*255/60;
               b=255;
           }    
           if (x>300&&x<=360){
               r=255;

b=255-(x-300)*255/60;

           }  
               llSay(4,"<"+(string)(r/255)+","+(string)(g/255)+","+(string)(b/255)+">");
       }
   }
  

}

</lsl>

<lsl> // Rainbow Palette Listen Script by Rui Clary // // Second component of Rainbow Palette // // Add this script to "Listen Object".


default {

   state_entry()
   {
       llSetTexture ("5748decc-f629-461c-9a36-a35a221fe21f",ALL_SIDES);
       llListen( 4, "pal", NULL_KEY, "" ); 
   }
  listen( integer channel, string name, key id, string message )
   {
       llSetColor((vector)message,0);
   }

} </lsl>

Modified version with fixed floats and "organized" :)

<lsl> // Bsed on Rainbow Palette by Rui Clary // // Modified by Jor3l Boa. Better interface and more readable :P // //Modified by Rui Clary on 2011.06.20 - some corrections // // Available under the Creative Commons Attribution-ShareAlike 3.0 license // http://creativecommons.org/licenses/by-sa/3.0/

// devolverString -> Convert and return a vector without .0000 and other // float things :) devolverString(float r, float g, float b) {

   string _vector = "<";
   if(r <= 0)  {
       _vector += "0,";
   }
   else if(r == 1) {
       _vector += "1,";
   }
   else    {
       string temp = (string)r;
       while(llGetSubString(temp,llStringLength(temp)-1,-1) == "0")    {
           temp = llDeleteSubString(temp,llStringLength(temp)-1,-1);
       }
       _vector += temp+",";
   }
   //----------------
   if(g <= 0)  {
       _vector += "0,";
   }
   else if(g == 1) {
       _vector += "1,";
   }
   else    {
       string temp = (string)g;
       while(llGetSubString(temp,llStringLength(temp)-1,-1) == "0")    {
           temp = llDeleteSubString(temp,llStringLength(temp)-1,-1);
       }
       _vector += temp+",";
   }
   //----------------
   if(b <= 0)  {
       _vector += "0>";
   }
   else if(b == 1) {
       _vector += "1>";
   }
   else    {
       string temp = (string)b;
       while(llGetSubString(temp,llStringLength(temp)-1,-1) == "0")    {
           temp = llDeleteSubString(temp,llStringLength(temp)-1,-1);
       }
       _vector += temp+">";
   }
   //----------------
   llSay(0,"Color: "+_vector);

}

default {

   state_entry()
   {
       llSetObjectName("pal");
       llSetTexture ("5748decc-f629-461c-9a36-a35a221fe21f",ALL_SIDES);
       llSetTexture("5543eaa7-4283-8383-eef9-945c0b3f25c7",1);
   }
   touch_start(integer num_detected) 
   {
       float x;float r;float g;float b;
       vector touchedpos = llDetectedTouchST(0);   
       
       if(llDetectedTouchFace(0) != 1) { return;   }
       x=360*touchedpos.x;
       r=0;
       g=0;
       b=0;
       if (x>=0&&x<=60){
           r=255;
           g=x*255/60;
       }
       if (x>60&&x<=120){
           r=255-(x-60)*255/60;
           g=255;
       }
       if (x>120&&x<=180){
           g=255;
           b=(x-120)*255/60;
       }
       if (x>180&&x<240){
           g=255-(x-180)*255/60;
           b=255;
       }        
       if (x>240&&x<300){
           r=(x-240)*255/60;
           b=255;
       }    
       if (x>300&&x<=360){
           r=255;
           b=255-(x-300)*255/60;
       }  
       r = (r/255);
       g = (g/255);
       b = (b/255);
       //CONVERSION
       devolverString(r,g,b);
   }

} </lsl>