From 72e45f0062d727cedd576d1e1251f6722454a119 Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 12 Nov 2018 08:04:11 +0800 Subject: =?UTF-8?q?*=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=A0=81=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libjin/Time/je_timer.cpp | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) (limited to 'src/libjin/Time/je_timer.cpp') 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::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) -- cgit v1.1-26-g67d0