]> git.tdb.fi Git - r2c2.git/blob - source/libr2c2/clock.cpp
93828cb90e5d87f728b4265a3bbed3f48ca03405
[r2c2.git] / source / libr2c2 / clock.cpp
1 #include "clock.h"
2
3 using namespace std;
4 using namespace Msp;
5
6 namespace R2C2 {
7
8 Clock::Clock():
9         rate(1)
10 { }
11
12 void Clock::set_rate(float s)
13 {
14         rate = s;
15 }
16
17 void Clock::set_current_time(const Time::TimeDelta &t)
18 {
19         current_time = t;
20 }
21
22 void Clock::tick(const Time::TimeDelta &dt)
23 {
24         unsigned prev_minute = current_time/Time::min;
25         current_time += dt*rate;
26         if(current_time>=Time::day)
27                 current_time -= Time::day;
28         unsigned minute = current_time/Time::min;
29         if(minute!=prev_minute)
30                 signal_minute.emit();
31 }
32
33 void Clock::save(list<DataFile::Statement> &st) const
34 {
35         st.push_back((DataFile::Statement("rate"), rate));
36         st.push_back((DataFile::Statement("time"), current_time.raw()));
37 }
38
39
40 Clock::Loader::Loader(Clock &c):
41         DataFile::ObjectLoader<Clock>(c)
42 {
43         add("rate", &Clock::rate);
44         add("time", &Loader::time);
45 }
46
47 void Clock::Loader::time(Time::RawTime t)
48 {
49         obj.set_current_time(Time::TimeDelta(t));
50 }
51
52 } // namespace R2C2