40 lines
1.1 KiB
C++
40 lines
1.1 KiB
C++
#include <chrono>
|
|
#include <functional>
|
|
#include <memory>
|
|
#include <string>
|
|
#include <utility>
|
|
#include "timer.hpp"
|
|
|
|
using namespace std::chrono;
|
|
using namespace std;
|
|
|
|
Timer::Timer(size_t triggeramount, function<bool()> myaction, milliseconds triggerinterval)
|
|
:triggeramount(triggeramount), timeraction(myaction), triggerinterval(triggerinterval) {}
|
|
|
|
void Timer::add_time(milliseconds deltatime) {
|
|
accumulator += deltatime;
|
|
if (accumulator >= triggerinterval) {
|
|
accumulator -= triggerinterval;
|
|
timeraction();
|
|
triggercount++;
|
|
if (!isinfinite && triggercount >= triggeramount){
|
|
isexpired=true;
|
|
}
|
|
}
|
|
};
|
|
|
|
void TimerManager::add_timer(size_t triggeramount, function<bool()> myaction, std::chrono::milliseconds triggerinterval) {
|
|
Timer mynewtimer(triggeramount, myaction, triggerinterval);
|
|
timers.push_back(mynewtimer);
|
|
};
|
|
|
|
void TimerManager::update_timers() {
|
|
steady_clock::time_point currenttime =
|
|
steady_clock::now();
|
|
milliseconds deltatime = duration_cast<milliseconds>(currenttime-previoustime);
|
|
for(Timer &mytimer: timers){
|
|
mytimer.add_time(deltatime);
|
|
}
|
|
previoustime = currenttime;
|
|
}
|