changeset 8200:f7f49622b3e0 draft

(svn r11763) -Fix: update signal states after merging a company
author smatz <smatz@openttd.org>
date Sat, 05 Jan 2008 22:04:11 +0000
parents 5d7588dd08d6
children 3bb55a26f2cc
files src/economy.cpp
diffstat 1 files changed, 19 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/economy.cpp
+++ b/src/economy.cpp
@@ -40,6 +40,9 @@
 #include "date_func.h"
 #include "vehicle_func.h"
 #include "sound_func.h"
+#include "track_type.h"
+#include "track_func.h"
+#include "rail_map.h"
 
 /**
  * Multiply two integer values and shift the results to right.
@@ -423,6 +426,22 @@
 		do {
 			ChangeTileOwner(tile, old_player, new_player);
 		} while (++tile != MapSize());
+
+		if (new_player != PLAYER_SPECTATOR) {
+			/* Update all signals because there can be new segment that was owned by two players
+			 * and signals were not propagated */
+			tile = 0;
+
+			do {
+				if (IsTileType(tile, MP_RAILWAY) && IsTileOwner(tile, new_player) && HasSignals(tile)) {
+					TrackBits tracks = GetTrackBits(tile);
+					do { // there may be two tracks with signals for TRACK_BIT_HORZ and TRACK_BIT_VERT
+						Track track = RemoveFirstTrack(&tracks);
+						if (HasSignalOnTrack(tile, track)) SetSignalsOnBothDir(tile, track);
+					} while (tracks != TRACK_BIT_NONE);
+				}
+			} while (++tile != MapSize());
+		}
 	}
 
 	/* Change color of existing windows */