]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/clock.cpp
Use skylight for nicer lighting
[r2c2.git] / source / libr2c2 / clock.cpp
index 5f87c44a90d6f38cc78c29e3377f91f2af798ce7..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,9 +15,48 @@ 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)
+               current_time -= Time::day;
+       unsigned minute = current_time/Time::min;
+       if(minute!=prev_minute)
+               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