Simple Texture Changer (input list)(more than one side).lsl

From Second Life Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
//***********************************************************************************************************
//                                                                                                          *
//            		  --Simple Texture Changer (input list)(more than one side)--                           *
//                                                                                                          *
//***********************************************************************************************************
// www.lsleditor.org  by Alphons van der Heijden (SL: Alphons Jano)
//Creator: Bobbyb30 Swashbuckler
//Attribution: None required, but it is appreciated.
//Created: November 5, 2009
//Last Modified: November 26, 2009
//Released: Saturday, November 28, 2009
//License: Public Domain

//Status: Fully Working/Production Ready
//Version: 1.0.1

//Name: Simple Texture Changer (input list)(more than one side).lsl
//Purpose: To change the texture on certain sides of a prim.
//Technical Overview: The script finds how many textures there are in the input list, and uses a timer to change the
//                    texture on a side based on randomness or order. It changes all sides of the certain prim to the
//                    specified texture
//Description: A simple texture changer script that changes the texture on certain sides of a prim based on those in
//             the input list. It allows for a random order, or a logical "next up" order.
//Directions: Create a prim. Place the script in prim inventory. Modify the script parameters to suit your needs and
//            save.

//Compatible: Mono & LSL compatible
//Other items required: None.
//Notes: Uses a timer event. Should be low lag. Commented for easier following.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//Adjustable global variables...you may change these
//texture list...this list should have 2 or more textures
list textures = [
    "00000000-0000-0000-0000-0000f0000000",
    "00000000-0000-0000-0000-0000d0000000",
    "00000000-0000-0000-0000-0000e0000000"];//put your texture UUIDs/keys in here

//Please note there is a .2 second delay between prims.
//For all sides or only 1 side, use the <<<<<insert script here>>>>>
list sides = [0,1,2,5];//put in which sides you want the texture to be changed on.
float frequency = 2.0;//how often to change the texture in seconds. Shouldn't be below 2.0

//please note that the last and first texture will be shown less frequently than those in between
integer random = TRUE;//whether to show the textures randomly, or in order
integer duplicatecheck = TRUE;//if random is true, this will check to make sure the random selection is a new texture


/////////////////////////////////////////////////////////////
//global variables...do not change
integer numberoftextures;//number of textures in inventory
integer currenttexture;//inventory number of current texture
integer numberofsidestochange;//the length of the sides list

changetexture()//user function to change texture
{
    integer counter;
    string texture = llList2String(textures,currenttexture);//gets texture key
    do
    {
        llSetTexture(texture,llList2Integer(sides,counter));
        //llOwnerSay("side:" + (string)llList2Integer(sides,counter) + " for: " + (string)texture);//debug
    }while(++counter <numberofsidestochange);
}

default
{
    on_rez(integer start_param)//on rez reset...probably not needed.
    {
        llResetScript();
    }
    state_entry()
    {
        llOwnerSay("Bobbyb's 'Simple Texture Changer (input list)(more than one side).lsl' (Public Domain 2009)");
        llOwnerSay("Because knowledge should be free.");
        numberoftextures = llGetListLength(textures);//speed hack here
        numberofsidestochange = llGetListLength(sides);//length of the sides list...possible speed hack goes here
        //assume correct
        llOwnerSay("There are " + (string)numberoftextures + " pictures which I will change every "
            + (string)frequency  + " seconds on " + (string)numberofsidestochange + " sides which are"
            + llList2CSV(sides));
        llOwnerSay("My current free memory is : " + (string)llGetFreeMemory()
            + " bytes. If it is below 2500 bytes, I may not work properly.");
        llSetTimerEvent(frequency);
    }
    timer()
    {
        if(random)//show pics randomly
        {
            integer randomtexture;
            if(duplicatecheck)//whether to make sure random doesn't repeat itself
            {
                do
                {
                    randomtexture= llRound(llFrand(numberoftextures - 1));
                    //llOwnerSay("r" + (string)randomtexture);//debug
                }while(randomtexture == currenttexture);//make sure the random one isn't the same as the current one
            }
            else//no duplicate check
                randomtexture = llRound(llFrand(numberoftextures - 1));//generate random texture number
            currenttexture = randomtexture;//set the current one to the random one selected
            changetexture();//change the texture
            //llOwnerSay("c" + (string)currenttexture);//debug
        }
        else//not random, go in order
        {
            ++currenttexture;
            if(currenttexture == numberoftextures)//if current texture = number of textures, reset counter
                currenttexture = 0;
            changetexture();//change the texture
            //llOwnerSay("c" + (string)currenttexture);//debug
        }
    }
}