summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKUDr <KUDr@openttd.org>2006-12-29 23:06:00 +0000
committerKUDr <KUDr@openttd.org>2006-12-29 23:06:00 +0000
commitd0e61faa261eccc13007a256d38d16b0ec40bb8b (patch)
treeff0fd7297f60c73185643991a81b7e71a056e253
parent06852337c861d2daee342f1db0ed59caeb9ef19f (diff)
downloadopenttd-d0e61faa261eccc13007a256d38d16b0ec40bb8b.tar.xz
(svn r7628) -Fix: [YAPF] suppress 'Train is lost' message if pathfinding ended on the first two-way red signal due to yapf.rail_firstred_twoway_eol option.
-rw-r--r--yapf/yapf_costrail.hpp8
-rw-r--r--yapf/yapf_rail.cpp5
2 files changed, 10 insertions, 3 deletions
diff --git a/yapf/yapf_costrail.hpp b/yapf/yapf_costrail.hpp
index c8e34dfbd..93062b5c2 100644
--- a/yapf/yapf_costrail.hpp
+++ b/yapf/yapf_costrail.hpp
@@ -19,10 +19,15 @@ public:
protected:
int m_max_cost;
CBlobT<int> m_sig_look_ahead_costs;
+public:
+ bool m_stopped_on_first_two_way_signal;
+protected:
static const int s_max_segment_cost = 10000;
- CYapfCostRailT() : m_max_cost(0)
+ CYapfCostRailT()
+ : m_max_cost(0)
+ , m_stopped_on_first_two_way_signal(false)
{
// pre-compute look-ahead penalties into array
int p0 = Yapf().PfGetSettings().rail_look_ahead_signal_p0;
@@ -116,6 +121,7 @@ public:
if (Yapf().TreatFirstRedTwoWaySignalAsEOL() && n.flags_u.flags_s.m_choice_seen && has_signal_against && n.m_num_signals_passed == 0) {
// yes, the first signal is two-way red signal => DEAD END
n.m_segment->flags_u.flags_s.m_end_of_line = true;
+ Yapf().m_stopped_on_first_two_way_signal = true;
return -1;
}
SignalType sig_type = GetSignalType(tile);
diff --git a/yapf/yapf_rail.cpp b/yapf/yapf_rail.cpp
index d7edfaa02..1461b9402 100644
--- a/yapf/yapf_rail.cpp
+++ b/yapf/yapf_rail.cpp
@@ -118,9 +118,10 @@ public:
// find the best path
bool path_found = Yapf().FindPath(v);
- if (!path_found && path_not_found != NULL) {
+ if (path_not_found != NULL) {
// tell controller that the path was only 'guessed'
- *path_not_found = !path_found;
+ // treat the path as found if stopped on the first two way signal(s)
+ *path_not_found = !(path_found || Yapf().m_stopped_on_first_two_way_signal);
}
// if path not found - return INVALID_TRACKDIR