changeset 2032:7ba3fd3bf03a draft

(svn r2541) -Feature: Modified IsCompatibleRail so that an engine can move on more than one railtype (like Diesel engines on electrified rail). -Codechange: Use IsCompatibleRail where it should be used
author celestar <celestar@openttd.org>
date Sun, 10 Jul 2005 01:25:17 +0000
parents 598d034ae14f
children 11a31e2e25bb
files rail.h train_cmd.c train_gui.c
diffstat 3 files changed, 11 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/rail.h
+++ b/rail.h
@@ -505,7 +505,13 @@
  */
 static inline bool IsCompatibleRail(RailType enginetype, RailType tiletype)
 {
-	return enginetype == tiletype;
+	static const bool EquivRailTypes[RAILTYPE_END][RAILTYPE_END] = {
+	{ true, false, false },
+	{ false, true, false },
+	{ false, false, true },
+	};
+
+	return EquivRailTypes[enginetype][tiletype];
 }
 
 #endif // RAIL_H
--- a/train_cmd.c
+++ b/train_cmd.c
@@ -2542,7 +2542,8 @@
 
 	return
 		IsTileOwner(tile, v->owner) &&
-		(v->subtype != TS_Front_Engine || (_map3_lo[tile] & 0xF) == v->u.rail.railtype);
+		(v->subtype != TS_Front_Engine ||
+		IsCompatibleRail(v->u.rail.railtype, GetRailType(tile)));
 }
 
 typedef struct {
--- a/train_gui.c
+++ b/train_gui.c
@@ -160,7 +160,7 @@
 		const Engine *e = GetEngine(i);
 		const RailVehicleInfo *rvi = RailVehInfo(i);
 
-		if (e->railtype != railtype || !(rvi->flags & RVI_WAGON) != is_engine ||
+		if (!IsCompatibleRail(railtype, e->railtype) || !(rvi->flags & RVI_WAGON) != is_engine ||
 				!HASBIT(e->player_avail, _local_player))
 			continue;
 
@@ -192,7 +192,7 @@
 
 			for (i = 0; i < NUM_TRAIN_ENGINES; i++) {
 				const Engine *e = GetEngine(i);
-				if (e->railtype == railtype
+				if (IsCompatibleRail(railtype, e->railtype)
 				    && HASBIT(e->player_avail, _local_player))
 					count++;
 			}