X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Flayout.cpp;h=b847637fab797481a34225ccf88dea9a2d29ceb4;hb=dd05e8ed55a9072daaf18e4c63c3b66e386ba7f4;hp=46a43a8353fffd8cccc266f418dbaa7bb117bcd3;hpb=9f4f169affcedcf249e935f93e0a15ed60232f6a;p=r2c2.git diff --git a/source/libr2c2/layout.cpp b/source/libr2c2/layout.cpp index 46a43a8..b847637 100644 --- a/source/libr2c2/layout.cpp +++ b/source/libr2c2/layout.cpp @@ -5,6 +5,7 @@ #include #include #include +#include "beamgate.h" #include "block.h" #include "catalogue.h" #include "driver.h" @@ -104,6 +105,12 @@ void Layout::add(Sensor &s) } } +void Layout::add(BeamGate &g) +{ + add(static_cast(g)); + add(static_cast(g)); +} + template<> const set &Layout::get_all() const { @@ -164,6 +171,12 @@ const set &Layout::get_all() const return sensors.get(); } +template<> +const set &Layout::get_all() const +{ + return sensors.get(); +} + template T *Layout::pick(const Ray &ray) { @@ -208,6 +221,12 @@ void Layout::remove(Sensor &s) sensors.erase(s); } +void Layout::remove(BeamGate &g) +{ + remove(static_cast(g)); + remove(static_cast(g)); +} + unsigned Layout::allocate_turnout_id() { set used_ids; @@ -390,6 +409,14 @@ void Layout::save(const string &fn) const writer.write(st); } + const set &gates = objects.get(); + for(set::const_iterator i=gates.begin(); i!=gates.end(); ++i) + { + DataFile::Statement st("beamgate"); + (*i)->save(st.sub); + writer.write(st); + } + const set &routes = track_chains.get(); for(set::const_iterator i=routes.begin(); i!=routes.end(); ++i) { @@ -435,10 +462,7 @@ void Layout::sensor_state_changed(Sensor &sensor, Sensor::State state) { if(state==Sensor::ACTIVE) { - Block *block = 0; - if(TrackCircuit *tc = dynamic_cast(&sensor)) - block = &tc->get_block(); - + Block *block = sensor.get_block(); if(block && !block->get_train()) emergency(format("Unreserved sensor %d triggered", sensor.get_address())); } @@ -503,29 +527,24 @@ Layout::Loader::Loader(Layout &l): new_tracks(false) { add("base", &Layout::base); - add("route", static_cast(&Loader::route)); + add("beamgate", &Loader::beamgate); + add("route", &Loader::route); add("signal", &Loader::signal); - add("track", static_cast(&Loader::track)); - add("train", static_cast(&Loader::train)); + add("track", &Loader::track); + add("train", &Loader::train); add("turnout", &Loader::turnout); add("zone", &Loader::zone); - - // Deprecated aliases - add("route", static_cast(&Loader::route)); - add("track", static_cast(&Loader::track)); - add("train", static_cast(&Loader::train)); } -void Layout::Loader::route() +void Layout::Loader::beamgate() { - Route *rte = new Route(obj); - load_sub(*rte); + BeamGate *gate = new BeamGate(obj); + load_sub(*gate); } -void Layout::Loader::route(const string &n) +void Layout::Loader::route() { Route *rte = new Route(obj); - rte->set_name(n); load_sub(*rte); } @@ -535,11 +554,6 @@ void Layout::Loader::signal(ArticleNumber art_nr) load_sub(*sig); } -void Layout::Loader::track(unsigned art_nr) -{ - track(ArticleNumber(art_nr)); -} - void Layout::Loader::track(ArticleNumber art_nr) { Track *trk = new Track(obj, obj.catalogue.get_track(art_nr)); @@ -551,11 +565,6 @@ void Layout::Loader::track(ArticleNumber art_nr) trk->link_to(**i); } -void Layout::Loader::train(unsigned art_nr, unsigned addr, const std::string &proto) -{ - train(ArticleNumber(art_nr), addr, proto); -} - void Layout::Loader::train(ArticleNumber art_nr, unsigned addr, const std::string &proto) { Train *trn = new Train(obj, obj.catalogue.get_vehicle(art_nr), addr, proto);