#include <algorithm>
#include "block.h"
#include "layout.h"
+#include "route.h"
#include "tracktype.h"
using namespace std;
}
unsigned Block::traverse(unsigned epi, float *len) const
+{
+ return traverse(epi, 0, len);
+}
+
+unsigned Block::traverse(unsigned epi, const Route *route, float *len) const
{
if(epi>=endpoints.size())
throw InvalidParameterValue("Endpoint index out of range");
while(1)
{
- unsigned cur_path = track->get_active_path();
+ int cur_path = -1;
+ if(track->get_turnout_id() && route)
+ cur_path = route->get_turnout(track->get_turnout_id());
+ if(cur_path==-1)
+ cur_path = track->get_active_path();
if(len)
*len += track->get_type().get_path_length(cur_path);
swap(id1, id2);
id = (id1<<16)|id2;
}
+ else if(endpoints.size()==1)
+ {
+ unsigned id1 = endpoints[0].link ? endpoints[0].link->get_id() : 1;
+ id = 0x10000 | id1;
+ }
}