1
0
Fork 0

(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
release/0.4.5
celestar 2005-07-10 01:25:17 +00:00
parent 5286a014ec
commit b45eee3157
3 changed files with 11 additions and 4 deletions

8
rail.h
View File

@ -505,7 +505,13 @@ static inline TransportType GetCrossingTransportType(TileIndex tile, Track track
*/ */
static inline bool IsCompatibleRail(RailType enginetype, RailType tiletype) 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 #endif // RAIL_H

View File

@ -2542,7 +2542,8 @@ static bool CheckCompatibleRail(const Vehicle *v, TileIndex tile)
return return
IsTileOwner(tile, v->owner) && 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 { typedef struct {

View File

@ -160,7 +160,7 @@ static void engine_drawing_loop(int *x, int *y, int *pos, int *sel,
const Engine *e = GetEngine(i); const Engine *e = GetEngine(i);
const RailVehicleInfo *rvi = RailVehInfo(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)) !HASBIT(e->player_avail, _local_player))
continue; continue;
@ -192,7 +192,7 @@ static void NewRailVehicleWndProc(Window *w, WindowEvent *e)
for (i = 0; i < NUM_TRAIN_ENGINES; i++) { for (i = 0; i < NUM_TRAIN_ENGINES; i++) {
const Engine *e = GetEngine(i); const Engine *e = GetEngine(i);
if (e->railtype == railtype if (IsCompatibleRail(railtype, e->railtype)
&& HASBIT(e->player_avail, _local_player)) && HASBIT(e->player_avail, _local_player))
count++; count++;
} }