]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/clock.cpp
Sync timetable on clock discontinuity
[r2c2.git] / source / libr2c2 / clock.cpp
index 890b2b2cecb411bdd0b20728fadfe25951ed292a..6812aeba109bb05f10f3038c30ac19777a88dc39 100644 (file)
@@ -1,11 +1,13 @@
 #include "clock.h"
 
+using namespace std;
 using namespace Msp;
 
 namespace R2C2 {
 
 Clock::Clock():
-       rate(1)
+       rate(1),
+       stopped(false)
 { }
 
 void Clock::set_rate(float s)
@@ -13,8 +15,22 @@ void Clock::set_rate(float s)
        rate = s;
 }
 
+void Clock::set_current_time(const Time::TimeDelta &t)
+{
+       current_time = t;
+       signal_discontinuity.emit();
+}
+
+void Clock::stop(bool s)
+{
+       stopped = s;
+}
+
 void Clock::tick(const Time::TimeDelta &dt)
 {
+       if(stopped)
+               return;
+
        unsigned prev_minute = current_time/Time::min;
        current_time += dt*rate;
        if(current_time>=Time::day)
@@ -24,4 +40,23 @@ void Clock::tick(const Time::TimeDelta &dt)
                signal_minute.emit();
 }
 
+void Clock::save(list<DataFile::Statement> &st) const
+{
+       st.push_back((DataFile::Statement("rate"), rate));
+       st.push_back((DataFile::Statement("time"), current_time.raw()));
+}
+
+
+Clock::Loader::Loader(Clock &c):
+       DataFile::ObjectLoader<Clock>(c)
+{
+       add("rate", &Clock::rate);
+       add("time", &Loader::time);
+}
+
+void Clock::Loader::time(Time::RawTime t)
+{
+       obj.set_current_time(Time::TimeDelta(t));
+}
+
 } // namespace R2C2