]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/clock.cpp
Add an option to set simulation speed
[r2c2.git] / source / libr2c2 / clock.cpp
index 1f467e81ba32369d3640693f24acf7e0b2c4e81c..286ce966873af6b6735398ba1e5908f879460eda 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)
@@ -18,8 +20,16 @@ void Clock::set_current_time(const Time::TimeDelta &t)
        current_time = t;
 }
 
+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)
@@ -29,4 +39,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