X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fapp%2FIntervalTimer.hpp;h=5240f5d3f60a419e8593b5e883dab9fd5c8e8d1c;hb=07b8335e7bfd631e0878e183c87238812d632c56;hp=e5d02481e676d9c618388b626b9931f8caf6fc5a;hpb=b7d09e1e35ef90282c97509e0020b20db3c7ea9f;p=blank.git diff --git a/src/app/IntervalTimer.hpp b/src/app/IntervalTimer.hpp index e5d0248..5240f5d 100644 --- a/src/app/IntervalTimer.hpp +++ b/src/app/IntervalTimer.hpp @@ -4,10 +4,16 @@ namespace blank { +/// Timer that hits every n milliseconds. Resolution is that of the +/// delta values passed to Update(), minimum 1ms. +/// Also tracks the number of iterations as well as milliseconds +/// passed. class IntervalTimer { public: - explicit IntervalTimer(int interval_ms) noexcept + /// Create a timer that hits every interval_ms milliseconds. + /// Initial state is stopped. + explicit IntervalTimer(int interval_ms = 0) noexcept : intv(interval_ms) { } void Start() noexcept { @@ -17,19 +23,32 @@ public: value = 0; speed = 0; } + void Reset() noexcept { + value = 0; + } bool Running() const noexcept { return speed != 0; } + /// true if an interval boundary was passed by the last call to Update() bool Hit() const noexcept { return Running() && value % intv < last_dt; } + bool HitOnce() const noexcept { + return Running() && value >= intv; + } int Elapsed() const noexcept { return value; } + int Interval() const noexcept { + return intv; + } int Iteration() const noexcept { return value / intv; } + void PopIteration() noexcept { + value -= intv; + } void Update(int dt) noexcept { value += dt * speed;