mirror of https://github.com/OpenTTD/OpenTTD
(svn r4571) Change the rail type update for electrified rails so it doesn't use bit magic
parent
f1cb7bac9a
commit
288f4eed65
29
openttd.c
29
openttd.c
|
@ -1082,6 +1082,13 @@ static void UpdateSignOwner(void)
|
||||||
extern void UpdateOldAircraft( void );
|
extern void UpdateOldAircraft( void );
|
||||||
extern void UpdateOilRig( void );
|
extern void UpdateOilRig( void );
|
||||||
|
|
||||||
|
|
||||||
|
static inline RailType UpdateRailType(RailType rt, RailType min)
|
||||||
|
{
|
||||||
|
return rt >= min ? (RailType)(rt + 1): rt;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool AfterLoadGame(void)
|
bool AfterLoadGame(void)
|
||||||
{
|
{
|
||||||
Window *w;
|
Window *w;
|
||||||
|
@ -1247,7 +1254,7 @@ bool AfterLoadGame(void)
|
||||||
Vehicle* v;
|
Vehicle* v;
|
||||||
uint i;
|
uint i;
|
||||||
TileIndex t;
|
TileIndex t;
|
||||||
bool make_elrail = false;
|
RailType min_rail = RAILTYPE_ELECTRIC;
|
||||||
|
|
||||||
for (i = 0; i < lengthof(_engines); i++) {
|
for (i = 0; i < lengthof(_engines); i++) {
|
||||||
Engine* e = GetEngine(i);
|
Engine* e = GetEngine(i);
|
||||||
|
@ -1262,7 +1269,7 @@ bool AfterLoadGame(void)
|
||||||
RailType rt = GetEngine(v->engine_type)->railtype;
|
RailType rt = GetEngine(v->engine_type)->railtype;
|
||||||
|
|
||||||
v->u.rail.railtype = rt;
|
v->u.rail.railtype = rt;
|
||||||
if (rt == RAILTYPE_ELECTRIC) make_elrail = true;
|
if (rt == RAILTYPE_ELECTRIC) min_rail = RAILTYPE_RAIL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1270,34 +1277,38 @@ bool AfterLoadGame(void)
|
||||||
for (t = 0; t < MapSize(); t++) {
|
for (t = 0; t < MapSize(); t++) {
|
||||||
switch (GetTileType(t)) {
|
switch (GetTileType(t)) {
|
||||||
case MP_RAILWAY:
|
case MP_RAILWAY:
|
||||||
if (GetRailType(t) > RAILTYPE_RAIL || make_elrail) AB(_m[t].m3, 0, 4, 1);
|
SetRailType(t, UpdateRailType(GetRailType(t), min_rail));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MP_STREET:
|
case MP_STREET:
|
||||||
if (IsLevelCrossing(t) && (GetRailTypeCrossing(t) > RAILTYPE_RAIL || make_elrail)) AB(_m[t].m4, 0, 4, 1);
|
if (IsLevelCrossing(t)) {
|
||||||
|
SetRailTypeCrossing(t, UpdateRailType(GetRailTypeCrossing(t), min_rail));
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MP_STATION:
|
case MP_STATION:
|
||||||
if (IsRailwayStation(t) && (GetRailType(t) > RAILTYPE_RAIL || make_elrail)) AB(_m[t].m3, 0, 4, 1);
|
if (IsRailwayStation(t)) {
|
||||||
|
SetRailType(t, UpdateRailType(GetRailType(t), min_rail));
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MP_TUNNELBRIDGE:
|
case MP_TUNNELBRIDGE:
|
||||||
if (IsTunnel(t)) {
|
if (IsTunnel(t)) {
|
||||||
if (GetTunnelTransportType(t) == TRANSPORT_RAIL) {
|
if (GetTunnelTransportType(t) == TRANSPORT_RAIL) {
|
||||||
if (GetRailType(t) > RAILTYPE_RAIL || make_elrail) AB(_m[t].m3, 0, 4, 1);
|
SetRailType(t, UpdateRailType(GetRailType(t), min_rail));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (GetBridgeTransportType(t) == TRANSPORT_RAIL) {
|
if (GetBridgeTransportType(t) == TRANSPORT_RAIL) {
|
||||||
if (IsBridgeRamp(t)) {
|
if (IsBridgeRamp(t)) {
|
||||||
if (GetRailType(t) > RAILTYPE_RAIL || make_elrail) AB(_m[t].m3, 0, 4, 1);
|
SetRailType(t, UpdateRailType(GetRailType(t), min_rail));
|
||||||
} else {
|
} else {
|
||||||
if (GetRailTypeOnBridge(t) > RAILTYPE_RAIL || make_elrail) AB(_m[t].m3, 4, 4, 1);
|
SetRailTypeOnBridge(t, UpdateRailType(GetRailTypeOnBridge(t), min_rail));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (IsBridgeMiddle(t) &&
|
if (IsBridgeMiddle(t) &&
|
||||||
IsTransportUnderBridge(t) &&
|
IsTransportUnderBridge(t) &&
|
||||||
GetTransportTypeUnderBridge(t) == TRANSPORT_RAIL) {
|
GetTransportTypeUnderBridge(t) == TRANSPORT_RAIL) {
|
||||||
if (GetRailType(t) > RAILTYPE_RAIL || make_elrail) AB(_m[t].m3, 0, 4, 1);
|
SetRailType(t, UpdateRailType(GetRailType(t), min_rail));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue