multiple timers

Soen Eber

Vatican mole
VVO Supporter 🍦🎈👾❤
Joined
Sep 20, 2018
Messages
3,393
It's a simple solution: set a timer for every second, and create an alarm variable which, when assigned, has the interval added to the current time. When the current time matches the alarm time, the alarm goes off. Multiple alarms can be tested for within the timer event. Alarms which are not set (have a value of 0) are not tested unless previously set [such as setting an alarm for dialog time-out].

Code:
integer event_a_alarm;
integer event_b_alarm;
integer start;
integer running = FALSE;

init()
{
    event_a_alarm = llGetUnixTime()+3;
    event_b_alarm = llGetUnixTime()+5;
    start = llGetUnixTime();
    llSetTimerEvent(1.0);
}
default
{
    touch_start(integer total_number)
    {
        running = !running;
        if (running) {
            llSay(0, "on");
            init();
        }
        else {
            llSay(0, "off");
            llSetTimerEvent(0);
        }
    }
    timer()
    {
        string s = (string)(llGetUnixTime() - start);
        if ((event_a_alarm) && (llGetUnixTime() >= event_a_alarm)) {
            s += " A";
            event_a_alarm = llGetUnixTime()+3;
        }
        if ((event_b_alarm) && (llGetUnixTime() >= event_b_alarm)) {
            s += " B";
            event_b_alarm = llGetUnixTime()+5;
        }
        if (llStringLength(s) > 2) {
            llSay(0,s);
        }
    }
}
result when touched: A=every 3 seconds, B=every 5 seconds.
[08:51] Object: on
[08:51] Object: 3 A
[08:51] Object: 5 B
[08:51] Object: 6 A
[08:51] Object: 9 A
[08:51] Object: 10 B
[08:51] Object: 12 A
[08:51] Object: 15 A B
[08:51] Object: 18 A
[08:51] Object: 20 B
[08:51] Object: 21 A
[08:51] Object: off
 
Last edited:

Innula Zenovka

Nasty Brit
VVO Supporter 🍦🎈👾❤
Joined
Sep 20, 2018
Messages
21,220
SLU Posts
18459
You could simplify it a bit, thus:

Code:
integer iCounter;
default
{

    touch_start(integer total_number)
    {
        llResetTime();
        llSetTimerEvent(1.0);
    }

    timer()
    {
        ++iCounter;

        if (iCounter%3 == 0){
            llOwnerSay("3 second timer:"+(string)llGetTime());
        }
        if (iCounter%5 == 0){
            llOwnerSay("5 second timer:"+(string)llGetTime());
        }
    }
}
 
  • 1Thanks
Reactions: Soen Eber