// Random Color Changer
// Created by Water Rogers for IBM/Opensource
// Purpose
// --------------------------------------------------------------
// This is a basic example of how you can randomize color
// It aso shows simple on/off functionality and introduces
// the llMessageLinked() concept for communicating between
// multiple objects/scripts of the same link set.
// Requirements
// --------------------------------------------------------------
// A single prim is all that is necessary for this example.
// GLOBAL VARIABLES
// --------------------------------------------------------------
float g_Timer = 5.0; // How fast to change colors (seconds)
integer g_RandomOn = TRUE; // The on/off switch for randomizing
// EVENTS
// --------------------------------------------------------------
default
{
state_entry()
{
// ------------------------------------------------------
// This is the entry-point of the script. After a script
// has been saved or reset, this event will fire off first
// ------------------------------------------------------
// Here we set up a simple timer to fire off once every g_Timer
// seconds
llSetTimerEvent(g_Timer);
}
touch_start(integer num_detected)
{
g_RandomOn = !g_RandomOn;
if(g_RandomOn) llSetTimerEvent(g_Timer);
else llSetTimerEvent(0);
}
timer()
{
// This event is called each g_Timer seconds as declared
// previously in the state_entry() event.
// llSetColor() will change the color of an object taking
// vector color and integer face as arguments. the color
// vector is in this form: where
// <0,0,0> = Black and <1,1,1> = White. In between 0 and 1
// is the focus of our different color values, which is why
// we use llFrand() to generate a random float number between
// 0 and 1. ALL_SIDES is a bit-field global to tell the script
// that we want all faces of the object colored -- otherwise
// we could specify a particular face to color using the
// integer representation of the face.
vector rand_color = ;
llSetColor(rand_color, ALL_SIDES);
// We also want to control the color of the beam. Since
// llSetColor() only affects the object the script is contained
// in, we need to send a message to the beam object within the
// link set. The best way to do this is to send a message
// using llMessageLinked(). This works much like a listen
// command, except the object only talks to other objects
// that are linked to it, making it much more secure.
llMessageLinked(LINK_SET, 1, (string)rand_color, NULL_KEY);
}
}