X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fapp%2FTimer.h;h=13f48f3d7d38ec884c38234fc4fdc7355e1f990c;hb=8add322195bf2f619ba61bfea4335d28627b0b68;hp=2d6326f76576c582bb36d2c49a3ee49e4cbdb2ed;hpb=e559a146d268996a3367e370213b09a3b190e0bc;p=l2e.git diff --git a/src/app/Timer.h b/src/app/Timer.h index 2d6326f..13f48f3 100644 --- a/src/app/Timer.h +++ b/src/app/Timer.h @@ -17,13 +17,14 @@ namespace app { template struct TimerData { - TimerData() : time(0), target(0), refCount(0), justHit(false) { } - TimerData(Time target) : time(0), target(target), refCount(0), justHit(false) { } + TimerData() : time(0), target(0), refCount(0), justHit(false), repeat(false) { } + TimerData(Time target, bool repeat) : time(0), target(target), refCount(0), justHit(false), repeat(repeat) { } Time time; Time target; int refCount; bool justHit; + bool repeat; }; @@ -47,11 +48,14 @@ public: } public: - bool Running() const { + bool Started() const { return data; } bool Finished() const { - return data ? data->time >= data->target : false; + return data && data->target != Time() && !data->repeat && data->time >= data->target; + } + bool Running() const { + return data && !Finished(); } Time Elapsed() const { return data ? data->time : Time(); @@ -60,21 +64,27 @@ public: return data ? (data->target - data->time) : Time(); } int Iteration() const { - return (data && data->target > 0) ? std::floor(data->time / data->target) : 0; + return (data && data->target > Time()) ? std::floor(data->time / data->target) : Time(); } bool JustHit() const { return data && data->justHit; } + void Clear() { + if (data) { + --data->refCount; + data = 0; + } + } void Reset() { - if (data) data->time = 0; + if (data) data->time = Time(); } void Restart() { if (data) { - if (data->target > 0 && data->justHit) { + if (data->target > Time() && data->justHit) { data->time -= data->target; } else { - data->time = 0; + data->time = Time(); } } } @@ -94,10 +104,9 @@ public: public: void Update(Time delta) { for (typename std::list >::iterator i(data.begin()), end(data.end()); i != end;) { - TimerData