#include <cmath>
#include <msp/strings/formatter.h>
#include "libmarklin/timetable.h"
+#include "libmarklin/trackiter.h"
#include "libmarklin/vehicletype.h"
#include "engineer.h"
#include "routeselect.h"
{
pick_conn.disconnect();
- Block &block = engineer.get_layout().get_block_by_track(*track);
+ Block &block = track->get_block();
+ TrackIter iter(track, ep);
- while(1)
+ while(block.has_track(*iter))
{
const vector<Block::Endpoint> &eps = block.get_endpoints();
bool ok = false;
for(unsigned i=0; (!ok && i<eps.size()); ++i)
- if(eps[i].track==track && eps[i].track_ep==ep)
+ if(eps[i].track==iter.track() && eps[i].track_ep==iter.entry())
{
train.place(block, i);
ok = true;
if(ok)
break;
- else
- {
- Track *next = track->get_links()[ep];
- ep = next->traverse(next->get_endpoint_by_link(*track), 0);
- track = next;
- if(!block.get_tracks().count(track))
- break;
- }
+
+ iter = iter.flip().reverse();
}
}
{
pick_conn.disconnect();
- try
- {
- train.go_to(*track);
- }
- catch(const Exception &e)
- {
- engineer.set_status(e.what());
- }
+ if(!train.go_to(*track))
+ engineer.set_status("Could not set route");
}