X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Fclock.cpp;h=6812aeba109bb05f10f3038c30ac19777a88dc39;hb=dfeb2d2896fe18e55b1f6c4a8028b7cfb878dede;hp=890b2b2cecb411bdd0b20728fadfe25951ed292a;hpb=3f50c821de14b8deab2374810bf974908e6681e8;p=r2c2.git diff --git a/source/libr2c2/clock.cpp b/source/libr2c2/clock.cpp index 890b2b2..6812aeb 100644 --- a/source/libr2c2/clock.cpp +++ b/source/libr2c2/clock.cpp @@ -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 &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(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