X-Git-Url: https://feistymeow.org/gitweb/?a=blobdiff_plain;f=huffware%2Fhuffotronic_jaunter_updater%2Fjaunter_button_pusher_v0.8.txt;fp=huffware%2Fhuffotronic_jaunter_updater%2Fjaunter_button_pusher_v0.8.txt;h=9b5e315f3ca88814dcf6e5f56b605f2f59f7654d;hb=0d8edb6dc63fa915c775b005830084935f75174c;hp=0000000000000000000000000000000000000000;hpb=29190d88923f6281801872a80811faf6c2d7943e;p=feisty_meow.git diff --git a/huffware/huffotronic_jaunter_updater/jaunter_button_pusher_v0.8.txt b/huffware/huffotronic_jaunter_updater/jaunter_button_pusher_v0.8.txt new file mode 100755 index 00000000..9b5e315f --- /dev/null +++ b/huffware/huffotronic_jaunter_updater/jaunter_button_pusher_v0.8.txt @@ -0,0 +1,123 @@ + +// huffware script: jaunter button pusher, by fred huffhines +// +// the button pusher script warped into service for jaunters. +// +// 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. +// + +string JAUNT_NEXT_BUTTON_NAME = "next"; +string JAUNT_MENU_BUTTON_NAME = "menu"; + +// the button pushing API. +////////////// +integer BUTTON_PUSHER_HUFFWARE_ID = 10029; + // a unique ID within the huffware system for this script. +string HUFFWARE_PARM_SEPARATOR = "{~~~}"; + // this pattern is an uncommon thing to see in text, so we use it to separate + // our commands in link messages. +string HUFFWARE_ITEM_SEPARATOR = "{|||}"; + // used to separate lists of items from each other when stored inside a parameter. + // this allows lists to be passed as single string parameters if needed. +integer REPLY_DISTANCE = 100008; // offset added to service's huffware id in reply IDs. +////////////// +string BUTTON_PUSHED_ALERT = "#btnp"; + // this event is generated when the button is pushed. the number parameter will be + // the huffware id plus the reply distance. the id parameter in the link message will + // contain the name of the button that was pushed. +////////////// + +float MENU_TIMER_FOR_TOUCH = 0.8; // click hold delay before we decide they want the menu. + +key last_toucher; // the last person who touched the jaunter. + +integer sent_menu_event = FALSE; // true when we just sent out a menu event. + +////////////// + +handle_timer() +{ + if (last_toucher != NULL_KEY) { +//log_it("decided to send menu event!"); + // this is a timer elapsing for a touch-hold menu event. + send_menu_button_event(); + last_toucher = NULL_KEY; + llSetTimerEvent(0.0); + sent_menu_event = TRUE; + return; + } +} + +// generates our next button alert, once the user has finished clicking on the button. +send_next_button_event() +{ + llMessageLinked(LINK_SET, BUTTON_PUSHER_HUFFWARE_ID + REPLY_DISTANCE, + BUTTON_PUSHED_ALERT, JAUNT_NEXT_BUTTON_NAME); +} + +// tells the jaunter to show the menu of places. +send_menu_button_event() +{ + llMessageLinked(LINK_SET, BUTTON_PUSHER_HUFFWARE_ID + REPLY_DISTANCE, + BUTTON_PUSHED_ALERT, wrap_parameters([JAUNT_MENU_BUTTON_NAME, last_toucher])); +} + + +////////////// +// from hufflets... + +integer debug_num = 0; + +// a debugging output method. can be disabled entirely in one place. +log_it(string to_say) +{ + debug_num++; + // tell this to the owner. + llOwnerSay(llGetScriptName() + "[" + (string)debug_num + "] " + to_say); + // say this on open chat, but use an unusual channel. +// llSay(108, (string)debug_num + "- " + to_say); +} + +string wrap_parameters(list to_flatten) +{ return llDumpList2String(to_flatten, HUFFWARE_PARM_SEPARATOR); } + +/////////////// + +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() + { + } + + touch_start(integer total_number) { + if (llDetectedLinkNumber(0) != llGetLinkNumber()) return; +//log_it("touch start"); + llSetTimerEvent(MENU_TIMER_FOR_TOUCH); + // how long before "hold touch" kicks in and we show the destination menu. + last_toucher = llDetectedKey(0); + } + + timer() { handle_timer(); } + + touch_end(integer total_number) + { + if (llDetectedLinkNumber(0) != llGetLinkNumber()) return; +//log_it("touch end"); + if (sent_menu_event) { + // don't send a click event if we popped the menu. + sent_menu_event = FALSE; + return; + } + // clear timer since we got to here. + llSetTimerEvent(0.0); + last_toucher = NULL_KEY; + send_next_button_event(); + } +}