From 2380beede6aaaeae62509bfce7a24e3ec7c766bc Mon Sep 17 00:00:00 2001 From: dP Date: Sat, 20 Jun 2020 02:08:31 +0300 Subject: [PATCH] Fix joining station selection in new ui when using fixed size station placement --- src/citymania/station_ui.cpp | 14 ++++++++++++++ src/citymania/station_ui.hpp | 1 + src/rail_gui.cpp | 4 ++++ 3 files changed, 19 insertions(+) diff --git a/src/citymania/station_ui.cpp b/src/citymania/station_ui.cpp index c8ef463f44..634f2749d0 100644 --- a/src/citymania/station_ui.cpp +++ b/src/citymania/station_ui.cpp @@ -258,6 +258,20 @@ void HandleStationPlacement(TileIndex start, TileIndex end) JoinAndBuild(cmdcont); } +void PlaceRail_Station(TileIndex tile) { + if (CheckStationJoin(tile, tile)) return; + + uint32 p1 = _cur_railtype | _railstation.orientation << 6 | _settings_client.gui.station_numtracks << 8 | _settings_client.gui.station_platlength << 16 | _ctrl_pressed << 24; + uint32 p2 = _railstation.station_class | _railstation.station_type << 8 | INVALID_STATION << 16; + + int w = _settings_client.gui.station_numtracks; + int h = _settings_client.gui.station_platlength; + if (!_railstation.orientation) Swap(w, h); + + CommandContainer cmdcont = { tile, p1, p2, CMD_BUILD_RAIL_STATION | CMD_MSG(STR_ERROR_CAN_T_BUILD_RAILROAD_STATION), CcStation, "" }; + JoinAndBuild(cmdcont); +} + void PlaceDock(TileIndex tile) { if (CheckStationJoin(tile, tile)) return; diff --git a/src/citymania/station_ui.hpp b/src/citymania/station_ui.hpp index b927c0edb1..613c220457 100644 --- a/src/citymania/station_ui.hpp +++ b/src/citymania/station_ui.hpp @@ -21,6 +21,7 @@ void OnStationTileSetChange(const Station *station, bool adding, StationType typ void OnStationPartBuilt(const Station *station, TileIndex tile, uint32 p1, uint32 p2); void PlaceRoadStop(TileIndex start_tile, TileIndex end_tile, uint32 p2, uint32 cmd); void HandleStationPlacement(TileIndex start, TileIndex end); +void PlaceRail_Station(TileIndex tile); void PlaceDock(TileIndex tile); void PlaceAirport(TileIndex tile); diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 82cdea4428..dbf8400344 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -206,6 +206,10 @@ static void PlaceRail_Station(TileIndex tile) VpStartPlaceSizing(tile, VPM_X_AND_Y_LIMITED, DDSP_BUILD_STATION); VpSetPlaceSizingLimit(_settings_game.station.station_spread); } else { + if (_settings_client.gui.cm_use_improved_station_join) { + citymania::PlaceRail_Station(tile); + return; + } uint32 p1 = _cur_railtype | _railstation.orientation << 6 | _settings_client.gui.station_numtracks << 8 | _settings_client.gui.station_platlength << 16 | _ctrl_pressed << 24; uint32 p2 = _railstation.station_class | _railstation.station_type << 8 | INVALID_STATION << 16;