- 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].
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
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);
}
}
}
[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: