X-Git-Url: https://feistymeow.org/gitweb/?a=blobdiff_plain;f=huffware%2Fhuffotronic_tools_n_testers_v6.1%2FHour_Hand_v0.5.lsl;fp=huffware%2Fhuffotronic_tools_n_testers_v6.1%2FHour_Hand_v0.5.lsl;h=7027c3951affd2e1df0d368f83dc6ca928e51446;hb=f2be7577716da4384c07946069b3b353ca15403a;hp=0000000000000000000000000000000000000000;hpb=620a99face4f2cefadeed9ce69b4fd4f8d6e2b56;p=feisty_meow.git diff --git a/huffware/huffotronic_tools_n_testers_v6.1/Hour_Hand_v0.5.lsl b/huffware/huffotronic_tools_n_testers_v6.1/Hour_Hand_v0.5.lsl new file mode 100755 index 00000000..7027c395 --- /dev/null +++ b/huffware/huffotronic_tools_n_testers_v6.1/Hour_Hand_v0.5.lsl @@ -0,0 +1,109 @@ + +// 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); + } +} +