(svn r3986) Add [GS]etCrossingRoadOwner
authortron
Sun, 19 Mar 2006 19:33:19 +0000
changeset 3274 e3fd60498b38
parent 3273 7303df652359
child 3275 13e4aeed09b7
(svn r3986) Add [GS]etCrossingRoadOwner
openttd.c
rail_cmd.c
road_cmd.c
road_map.h
town_cmd.c
--- a/openttd.c	Sun Mar 19 17:52:02 2006 +0000
+++ b/openttd.c	Sun Mar 19 19:33:19 2006 +0000
@@ -1002,7 +1002,9 @@
 
 	for (tile = 0; tile != MapSize(); tile++) {
 		if (IsTileType(tile, MP_STREET)) {
-			if (IsLevelCrossing(tile) && _m[tile].m3 & 0x80) _m[tile].m3 = OWNER_TOWN;
+			if (IsLevelCrossing(tile) && GetCrossingRoadOwner(tile) & 0x80) {
+				SetCrossingRoadOwner(tile, OWNER_TOWN);
+			}
 
 			if (_m[tile].m1 & 0x80) SetTileOwner(tile, OWNER_TOWN);
 		} else if (IsTileType(tile, MP_TUNNELBRIDGE)) {
--- a/rail_cmd.c	Sun Mar 19 17:52:02 2006 +0000
+++ b/rail_cmd.c	Sun Mar 19 19:33:19 2006 +0000
@@ -417,7 +417,7 @@
 			}
 
 			if (flags & DC_EXEC) {
-				MakeRoadNormal(tile, _m[tile].m3, GetCrossingRoadBits(tile), _m[tile].m2);
+				MakeRoadNormal(tile, GetCrossingRoadOwner(tile), GetCrossingRoadBits(tile), _m[tile].m2);
 			}
 			break;
 		}
--- a/road_cmd.c	Sun Mar 19 17:52:02 2006 +0000
+++ b/road_cmd.c	Sun Mar 19 19:33:19 2006 +0000
@@ -34,9 +34,8 @@
 	// Only do the special processing for actual players.
 	if (_current_player >= MAX_PLAYERS) return true;
 
-	// A railway crossing has the road owner in the map3_lo byte.
 	if (IsTileType(tile, MP_STREET) && IsLevelCrossing(tile)) {
-		owner = _m[tile].m3;
+		owner = GetCrossingRoadOwner(tile);
 	} else {
 		owner = GetTileOwner(tile);
 	}
@@ -106,9 +105,7 @@
 
 	if (!IsTileType(tile, MP_STREET) && !IsTileType(tile, MP_TUNNELBRIDGE)) return CMD_ERROR;
 
-	// owner for railroad crossing is stored somewhere else
-	// XXX - Fix this so for a given tiletype the owner of the type is in the same variable
-	owner = IsLevelCrossing(tile) ? _m[tile].m3 : GetTileOwner(tile);
+	owner = IsLevelCrossing(tile) ? GetCrossingRoadOwner(tile) : GetTileOwner(tile);
 
 	if (owner == OWNER_TOWN && _game_mode != GM_EDITOR) {
 		if (IsTileType(tile, MP_TUNNELBRIDGE)) { // index of town is not saved for bridge (no space)
@@ -1127,9 +1124,8 @@
 
 static void ChangeTileOwner_Road(TileIndex tile, PlayerID old_player, PlayerID new_player)
 {
-	// road/rail crossing where the road is owned by the current player?
-	if (old_player == _m[tile].m3 && IsLevelCrossing(tile)) {
-		_m[tile].m3 = (new_player == OWNER_SPECTATOR) ? OWNER_NONE : new_player;
+	if (IsLevelCrossing(tile) && GetCrossingRoadOwner(tile) == old_player) {
+		SetCrossingRoadOwner(tile, new_player == OWNER_SPECTATOR ? OWNER_NONE : new_player);
 	}
 
 	if (!IsTileOwner(tile, old_player)) return;
@@ -1143,7 +1139,7 @@
 				break;
 
 			case ROAD_CROSSING:
-				MakeRoadNormal(tile, _m[tile].m3, GetCrossingRoadBits(tile), _m[tile].m2);
+				MakeRoadNormal(tile, GetCrossingRoadOwner(tile), GetCrossingRoadBits(tile), _m[tile].m2);
 				break;
 
 			default:
--- a/road_map.h	Sun Mar 19 17:52:02 2006 +0000
+++ b/road_map.h	Sun Mar 19 19:33:19 2006 +0000
@@ -55,6 +55,18 @@
 }
 
 
+// TODO swap owner of road and rail
+static inline Owner GetCrossingRoadOwner(TileIndex t)
+{
+	return (Owner)_m[t].m3;
+}
+
+static inline void SetCrossingRoadOwner(TileIndex t, Owner o)
+{
+	_m[t].m3 = o;
+}
+
+
 typedef enum RoadType {
 	ROAD_NORMAL,
 	ROAD_CROSSING,
--- a/town_cmd.c	Sun Mar 19 17:52:02 2006 +0000
+++ b/town_cmd.c	Sun Mar 19 19:33:19 2006 +0000
@@ -1828,10 +1828,9 @@
 	uint dist, best = threshold;
 	Town *best_town = NULL;
 
-	// XXX - Fix this so for a given tiletype the owner of the type is in the same variable
 	if (IsTileType(tile, MP_HOUSE) || (
 				IsTileType(tile, MP_STREET) &&
-				(IsLevelCrossing(tile) ? _m[tile].m3 : GetTileOwner(tile)) == OWNER_TOWN
+				(IsLevelCrossing(tile) ? GetCrossingRoadOwner(tile) : GetTileOwner(tile)) == OWNER_TOWN
 			))
 		return GetTown(_m[tile].m2);