ECSTASY
All in the name
Loading...
Searching...
No Matches
Timer.cpp
Go to the documentation of this file.
1
11
12#include "Timer.hpp"
13#include <stdexcept>
14
15namespace ecstasy
16{
18 {
20 setRate(0);
21 }
22
24 {
25 setInterval(interval);
26 }
27
29 {
30 setRate(rate);
31 }
32
33 void Timer::setRate(std::uint32_t rate) noexcept
34 {
35 _type = Type::Rate;
36 if (rate == 0) {
37 rate = 1;
38 }
39 _rate.rate = rate;
40 // Reset the countdown to trigger to run the first time
41 _rate.triggerCountdown = 0;
42 }
43
45 {
46 if (_type != Type::Rate)
47 throw std::runtime_error("Timer is not of type Rate");
48 return _rate.rate;
49 }
50
51 void Timer::setInterval(Timer::Interval interval) noexcept
52 {
53 _type = Type::TimeInterval;
54 _timer.interval = interval;
55 }
56
58 {
60 throw std::runtime_error("Timer is not of type Rate");
61 return _timer.interval;
62 }
63
64 bool Timer::trigger() noexcept
65 {
66 switch (_type) {
67 case Type::TimeInterval: {
69
70 if (tp - _timer.interval >= _lastTrigger) {
71 _lastTrigger = tp;
72 return true;
73 }
74 return false;
75 }
76 case Type::Rate: {
77 if (_rate.triggerCountdown == 0) {
80 return true;
81 }
83 return false;
84 }
85 }
86 return false;
87 }
88} // namespace ecstasy
Timer class to control the execution of systems.
Definition Timer.hpp:32
bool trigger() noexcept
Trigger the timer if it is time to do so.
Definition Timer.cpp:64
void setRate(std::uint32_t rate) noexcept
Set the Rate of the timer.
Definition Timer.cpp:33
TimePoint _lastTrigger
Last time the timer was triggered.
Definition Timer.hpp:219
void setInterval(Interval interval) noexcept
Set the Interval of the timer.
Definition Timer.cpp:51
Timer()
Construct a new Timer.
Definition Timer.cpp:17
TimeInterval _timer
Definition Timer.hpp:222
std::uint32_t getRate() const
Get the Rate of the timer.
Definition Timer.cpp:44
Interval getInterval() const
Get the Interval of the timer.
Definition Timer.cpp:57
@ TimeInterval
Timer that triggers every time interval. Ex: every 5 seconds.
@ Rate
Timer that triggers at a fixed rate. Ex: every 5 frames.
Type _type
Type of the timer.
Definition Timer.hpp:217
Namespace containing all symbols specific to ecstasy.
Definition ecstasy.hpp:30
std::uint32_t rate
Definition Timer.hpp:45
std::uint32_t triggerCountdown
Definition Timer.hpp:46