(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.
authorKUDr
Fri, 29 Jun 2007 23:55:16 +0000
changeset 7121 ac2b3710f262
parent 7120 8cb5c92f23a8
child 7122 444ddcad8909
(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.
src/yapf/yapf_costrail.hpp
--- a/src/yapf/yapf_costrail.hpp	Fri Jun 29 23:50:42 2007 +0000
+++ b/src/yapf/yapf_costrail.hpp	Fri Jun 29 23:55:16 2007 +0000
@@ -295,6 +295,16 @@
 					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;