if(type.is_turnout())
turnout_id = layout.allocate_turnout_id();
- layout.add_track(*this);
+ layout.add(*this);
if(layout.has_driver())
layout.get_driver().signal_turnout.connect(sigc::mem_fun(this, &Track::turnout_event));
Track::~Track()
{
break_links();
- layout.remove_track(*this);
+ layout.remove(*this);
}
Track *Track::clone(Layout *to_layout) const
{
if(!type.is_turnout())
throw logic_error("not a turnout");
+ if(!i)
+ throw invalid_argument("Track::set_turnout_id");
turnout_id = i;
layout.create_blocks(*this);
return true;
}
-bool Track::collide_ray(const Vector &start, const Vector &ray) const
-{
- Transform trans = Transform::rotation(-rotation, Vector(0, 0, 1));
- Vector local_start = trans.transform(start-position);
- Vector local_ray = trans.transform(ray);
-
- float width = layout.get_catalogue().get_ballast_profile().get_width();
-
- return type.collide_ray(local_start, local_ray, width);
-}
-
void Track::save(list<DataFile::Statement> &st) const
{
st.push_back((DataFile::Statement("position"), position.x, position.y, position.z));