summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKUDr <kudr@openttd.org>2007-06-29 23:55:16 +0000
committerKUDr <kudr@openttd.org>2007-06-29 23:55:16 +0000
commitcbbee4da48034a07a53b40478a8eab9dfa352370 (patch)
tree6bfd1b7246671cf9d8b58f3a3d8a3577a922380e
parent09ef044f9d7e0be579c93077416acb247f6755b5 (diff)
downloadopenttd-cbbee4da48034a07a53b40478a8eab9dfa352370.tar.xz
(svn r10394) -Fix [YAPF]: MP desync caused by incorrect last-red-signal penalties applied when cached segment was reused. Players that connected more recently (didn't have these segments cached yet) calculated those penalties correctly. This caused different YAPF results.
-rw-r--r--src/yapf/yapf_costrail.hpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/yapf/yapf_costrail.hpp b/src/yapf/yapf_costrail.hpp
index 4fd541ce6..4fe1eb74f 100644
--- a/src/yapf/yapf_costrail.hpp
+++ b/src/yapf/yapf_costrail.hpp
@@ -295,6 +295,16 @@ public:
segment_cost = segment.m_cost;
/* We know also the reason why the segment ends. */
end_segment_reason = segment.m_end_segment_reason;
+ /* We will need also some information about the last signal (if it was red). */
+ if (segment.m_last_signal_tile != INVALID_TILE) {
+ assert(HasSignalOnTrackdir(segment.m_last_signal_tile, segment.m_last_signal_td));
+ SignalState sig_state = GetSignalStateByTrackdir(segment.m_last_signal_tile, segment.m_last_signal_td);
+ bool is_red = (sig_state == SIGNAL_STATE_RED);
+ n.flags_u.flags_s.m_last_signal_was_red = is_red;
+ if (is_red) {
+ n.m_last_red_signal_type = GetSignalType(segment.m_last_signal_tile, TrackdirToTrack(segment.m_last_signal_td));
+ }
+ }
/* No further calculation needed. */
cur = TILE(n.GetLastTile(), n.GetLastTrackdir());
break;