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 | |
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.
-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; |