+++ /dev/null
-
-// huffware script: hour hand, modified by fred huffhines.
-//
-// expanded to support time zones by fred huffhines, december 2009.
-//
-// noticed this in arcadia asylum's great hobo cuckoo clock.
-// this script is licensed by Beezle Warburton:
-// "I released those 'into the wild' years ago,do what you like,
-// I just ask that people don't resell the scripts by themselves."
-//
-// fred's changes licensed by:
-// this script is licensed by the GPL v3 which is documented at: http://www.gnu.org/licenses/gpl.html
-// do not use it in objects without fully realizing you are implicitly accepting that license.
-
-// Optional second hand will be a much simpler script that will be
-// unrelated to real-time.
-//
-// note - to reduce load, this script only calculates once a minute, so
-// this provides a jump style minute hand, rather than a smoothy rotating one.
-// This (and rounding) makes the clock's accuracy +/- 1 minute.
-// It's a prim clock anyways, so digital accuracy is just excessive.
-//
-// It would probably be more elegant to use link messages rather than each
-// hand having it's own script, however, this method allows for less caution
-// when linking/unlinking parts of the clock.
-
-// To not mess up timekeeping, please keep chime sounds under 4 seconds long.
-
-integer time;
-integer hours;
-integer minutes;
-
-float anglehours;
-float angleminutes;
-
-integer chime;
-integer numrings;
-
-string chimesound = "CuckooClock";
-float chimevolume = 1.0;
-
-// this is what might be adjusted.
-integer LOCAL_TIME_ZONE_OFFSET = -5; //-5 is EST, -8 is PST.
-
-// the code used in linked messages for us.
-integer SECRET_TIME_ZONE_ADJUSTER_ID = -2091823;
-string TIME_ZONE_ADJUST_COMMAND = "tzadjust";
-
-default
-{
- state_entry() { if (llSubStringIndex(llGetObjectName(), "huffotronic") < 0) state real_default; }
- on_rez(integer parm) { state rerun; }
-}
-state rerun { state_entry() { state default; } }
-
-state real_default
-{
- state_entry()
- {
- // we want to calculate once a minute.
- llSetTimerEvent(60.0);
- }
- timer() {
- llSetTimerEvent(0);
- time = (integer)llGetGMTclock(); // seconds since midnight
- // adjust the hours for the time zone. this will work for most time zones that
- // go through daylight saving time, like the pacific zone where SL is rooted.
- hours = (time / 3600) + LOCAL_TIME_ZONE_OFFSET;
- // convert from 24 to 12 hour time
- if (hours > 11) {
- hours = hours - 12;
- } else if (hours < 0) {
- hours = hours + 12;
- }
- minutes = (time % 3600) / 60;
-
- numrings = (integer)hours;
- if (numrings == 0) {
- numrings = 12;
- }
-
- // the extra addition here makes a smooth hour hand
- // for example, at 6:30, the hour hand should actually
- // be halfway between 6 and 7 on the clock dial
-
- anglehours = - (((float)hours / 12) + (((float)minutes / 720))) * TWO_PI;
-//incompatible with opensim: llSetSoundQueueing(TRUE);
- llRotateTexture(anglehours, ALL_SIDES);
- if (minutes == 0) {
- llMessageLinked(-1,numrings,"chime",NULL_KEY);
- //for (chime = 0; chime < numrings; chime++) {
- // llPlaySound(chimesound, chimevolume);
- // llSleep(3.0);
- //}
- }
- llSetTimerEvent(60.0);
- }
-
- link_message(integer sender, integer num, string msg, key id) {
- if ( (num != SECRET_TIME_ZONE_ADJUSTER_ID) || (msg != TIME_ZONE_ADJUST_COMMAND) )
- return; // not for us.
- // this should be a time zone for us to use.
- LOCAL_TIME_ZONE_OFFSET = (integer)((string)id);
-//llSay(0, "got a new time zone of " + (string)LOCAL_TIME_ZONE_OFFSET );
- // handle this update as soon as possible.
- llSetTimerEvent(0.1);
- }
-}
-