diff options
author | KUDr <kudr@openttd.org> | 2007-06-29 23:55:16 +0000 |
---|---|---|
committer | KUDr <kudr@openttd.org> | 2007-06-29 23:55:16 +0000 |
commit | cbbee4da48034a07a53b40478a8eab9dfa352370 (patch) | |
tree | 6bfd1b7246671cf9d8b58f3a3d8a3577a922380e /src/yapf | |
parent | 09ef044f9d7e0be579c93077416acb247f6755b5 (diff) | |
download | openttd-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.hpp | 10 |
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; |