March 23, 2008...10:59 pm

A Scripted Bagatelle

Jump to Comments

This evening, Lexx handed me a small object made by a fellow named Petr Brandenburg, that alternately flashed yellow and cyan. She couldn’t read the script inside it, so she didn’t know how it worked. She asked if I could figure it out.

Within a few minutes, I had handed her this:

// Neon Flasher Script
// Erbo Evans - 3/23/2008
/////////////////////////////////

// List of colors to cycle through, specified as  tuples.
list colors = [<0.0,1.0,1.0>, <1.0,1.0,0.0>];
float delay = 0.5;  // how long to wait between color changes
integer index;  // counter used to keep track of color state

default
{
    state_entry()
    { // initialize the color index and display the first color
        index = 0;
        llSetColor(llList2Vector(colors,0),ALL_SIDES);

        // set up the timer to flash colors
        llSetTimerEvent(delay);
    } // end state_entry

    timer()
    { // advance to next color and display it
        if (++index>=llGetListLength(colors))
            index = 0;  // wrap around back to beginning if we run off the end
        llSetColor(llList2Vector(colors,index),ALL_SIDES);
    } // end timer
} // end state default

Simple enough to understand. The script itself is basically a timer-driven state machine, using a table (the colors list) to specify the colors to be displayed on the prim (which uses a blank texture on all faces to better show the effect).

As an exercise, I asked her, “How would you extend the script to flash more than two colors?” Because of the way I wrote the code, it’s very easy (just extend the colors list). However, she stared at it and felt her brain begin to melt. I think it was mostly due to the fact that she was running on only four hours sleep, though. :-)

1 Comment

Leave a Reply