From fb44f5a074c47e5b07b9d974da6356ea607052e4 Mon Sep 17 00:00:00 2001 From: Anthony Lazar Date: Sat, 24 Feb 2024 00:43:59 -0500 Subject: [PATCH] Fix: Bug where highlight would stay if you click multiple times on the open infrastructure button. Show owned road on level crossings --- src/company_gui.cpp | 9 +++++++++ src/viewport.cpp | 11 +++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/company_gui.cpp b/src/company_gui.cpp index f4e81740fb..7909e5eb44 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -2175,6 +2175,15 @@ static void ShowCompanyInfrastructure(CompanyID company) { if (!Company::IsValidID(company)) return; AllocateWindowDescFront(&_company_infrastructure_desc, company); + + /* Check if already open then move up in the order */ + auto to_moveup_in_order = std::find(_viewport_infrastructure_window_order.begin(), _viewport_infrastructure_window_order.end(), company); + + /* Cautious error checking */ + if (to_moveup_in_order != _viewport_infrastructure_window_order.end()) { + _viewport_infrastructure_window_order.erase(to_moveup_in_order); + } + _viewport_infrastructure_window_order.push_back(company); MarkWholeScreenDirty(); } diff --git a/src/viewport.cpp b/src/viewport.cpp index 31cf35647d..0e3838944a 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -1042,12 +1042,19 @@ static TileHighlightType GetTileHighlightType(TileIndex t) if (!_viewport_infrastructure_window_order.empty()) { switch (GetTileType(t)) { case MP_ROAD: - /* Edge case of company owned tramway on non-company owned tile */ - if (IsTileType(t, MP_ROAD) && !IsRoadDepot(t) && HasTileRoadType(t, RTT_TRAM)) { + /* Edge case of company owned tramway on non-company owned road/rail tile */ + if (!IsRoadDepot(t) && HasTileRoadType(t, RTT_TRAM)) { if (IsRoadOwner(t, RTT_TRAM, _viewport_infrastructure_window_order.back())) { return THT_WHITE; } } + + /* Edge case of company owned road on non-company owned rail tile */ + if (!IsRoadDepot(t) && HasTileRoadType(t, RTT_ROAD)) { + if (IsRoadOwner(t, RTT_ROAD, _viewport_infrastructure_window_order.back())) { + return THT_WHITE; + } + } [[fallthrough]]; case MP_RAILWAY: case MP_TUNNELBRIDGE: