X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Flayout.cpp;h=fefa3e9b3fb4045e2d6ecf84280c0319fa2431ed;hb=3e3675f8d86b06cdea7df197dfe8866ffb285aec;hp=de61b1bca4d5eb7e7ed5593af108ee34a2709abb;hpb=4f2b6023dee412373a6a0b13ba4d617ffbb9bb38;p=r2c2.git diff --git a/source/libr2c2/layout.cpp b/source/libr2c2/layout.cpp index de61b1b..fefa3e9 100644 --- a/source/libr2c2/layout.cpp +++ b/source/libr2c2/layout.cpp @@ -10,6 +10,8 @@ #include "driver.h" #include "layout.h" #include "route.h" +#include "signal.h" +#include "signaltype.h" #include "track.h" #include "tracktype.h" #include "train.h" @@ -79,6 +81,18 @@ void Layout::remove_track(Track &t) } } +void Layout::add_signal(Signal &s) +{ + if(signals.insert(&s).second) + signal_signal_added.emit(s); +} + +void Layout::remove_signal(Signal &s) +{ + if(signals.erase(&s)) + signal_signal_removed.emit(s); +} + Track *Layout::pick_track(const Vector &start, const Vector &ray) { for(set::iterator i=tracks.begin(); i!=tracks.end(); ++i) @@ -270,6 +284,8 @@ void Layout::tick() for(set::iterator i=blocks.begin(); i!=blocks.end(); ++i) (*i)->tick(dt); + for(set::iterator i=signals.begin(); i!=signals.end(); ++i) + (*i)->tick(dt); for(map::iterator i=trains.begin(); i!=trains.end(); ++i) i->second->tick(t, dt); } @@ -298,6 +314,14 @@ void Layout::save(const string &fn) const writer.write(st); } + for(set::const_iterator i=signals.begin(); i!=signals.end(); ++i) + { + DataFile::Statement st("signal"); + st.append((*i)->get_type().get_article_number()); + (*i)->save(st.sub); + writer.write(st); + } + for(set::const_iterator i=routes.begin(); i!=routes.end(); ++i) { if((*i)->is_temporary()) @@ -349,6 +373,7 @@ Layout::Loader::Loader(Layout &l): { add("base", &Layout::base); add("route", static_cast(&Loader::route)); + add("signal", &Loader::signal); add("track", static_cast(&Loader::track)); add("train", static_cast(&Loader::train)); add("turnout", &Loader::turnout); @@ -379,6 +404,12 @@ void Layout::Loader::route(const string &n) load_sub(*rte); } +void Layout::Loader::signal(ArticleNumber art_nr) +{ + Signal *sig = new Signal(obj, obj.catalogue.get_signal(art_nr)); + load_sub(*sig); +} + void Layout::Loader::track(unsigned art_nr) { track(ArticleNumber(art_nr));