aboutsummaryrefslogtreecommitdiff
path: root/src/libjin
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2018-11-12 08:04:11 +0800
committerchai <chaifix@163.com>2018-11-12 08:04:11 +0800
commit72e45f0062d727cedd576d1e1251f6722454a119 (patch)
tree736594b79e71c66a668d99d96c3ce464618e50ca /src/libjin
parent7c2f33bdf37de7acf9b0728a115377081344db1c (diff)
*修改代码结构
Diffstat (limited to 'src/libjin')
-rw-r--r--src/libjin/Time/je_timer.cpp31
-rw-r--r--src/libjin/Time/je_timer.h22
2 files changed, 32 insertions, 21 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)
diff --git a/src/libjin/Time/je_timer.h b/src/libjin/Time/je_timer.h
index fabde28..31cd322 100644
--- a/src/libjin/Time/je_timer.h
+++ b/src/libjin/Time/je_timer.h
@@ -22,12 +22,14 @@ namespace JinEngine
typedef std::function<void(void*)> TimerCallback;
+ typedef std::function<void(void*)> FinishCallback;
+
///
///
///
class Handler
{
- private:
+ public:
friend class Timer;
enum Type
{
@@ -35,16 +37,18 @@ namespace JinEngine
AFTER,
REPEAT,
};
- Handler(Type type, int duration, int count = 0, TimerCallback callback = nullptr, void* paramters = nullptr);
+ Handler(Type type, float duration, int count = 0, TimerCallback callback = nullptr, void* paramters = nullptr, FinishCallback finishcallback = nullptr);
virtual ~Handler();
- void process(int ms);
+ void process(float dt);
- int duration;
+ protected:
int count;
- int tickdown;
int countdown;
+ float duration;
+ float tickdown;
Type type;
TimerCallback callback;
+ FinishCallback finishCallback;
void* paramters;
bool canceled;
};
@@ -62,22 +66,22 @@ namespace JinEngine
///
///
///
- void update(int ms);
+ void update(float dt);
///
///
///
- Handler* every(int ms, TimerCallback callback, void* paramters);
+ Handler* every(float dt, TimerCallback callback, void* paramters, FinishCallback finish);
///
///
///
- Handler* after(int ms, TimerCallback callback, void* paramters);
+ Handler* after(float dt, TimerCallback callback, void* paramters, FinishCallback finish);
///
///
///
- Handler* repeat(int ms, int count, TimerCallback callback, void* paramters);
+ Handler* repeat(float dt, int count, TimerCallback callback, void* paramters, FinishCallback finish);
///
///