aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/Time/je_timer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/Time/je_timer.cpp')
-rw-r--r--src/libjin/Time/je_timer.cpp31
1 files changed, 19 insertions, 12 deletions
diff --git a/src/libjin/Time/je_timer.cpp b/src/libjin/Time/je_timer.cpp
index 8c48634..3315abf 100644
--- a/src/libjin/Time/je_timer.cpp
+++ b/src/libjin/Time/je_timer.cpp
@@ -20,17 +20,21 @@ namespace JinEngine
delete mHandlers[i];
}
- void Timer::update(int ms)
+ void Timer::update(float dt)
{
// Process handler.
std::vector<Handler*>::iterator it = mHandlers.begin();
for (; it != mHandlers.end(); ++it)
- (*it)->process(ms);
+ (*it)->process(dt);
// Erase canceled handler.
for (it = mHandlers.begin(); it != mHandlers.end();)
{
if ((*it)->canceled)
+ {
+ Handler* h = *it;
it = mHandlers.erase(it);
+ delete h;
+ }
else
++it;
}
@@ -48,28 +52,28 @@ namespace JinEngine
cancel(h);
}
- Timer::Handler* Timer::every(int ms, TimerCallback callback, void* p)
+ Timer::Handler* Timer::every(float dt, TimerCallback callback, void* p, FinishCallback finish)
{
- Handler* t = new Handler(Handler::EVERY, ms, 0, callback, p);
+ Handler* t = new Handler(Handler::EVERY, dt, 0, callback, p, finish);
mHandlers.push_back(t);
return t;
}
- Timer::Handler* Timer::after(int ms, TimerCallback callback, void* p)
+ Timer::Handler* Timer::after(float dt, TimerCallback callback, void* p, FinishCallback finish)
{
- Handler* t = new Handler(Handler::AFTER, ms, 0, callback, p);
+ Handler* t = new Handler(Handler::AFTER, dt, 0, callback, p, finish);
mHandlers.push_back(t);
return t;
}
- Timer::Handler* Timer::repeat(int ms, int count, TimerCallback callback, void* p)
+ Timer::Handler* Timer::repeat(float dt, int count, TimerCallback callback, void* p, FinishCallback finish)
{
- Handler* t = new Handler(Handler::REPEAT, ms, count, callback, p);
+ Handler* t = new Handler(Handler::REPEAT, dt, count, callback, p, finish);
mHandlers.push_back(t);
return t;
}
- Timer::Handler::Handler(Type t, int d, int c, TimerCallback f, void* p)
+ Timer::Handler::Handler(Type t, float d, int c, TimerCallback f, void* p, FinishCallback finishcallback)
: type(t)
, duration(d)
, count(c)
@@ -78,19 +82,22 @@ namespace JinEngine
, callback(f)
, paramters(p)
, canceled(false)
+ , finishCallback(finishcallback)
{
}
Timer::Handler::~Handler()
{
+ if (finishCallback)
+ finishCallback(paramters);
}
- void Timer::Handler::process(int ms)
+ void Timer::Handler::process(float dt)
{
- tickdown -= ms;
+ tickdown -= dt;
if (tickdown <= 0)
{
- tickdown = duration;
+ tickdown += duration;
if (!canceled && callback != nullptr)
callback(paramters);
if (type == EVERY)