Difference between revisions of "LlSetTimerEvent"

From Second Life Wiki
Jump to navigation Jump to search
m (added info about timers in different states and edited example script to include PUBLIC_CHANNEL when talking on channel 0)
Line 13: Line 13:
*The timer persists across state changes, but gets removed when the script is reset
*The timer persists across state changes, but gets removed when the script is reset
|constants
|constants
|examples=<lsl>float gap = 2.0;
|examples=
integer counter = 0;
{{Warning|Timers inside Second Life are either running, when you set the time inside the [[llSetTimerEvent]] function call to a positive float, or they are not running, when you set the time inside the [[llSetTimerEvent]] function call to 0.0. Each state in your script only has one timer, and timers keep running even when switching states. For the sake of readability I personally tend to write llSetTimerEvent( (float)FALSE ); when stopping a timer, because I read it as "stop timer". Some other scripters will argue though, that 0.0 will be just fine too and I'm crazy.}}
<lsl>
// default of counter is 0 upon script load
integer counter;


default
default
Line 20: Line 23:
     state_entry()
     state_entry()
     {
     {
         // Activate the timer listener every 2 seconds
         // llResetTime();
        llSetTimerEvent(gap);
 
         llResetTime();
         llSetTimerEvent(2.0);
     }
     }


     touch_start(integer total_number)
     touch_start(integer total_number)
     {
     {
         llSay(0, "The timer stops.");
        // PUBLIC_CHANNEL has the integer value 0
         llSetTimerEvent(0);
         llSay(PUBLIC_CHANNEL, "The timer stops.");
 
         llSetTimerEvent(0.0);
         counter = 0;
         counter = 0;
     }
     }
Line 35: Line 40:
     {
     {
         ++counter;  
         ++counter;  
         llSay(0, (string)counter+" ticks have passed in " + (string)llGetTime()  
         llSay(PUBLIC_CHANNEL,
                + " script seconds.\nEstimated elapsed time: " + (string)(counter * gap));
            (string)counter+" ticks have passed in " + (string)llGetTime()  
            + " script seconds.\nEstimated elapsed time: " + (string)(counter * gap));
     }
     }
}</lsl>
}
</lsl>
|helpers
|helpers
|also_functions=
|also_functions=

Revision as of 12:12, 5 October 2012

Summary

Function: llSetTimerEvent( float sec );
0.0 Forced Delay
10.0 Energy

Cause the timer event to be triggered a maximum of once every sec seconds. Passing in 0.0 stops further timer events.

• float sec Any positive non-zero value to enable, zero (0.0) to disable.

Caveats

  • The time between timer events can be longer, this is caused by:
  • The timer persists across state changes, but gets removed when the script is reset

Examples

Warning!

Timers inside Second Life are either running, when you set the time inside the llSetTimerEvent function call to a positive float, or they are not running, when you set the time inside the llSetTimerEvent function call to 0.0. Each state in your script only has one timer, and timers keep running even when switching states. For the sake of readability I personally tend to write llSetTimerEvent( (float)FALSE ); when stopping a timer, because I read it as "stop timer". Some other scripters will argue though, that 0.0 will be just fine too and I'm crazy.

<lsl> // default of counter is 0 upon script load integer counter;

default {

   state_entry()
   {
       // llResetTime();
       llSetTimerEvent(2.0);
   }
   touch_start(integer total_number)
   {
       // PUBLIC_CHANNEL has the integer value 0
       llSay(PUBLIC_CHANNEL, "The timer stops.");
       llSetTimerEvent(0.0);
       counter = 0;
   }
   timer()
   {
       ++counter; 
       llSay(PUBLIC_CHANNEL,
           (string)counter+" ticks have passed in " + (string)llGetTime() 
           + " script seconds.\nEstimated elapsed time: " + (string)(counter * gap));
   }

}

</lsl>

Notes

See Also

Events

•  timer

Functions

•  llSensorRepeat
•  llGetRegionTimeDilation
•  llGetTime

Deep Notes

Signature

function void llSetTimerEvent( float sec );