* Get the tile area of a rail station with trigger area type. * @param st The rail station or rail waypoint. * @param tile Origin tile. * @param ta Trigger area type. * @return The tile area. */
| 81 | * @return The tile area. |
| 82 | */ |
| 83 | TileArea GetRailTileArea(const BaseStation *st, TileIndex tile, TriggerArea ta) |
| 84 | { |
| 85 | switch (ta) { |
| 86 | default: NOT_REACHED(); |
| 87 | |
| 88 | case TA_TILE: |
| 89 | return {tile, 1, 1}; |
| 90 | |
| 91 | case TA_PLATFORM: { |
| 92 | TileIndex start, end; |
| 93 | Axis axis = GetRailStationAxis(tile); |
| 94 | TileIndexDiff delta = TileOffsByAxis(axis); |
| 95 | |
| 96 | for (end = tile; IsRailStationTile(end + delta) && IsCompatibleTrainStationTile(end + delta, tile); end += delta) { /* Nothing */ } |
| 97 | for (start = tile; IsRailStationTile(start - delta) && IsCompatibleTrainStationTile(start - delta, tile); start -= delta) { /* Nothing */ } |
| 98 | |
| 99 | return TileArea(start, TileX(end) - TileX(start) + 1, TileY(end) - TileY(start) + 1); |
| 100 | } |
| 101 | |
| 102 | case TA_WHOLE: |
| 103 | return st->GetTileArea(Station::IsExpected(st) ? StationType::Rail : StationType::RailWaypoint); |
| 104 | } |
| 105 | } |
| 106 | |
| 107 | |
| 108 | /** |
no test coverage detected