X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Ftimetable.cpp;h=da01b599876d03c7f18d0e1bae05eb2951e9bff5;hb=03a22611772265b539f826f1f8bc482e71ca4a99;hp=5fa36395825d0afdb6dfb92df83e76f97d3cd6cb;hpb=d990c03a06a494ce3596862ce61e2a5684dea7e1;p=r2c2.git diff --git a/source/libr2c2/timetable.cpp b/source/libr2c2/timetable.cpp index 5fa3639..da01b59 100644 --- a/source/libr2c2/timetable.cpp +++ b/source/libr2c2/timetable.cpp @@ -25,6 +25,7 @@ Timetable::Timetable(Train &t): new TrainRouter(train); train.signal_ai_event.connect(sigc::mem_fun(this, &Timetable::event)); + train.get_layout().get_clock().signal_discontinuity.connect(sigc::mem_fun(this, &Timetable::clock_discontinuity)); } void Timetable::append_row(const Row &r) @@ -88,22 +89,6 @@ void Timetable::tick(const Time::TimeDelta &dt) { if(update_pending && !train.get_block_allocator().is_active()) update_route(); - - if(current_row->type==DEPART) - { - const Clock &clock = train.get_layout().get_clock(); - - Time::TimeDelta t = clock.get_current_time(); - if(ttime) - t += Time::day; - - Time::TimeDelta b = t-dt*clock.get_rate(); - if(btime) - { - train.ai_message(Message("set-target-speed", train.get_maximum_speed())); - ++current_row; - } - } } void Timetable::save(list &st) const @@ -201,11 +186,18 @@ void Timetable::update_route() dt += Time::day; train.ai_message(Message("set-trip-duration", dt/clock.get_rate())); } + + late_arrival = false; } void Timetable::event(TrainAI &, const Message &msg) { - if(msg.type=="arrived") + if(msg.type=="departed") + { + if(current_row->type==DEPART) + ++current_row; + } + else if(msg.type=="arrived") { if(current_row->type==ARRIVE) record_time(); @@ -229,6 +221,12 @@ void Timetable::record_time() signal_row_modified.emit(i, *current_row); } +void Timetable::clock_discontinuity() +{ + update_pending = true; + sync_to_clock = true; +} + Timetable::Row::Row(): type(ARRIVE),