HUD Button Handling

Handle button presses on the HUD by detecting the link, face and position, as well as if it was a long-click (> 2 seconds).

Do button handling outside of the state handlers

button(integer link, integer face, vector p, integer long) {
    string name = llGetLinkName(link);
    log("button() name: " + name + "  face: " + (string)face + "  pos: " + (string)p);

    if (name == "button") {
        if (face == 4) {
            // handle 5x2 buttons
            integer bx = (integer)(p.x * 5);
            integer by = (integer)(p.y * 2);

            if (bx == 0 && by == 0) {
                // bottom left
            }
            else if (bx == 0 && by == 1) {
                // top left
            }
        }
    }

    // RESET button
    if (name == "reset") {
        reset();
    }
}

Simple state handler:

    touch_start(integer total_number) {
        integer link = llDetectedLinkNumber(0);
        integer face = llDetectedTouchFace(0);
        vector pos = llDetectedTouchST(0);

        button(llGetLinkName(link), face, pos);
    }

State handler with long-click:

    touch_start(integer num) {
        llResetTime();
    }

    touch_end(integer num) {
        integer long = (llGetTime() > 2.0);

        integer link = llDetectedLinkNumber(0);
        integer face = llDetectedTouchFace(0);
        vector pos = llDetectedTouchST(0);

        button(link, face, pos, long);
    }