if(layout.has_driver())
{
Driver &driver = layout.get_driver();
- driver.add_turnout(turnout_addr, type);
+ turnout_id = driver.add_turnout(turnout_addr, type);
driver.signal_turnout.connect(sigc::mem_fun(this, &Track::turnout_event));
}
}
Track::~Track()
{
break_links();
- if(layout.has_driver() && turnout_addr)
- layout.get_driver().remove_turnout(turnout_addr);
+ if(layout.has_driver() && turnout_id)
+ layout.get_driver().remove_turnout(turnout_id);
layout.remove(*this);
}
Driver *driver = (layout.has_driver() ? &layout.get_driver() : 0);
- if(driver && turnout_addr)
- driver->remove_turnout(turnout_addr);
+ if(driver && turnout_id)
+ driver->remove_turnout(turnout_id);
turnout_addr = a;
layout.create_blocks(*this);
layout.update_routes();
if(driver && turnout_addr)
- driver->add_turnout(turnout_addr, type);
+ turnout_id = driver->add_turnout(turnout_addr, type);
+ else
+ turnout_id = 0;
}
void Track::set_sensor_address(unsigned a)
void Track::set_active_path(unsigned p)
{
- if(!turnout_addr)
+ if(!type.is_turnout())
throw logic_error("not a turnout");
if(!(type.get_paths()&(1<<p)))
throw invalid_argument("Track::set_active_path");
signal_path_changing(p);
path_changing = true;
- layout.get_driver().set_turnout(turnout_addr, p);
+ layout.get_driver().set_turnout(turnout_id, p);
}
float Track::get_path_length(int p) const
st.push_back((DataFile::Statement("flex"), true));
}
-void Track::turnout_event(unsigned addr, unsigned state)
+void Track::turnout_event(unsigned id, unsigned state)
{
- if(addr==turnout_addr)
+ if(id==turnout_id)
{
active_path = state;
path_changing = false;