Chronos manages time. You can schedule a function to be called in X seconds, with or without an id. You can request a timer, which tracks the elapsed duration since the timer was started.
Chronos provides functionality that makes tracking timed tasks and distributed tasks easier. This addon is a function library. This means that it doesn't have any UI on it's own, but rather provides functionality for other addons. If you are an addon user and not an addon developer all you need to do is to leave this addon turned on if you have any other addons that depend on it.
Chronos.schedule(10, foo, "a");
Will call foo("a") in 10 seconds.
Note: Do not include () after your function name, which coders tend do to often like Chronos.schedule(10, foo'''()''', "a"); this causes your function to be called immediately and Chronos will try to "call" the return value of your function after the specified interval (which is not neccesarily bad if your function returns a function...)
afterInit - runs a function after the game starts.
schedule - schedules a function to be called after a delay
scheduleByName - schedules a function to be called after a delay by name
scheduleRepeating - schedules a function to be called repetedly every X seconds
|unscheduleByName - unschedules a function created by scheduleByName or scheduleRepeating
isScheduledByName - determines if a function is scheduled already by scheduleByName or scheduleRepeating
startTimer - starts a timer
getTimer - returns the amount of time since the timer was started
endTimer - ends a timer and returns the amount of time since the timer was started
Chronos.scheduleByName("TEST", 120, bar, "a");
Chronos.scheduleByName("TEST", 12, bar, "a");
Will call bar("a") after 12 seconds (overwriting the first timer).
(performTask was removed in v2.01 of Chronos)
begin = function() Sea.io.print("Hello!"); setglobal("a", 0); end;
step = function() Sea.io.print(getglobal("a")); setglobal("a", getglobal("a")+1); end;
end = function() Sea.io.print("Bye!"); end;
isDone = function() return ( getglobal("a") > 50 ) end;
But it will do it over the course of 50 frames. Properly used, this can prevent "choppiness" and make a cpu intensive mod much much better.
Chronos was initially developed by AlexanderYoshi, with help from Thott.
Redesigned by AnduinLothar.
If you wish to contribute improvements, please use the addon comments.
- Updated toc to 30000
- Updated toc to 20400
- Added Spanish localization
- Fixed table recycling so that it isn't nilling passed argument values (only does a shallow recycle on known safe tables)
- Fixed t.arg typo that was causing some events not to fire
- Updated for Lua 5.1
- Converted all a1-a20 args to ... usages since it now does not create a table.
- Embeddable/Standalone version, reverse compatible as always.
- Rearanged code to be more organized, no version change.
- Cleaned up OO code
- Removed completely unused threading (performTask) and global onupdate (everyFrame) - Backwards compatible with all other calls. If someone actually used those, let me know! I might make them optional if registered.
- Increased execution speed with less OnUpdate code
- Moved afterInit to after the chat channels have spammed their color changing.
- Updated toc to 11000
- REALLY fixed 'next' error. For future refrence it was incurred by removing the current key/value pair from a table while itterating over it with a for loop. Unfortunetly no one wrote this down before, so the sam problem someone else fixed was recreated on accident in an attempt to make more efficient. '''(CORRECT)'''
- Merged the repeating and byName lists for OnUpdate efficiency. (Note: this also means scheduleByName and scheduleRepeating can no longer have the same names)
- Added Chronos.flushByName(name, when) - Updates the ByName or Repeating event to flush at the time specified. If no time is specified flush will be immediate. If it is a Repeating event the timer will be reset.
- Added Chronos.debug(booleanEnable) for debugging. This also means that the normal OnUpdate function has been shortened and is now slimmer/quicker.
- unscheduleRepeating and isScheduledRepeating now mirror unscheduleByName and isScheduledByName for backwards compatibility.
- Fixed 'next' error that was cropping up in the for loops when niling before calling a local var. '''(INCORRECT)'''
- Fixed index number bug '''(INCORRECT)'''
- Fixed invalid key for 'next' bug. '''(INCORRECT)'''
- No longer requires Sea
- Updated TOC file loading method
- Made schedule calls a tad more efficient
- converted OnUpdate while loops into for loops for efficiency
- Added Chronos.scheduleRepeating(name, delay, function) which calls functions (without arguments) every X (delay) seconds. Useful for simulating OnUpdate for efficency (ex delay of .1 would call the function 10x/sec). Recall this function to update the time. (ex Chronos.scheduleRepeating(name, delay) )
- Added the Chronos.unscheduleRepeating(name)
- Added Chronos.IsScheduledRepeating(name)
- Updated TOC to 1800