+ if(reverse)
+ {
+ unsigned exit = block.traverse(entry);
+ const Block::Endpoint &bep = block.get_endpoints()[exit];
+ Track *track = bep.track->get_link(bep.track_ep);
+ unsigned ep = track->get_endpoint_by_link(*bep.track);
+ vehicles.front()->place(*track, ep, 0, Vehicle::FRONT_BUFFER);
+ }
+ else
+ {
+ const Block::Endpoint &bep = block.get_endpoints()[entry];
+ vehicles.back()->place(*bep.track, bep.track_ep, 0, Vehicle::BACK_BUFFER);
+ }
+}
+
+void Train::unplace()
+{
+ if(controller->get_speed())
+ throw InvalidState("Must be stopped before unplacing");
+
+ release_blocks(rsv_blocks);
+ release_blocks(cur_blocks);
+
+ set_active(false);
+ accurate_position = false;