diff options
Diffstat (limited to 'src/libjin/Time/je_timer.cpp')
-rw-r--r-- | src/libjin/Time/je_timer.cpp | 78 |
1 files changed, 43 insertions, 35 deletions
diff --git a/src/libjin/Time/je_timer.cpp b/src/libjin/Time/je_timer.cpp index a2f2486..94ab747 100644 --- a/src/libjin/Time/je_timer.cpp +++ b/src/libjin/Time/je_timer.cpp @@ -9,52 +9,55 @@ namespace JinEngine { - Timers::Timers() - : timers() + Timer::Timer() + : mHandlers() { } - Timers::~Timers() + Timer::~Timer() { - for (int i = 0; i < timers.size(); ++i) - delete timers[i]; + for (int i = 0; i < mHandlers.size(); ++i) + delete mHandlers[i]; } - void Timers::update(int ms) + void Timer::update(int ms) { - std::vector<Timer*>::iterator it = timers.begin(); - for (; it != timers.end(); ) - { - if (!(*it)->process(ms)) - { - Timer* t = *it; - timers.erase(it); - delete t; - return; - } - ++it; - } + // Process handler. + std::vector<Handler*>::iterator it = mHandlers.begin(); + for (; it != mHandlers.end(); ++it) + (*it)->process(ms); + // Erase canceled handler. + for (it = mHandlers.begin(); it != mHandlers.end();) + { + if ((*it)->canceled) + it = mHandlers.erase(it); + else + ++it; + } } - void Timers::every(int ms, timer_callback callback, void* p) + Timer::Handler* Timer::every(int ms, TimerCallback callback, void* p) { - Timer* t = new Timer(Timer::EVERY, ms, 0, callback, p); - timers.push_back(t); + Handler* t = new Handler(Handler::EVERY, ms, 0, callback, p); + mHandlers.push_back(t); + return t; } - void Timers::after(int ms, timer_callback callback, void* p) + Timer::Handler* Timer::after(int ms, TimerCallback callback, void* p) { - Timer* t = new Timer(Timer::AFTER, ms, 0, callback, p); - timers.push_back(t); + Handler* t = new Handler(Handler::AFTER, ms, 0, callback, p); + mHandlers.push_back(t); + return t; } - void Timers::repeat(int ms, int count, timer_callback callback, void* p) + Timer::Handler* Timer::repeat(int ms, int count, TimerCallback callback, void* p) { - Timer* t = new Timer(Timer::REPEAT, ms, count, callback, p); - timers.push_back(t); + Handler* t = new Handler(Handler::REPEAT, ms, count, callback, p); + mHandlers.push_back(t); + return t; } - Timers::Timer::Timer(Type t, int d, int c, timer_callback f, void* p) + Timer::Handler::Handler(Type t, int d, int c, TimerCallback f, void* p) : type(t) , duration(d) , count(c) @@ -62,14 +65,15 @@ namespace JinEngine , countdown(c) , callback(f) , paramters(p) + , canceled(false) { } - Timers::Timer::~Timer() + Timer::Handler::~Handler() { } - bool Timers::Timer::process(int ms) + void Timer::Handler::process(int ms) { tickdown -= ms; if (tickdown <= 0) @@ -82,19 +86,23 @@ namespace JinEngine } else if (type == AFTER) { - return false; + canceled = true; } else if (type == REPEAT) { --countdown; - if (countdown <= 0) - return false; + if (countdown <= 0) + canceled = true; } } - return true; } + void Timer::cancel(Handler* handler) + { + handler->canceled = true; + } + } // namespace Time } // namespace JinEngine -#endif // defined(jin_time) +#endif // defined(jin_time)
\ No newline at end of file |