#pragma once #include #include namespace td { namespace utils { std::uint64_t getTime(); typedef std::function TimerExecFunction; // utililty class to call function at regular period of time class Timer{ private: std::uint64_t m_Interval; TimerExecFunction m_Function; std::uint64_t m_LastTime = getTime(); std::uint64_t m_InternalTime = 0; public: Timer() : m_Interval(0), m_Function(nullptr){} Timer(std::uint64_t interval) : m_Interval(interval), m_Function(nullptr){} Timer(std::uint64_t interval, TimerExecFunction callback) : m_Interval(interval), m_Function(callback){} void update(); void update(std::uint64_t delta); void reset(); void setInterval(std::uint64_t newInterval){m_Interval = newInterval;} std::uint64_t getInterval() const{return m_Interval;} void setCallbackFunction(TimerExecFunction newCallback){m_Function = newCallback;} TimerExecFunction getCallbackFunction() const{return m_Function;} }; } // namespace utils } // namespace td