well, this might be considered a solution - game won't lag anymore, but train will still get stuck at such station. It will report that it has stuck though.
I think that more complex solution could be made - something that will allow trains to p**** such signal in normal way even if it's not their station. Perhaps new choose signal could be made - one with gui to attach it to certain platforms rather then p****ing train schedule. Then it could simply direct all p****ing trains to one of it's platforms.
About seek range: It seem that revision head was fixed in this matter: we have this
route.cc 224 && koord_distance(start.get_2d(),gr->get_pos().get_2d()+koord::nsow[r])<max_depth // not too far away
while this seem to be broken in current stable, even this code solves nothing: it will check all routes in 100x100 square, rather then routes 50 tiles long. I suppose this is correct way to do such check:
Index: route.cc
===================================================================
--- route.cc (revision 2611)
+++ route.cc (working copy)
@@ -221,7 +221,7 @@
// a way goes here, and it is not marked (i.e. in the closed list)
grund_t* to;
if( (ribi & ribi_t::nsow[r] & start_dir)!=0 // allowed dir (we can restrict the first step by start_dir)
- && koord_distance(start.get_2d(),gr->get_pos().get_2d()+koord::nsow[r])<max_depth // not too far away
+ //&& koord_distance(start.get_2d(),gr->get_pos().get_2d()+koord::nsow[r])<max_depth // not too far away, useless
&& gr->get_neighbour(to, wegtyp, koord::nsow[r]) // is connected
&& fahr->ist_befahrbar(to) // can be driven on
) {
@@ -250,16 +250,18 @@
continue;
}
- // not in there or taken out => add new
- ANode* k = &nodes[step++];
+ if(tmp->count < max_depth) { // insert only if we are close enought
+ // not in there or taken out => add new
+ ANode* k = &nodes[step++];
- k->parent = tmp;
- k->gr = to;
- k->count = tmp->count+1;
+ k->parent = tmp;
+ k->gr = to;
+ k->count = tmp->count+1;
-//DBG_DEBUG("insert to open","%i,%i,%i",to->get_pos().x,to->get_pos().y,to->get_pos().z);
- // insert here
- open.append(k);
+ //DBG_DEBUG("insert to open","%i,%i,%i",to->get_pos().x,to->get_pos().y,to->get_pos().z);
+ // insert here
+ open.append(k);
+ }
}
}