summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/elrail.cpp7
-rw-r--r--src/newgrf_station.cpp23
-rw-r--r--src/station_cmd.cpp2
-rw-r--r--src/station_func.h4
4 files changed, 25 insertions, 11 deletions
diff --git a/src/elrail.cpp b/src/elrail.cpp
index 9aedfc6e5..8aea17aae 100644
--- a/src/elrail.cpp
+++ b/src/elrail.cpp
@@ -111,7 +111,6 @@ static TrackBits GetRailTrackBitsUniversal(TileIndex t, byte *override)
case MP_STATION:
if (!HasStationRail(t)) return TRACK_BIT_NONE;
if (!HasCatenary(GetRailType(t))) return TRACK_BIT_NONE;
- if (!IsStationTileElectrifiable(t)) return TRACK_BIT_NONE;
return TrackToTrackBits(GetRailStationTrack(t));
default:
@@ -409,7 +408,8 @@ static void DrawCatenaryRailway(const TileInfo *ti)
}
}
- if (PPPallowed[i] != 0 && HasBit(PCPstatus, i) && !HasBit(OverridePCP, i)) {
+ if (PPPallowed[i] != 0 && HasBit(PCPstatus, i) && !HasBit(OverridePCP, i) &&
+ (!IsRailStationTile(ti->tile) || CanStationTileHavePylons(ti->tile))) {
for (Direction k = DIR_BEGIN; k < DIR_END; k++) {
byte temp = PPPorder[i][GetTLG(ti->tile)][k];
@@ -443,6 +443,9 @@ static void DrawCatenaryRailway(const TileInfo *ti)
if (height <= GetTileMaxZ(ti->tile) + 1) return;
}
+ /* Don't draw a wire if the station tile does not want any */
+ if (IsRailStationTile(ti->tile) && !CanStationTileHaveWires(ti->tile)) return;
+
SpriteID wire_normal = GetWireBase(ti->tile);
SpriteID wire_halftile = (halftile_corner != CORNER_INVALID) ? GetWireBase(ti->tile, TCX_UPPER_HALFTILE) : wire_normal;
Track halftile_track;
diff --git a/src/newgrf_station.cpp b/src/newgrf_station.cpp
index 57ff64bdf..cea387879 100644
--- a/src/newgrf_station.cpp
+++ b/src/newgrf_station.cpp
@@ -895,18 +895,29 @@ bool IsStationTileBlocked(TileIndex tile)
}
/**
- * Check if a rail station tile can be electrified.
+ * Check if a rail station tile shall have pylons when electrified.
* @param tile %Tile to test.
- * @return Tile can be electrified.
+ * @return Tile shall have pylons.
* @note This could be cached (during build) in the map array to save on all the dereferencing.
*/
-bool IsStationTileElectrifiable(TileIndex tile)
+bool CanStationTileHavePylons(TileIndex tile)
{
const StationSpec *statspec = GetStationSpec(tile);
+ uint gfx = GetStationGfx(tile);
+ /* Default stations do not draw pylons under roofs (gfx >= 4) */
+ return statspec != NULL ? HasBit(statspec->pylons, gfx) : gfx < 4;
+}
- return statspec == NULL ||
- HasBit(statspec->pylons, GetStationGfx(tile)) ||
- !HasBit(statspec->wires, GetStationGfx(tile));
+/**
+ * Check if a rail station tile shall have wires when electrified.
+ * @param tile %Tile to test.
+ * @return Tile shall have wires.
+ * @note This could be cached (during build) in the map array to save on all the dereferencing.
+ */
+bool CanStationTileHaveWires(TileIndex tile)
+{
+ const StationSpec *statspec = GetStationSpec(tile);
+ return statspec == NULL || !HasBit(statspec->wires, GetStationGfx(tile));
}
/** Wrapper for animation control, see #GetStationCallback. */
diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp
index b06d8556b..0480d755a 100644
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -2774,7 +2774,7 @@ draw_default_foundation:
}
}
- if (HasStationRail(ti->tile) && HasCatenaryDrawn(GetRailType(ti->tile)) && IsStationTileElectrifiable(ti->tile)) DrawCatenary(ti);
+ if (HasStationRail(ti->tile) && HasCatenaryDrawn(GetRailType(ti->tile))) DrawCatenary(ti);
if (HasBit(roadtypes, ROADTYPE_TRAM)) {
Axis axis = GetRoadStopDir(ti->tile) == DIAGDIR_NE ? AXIS_X : AXIS_Y;
diff --git a/src/station_func.h b/src/station_func.h
index 3b33002b9..233ffee30 100644
--- a/src/station_func.h
+++ b/src/station_func.h
@@ -39,8 +39,8 @@ void DeleteOilRig(TileIndex t);
/* Check if a rail station tile is traversable. */
bool IsStationTileBlocked(TileIndex tile);
-/* Check if a rail station tile is electrifiable. */
-bool IsStationTileElectrifiable(TileIndex tile);
+bool CanStationTileHavePylons(TileIndex tile);
+bool CanStationTileHaveWires(TileIndex tile);
void UpdateAirportsNoise();