summaryrefslogtreecommitdiff
path: root/src/yapf
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 /src/yapf
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.
Diffstat (limited to 'src/yapf')
-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;