Feature: Allow stations and roadstops under bridges.

Bridges above stations will have pillars excluded if they conflict with the station layout.

Partly based on the system implemented in JGRPP.

Co-authored-by: <su@angel-island.zone>
This commit is contained in:
Peter Nelson
2025-08-14 19:35:33 +01:00
committed by Peter Nelson
parent 6d6e64b1f0
commit 9a294ab2ed
6 changed files with 244 additions and 31 deletions

View File

@@ -902,3 +902,53 @@ static const std::array<std::span<const DrawTileSpriteSpan>, to_underlying(Stati
_station_display_datas_waypoint,
_station_display_datas_road_waypoint,
}};
static const BridgeableTileInfo _station_bridgeable_info_rail[] = {
{2, {BridgePillarFlag::EdgeSW, BridgePillarFlag::EdgeNE}}, // X-axis empty platform.
{2, {BridgePillarFlag::EdgeNW, BridgePillarFlag::EdgeSE}}, // Y-axis empty platform.
{2, {BridgePillarFlag::EdgeSW, BridgePillarFlag::EdgeNE}}, // X-axis small building.
{2, {BridgePillarFlag::EdgeNW, BridgePillarFlag::EdgeSE}}, // Y-axis small building.
{5, {BridgePillarFlag::EdgeSW, BridgePillarFlag::EdgeNE, BridgePillarFlag::EdgeSE, BridgePillarFlag::CornerE, BridgePillarFlag::CornerS}}, // X large building north.
{5, {BridgePillarFlag::EdgeNW, BridgePillarFlag::EdgeSE, BridgePillarFlag::EdgeSW, BridgePillarFlag::CornerS, BridgePillarFlag::CornerW}}, // Y large building north.
{5, {BridgePillarFlag::EdgeSW, BridgePillarFlag::EdgeNE, BridgePillarFlag::EdgeNW, BridgePillarFlag::CornerN, BridgePillarFlag::CornerW}}, // X large building south.
{5, {BridgePillarFlag::EdgeNW, BridgePillarFlag::EdgeSE, BridgePillarFlag::EdgeNE, BridgePillarFlag::CornerN, BridgePillarFlag::CornerE}}, // Y large building south.
};
static const BridgeableTileInfo _station_bridgeable_info_waypoint[] = {
{2, {BridgePillarFlag::EdgeSW, BridgePillarFlag::EdgeNE}}, // X-axis waypoint.
{2, {BridgePillarFlag::EdgeNW, BridgePillarFlag::EdgeSE}}, // Y-axis waypoint.
};
static const BridgeableTileInfo _station_bridgeable_info_buoy[] = {
{1, {}},
};
static const BridgeableTileInfo _station_bridgeable_info_roadstop[] = {
{2, {BridgePillarFlag::EdgeNE}}, // NE bay.
{2, {BridgePillarFlag::EdgeSE}}, // SE bay.
{2, {BridgePillarFlag::EdgeSW}}, // SW bay.
{2, {BridgePillarFlag::EdgeNW}}, // NW bay.
{2, {BridgePillarFlag::EdgeSW, BridgePillarFlag::EdgeNE}}, // X-axis drive-through.
{2, {BridgePillarFlag::EdgeNW, BridgePillarFlag::EdgeSE}}, // Y-axis drive-through.
};
static const BridgeableTileInfo _station_bridgeable_info_road_waypoint[] = {
{}, // NE bay (unused)
{}, // SE bay (unused)
{}, // SW bay (unused)
{}, // NW bay (unused)
{2, {BridgePillarFlag::EdgeSW, BridgePillarFlag::EdgeNE}}, // X-axis waypoint.
{2, {BridgePillarFlag::EdgeNW, BridgePillarFlag::EdgeSE}}, // Y-axis waypoint.
};
static const std::array<std::span<const BridgeableTileInfo>, to_underlying(StationType::End)> _station_bridgeable_info = {{
_station_bridgeable_info_rail, // Rail
{}, // Airport
_station_bridgeable_info_roadstop, // Truck
_station_bridgeable_info_roadstop, // Bus
{}, // Oilrig
{}, // Dock
_station_bridgeable_info_buoy, // Buoy
_station_bridgeable_info_waypoint, // RailWaypoint
_station_bridgeable_info_road_waypoint, // RoadWaypoint
}};