mirror of https://github.com/OpenTTD/OpenTTD
(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 usedrelease/0.4.5
parent
5286a014ec
commit
b45eee3157
8
rail.h
8
rail.h
|
@ -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
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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++;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue