// Analog Wall Clock // Created by Water Rogers for IBM/Opensource // Purpose // -------------------------------------------------------------- // This purpose of this script is to show llRotateTexture() in // action. It also uses multiple scripts in different links of // the object. // Requirements // -------------------------------------------------------------- // 3 Prims are required for all 3 functions, as well as a texture // that looks like a clock hand where the rotation of the object's // Roll is 0 degrees. // Usage // -------------------------------------------------------------- // Put this script into an object, and use the function desired. // Hours, minutes, and seconds all affect how and when the texture // will rotate. // EVENTS // -------------------------------------------------------------- display_hours() { // Get the wallclock, and in order to figure out the hours, divide // the seconds returned from wallclock by 60, then divide that number // by 60. This will return the hour of the day (in military time). // Since this is the hour hand, we take 360 degrees (a full circle) // and divide it by 12 (the hours on a clock). This returns 30 // degrees - multiply by the current hour, then translate the remainder // to Radians, since that's how rotations are interpretted in SL. llRotateTexture(-(((llGetWallclock() / 60) / 60) * 30) * DEG_TO_RAD, ALL_SIDES); } display_minutes() { // The same logic applies to minutes, as with hours, except this time we // are only interested by how many minutes have passed rather then hours. // One less mathmatical computation. Also, 360 divided by 60 segments // equates to 6 degrees. llRotateTexture(-((llGetWallclock() / 60) * 6) * DEG_TO_RAD, ALL_SIDES); } display_seconds() { // Same as the other two, except the wallclock already returns how many // seconds, so there is no need to do any other math other then to translate // to radians and rotate the texture. llRotateTexture(-(llGetWallclock() * 6) * DEG_TO_RAD, ALL_SIDES); } default { state_entry() { // Call the function that this object will represent. This particular // object happens to be the "seconds" hand of the clock. The other 2 // will call the other 2 respectively. display_seconds(); llSetTimerEvent(1); } timer() { display_seconds(); } }