diff --git a/src/citymania/cm_highlight.cpp b/src/citymania/cm_highlight.cpp index f9ef9aaeb9..f2f017dfb5 100644 --- a/src/citymania/cm_highlight.cpp +++ b/src/citymania/cm_highlight.cpp @@ -2476,9 +2476,12 @@ HighLightStyle UpdateTileSelection(HighLightStyle new_drawstyle) { } else if (_thd.select_proc == CM_DDSP_BUILD_AIRPORT) { auto tile = TileXY(_thd.new_pos.x / TILE_SIZE, _thd.new_pos.y / TILE_SIZE); if (_selected_airport_index != -1) { - const AirportSpec *as = AirportClass::Get(_selected_airport_class)->GetSpec(_selected_airport_index); - _thd.cm_new = ObjectHighlight::make_airport(tile, as->GetIndex(), _selected_airport_layout); - new_drawstyle = HT_RECT; + auto ac = AirportClass::Get(_selected_airport_class); + auto as = (ac != nullptr ? ac->GetSpec(_selected_airport_index) : nullptr); + if (as != nullptr) { + _thd.cm_new = ObjectHighlight::make_airport(tile, as->GetIndex(), _selected_airport_layout); + new_drawstyle = HT_RECT; + } } } else if (_thd.select_proc == DDSP_BUILD_STATION || _thd.select_proc == DDSP_BUILD_BUSSTOP || _thd.select_proc == DDSP_BUILD_TRUCKSTOP) { // station @@ -2862,8 +2865,6 @@ bool HandlePlacePushButton(Window *w, WidgetID widget, up tool) { return false; } - w->LowerWidget(widget); - auto icon = tool->GetCursor(); if ((icon & ANIMCURSOR_FLAG) != 0) { SetAnimatedMouseCursor(_animcursors[icon & ~ANIMCURSOR_FLAG]); @@ -2873,9 +2874,9 @@ bool HandlePlacePushButton(Window *w, WidgetID widget, up tool) { citymania::SetActiveTool(std::move(tool)); _thd.window_class = w->window_class; _thd.window_number = w->window_number; + w->LowerWidget(widget); return true; - } } // namespace citymania diff --git a/src/citymania/cm_minimap.cpp b/src/citymania/cm_minimap.cpp index dfcdc3a572..c54e110a92 100644 --- a/src/citymania/cm_minimap.cpp +++ b/src/citymania/cm_minimap.cpp @@ -1025,6 +1025,7 @@ void SmallMapWindow::DrawIndustryProduction(const DrawPixelInfo *dpi) const [this] (auto &e) { auto ind = Industry::GetIfValid(e.index); if (ind == nullptr) return; + if (!_legend_from_industries[_industry_to_list_pos[ind->type]].show_on_map) return; auto pt = this->TileToPixel( TileX(ind->location.tile) * TILE_SIZE + ind->location.w * TILE_SIZE / 2, TileY(ind->location.tile) * TILE_SIZE + ind->location.h * TILE_SIZE / 2 diff --git a/src/citymania/cm_station_gui.cpp b/src/citymania/cm_station_gui.cpp index 38831edf4f..955442fdf4 100644 --- a/src/citymania/cm_station_gui.cpp +++ b/src/citymania/cm_station_gui.cpp @@ -822,7 +822,7 @@ ToolGUIInfo RemoveAction::GetGUIInfo() { if (area.has_value()) { hlmap.AddTileAreaWithBorder(area.value(), CM_PALETTE_TINT_RED_DEEP); auto cmd = this->GetCommand(area.value()); - if (cmd) cost = cmd->test(); + if (cmd != nullptr) cost = cmd->test(); } return {hlmap, data, cost}; } @@ -832,7 +832,7 @@ void RemoveAction::OnStationRemoved(const Station *) {} // --- PlacementAction --- ToolGUIInfo PlacementAction::PrepareGUIInfo(std::optional ohl, up cmd, StationCoverageType sct, uint rad) { - if (!cmd || !ohl.has_value()) return {}; + if (cmd == nullptr || !ohl.has_value()) return {}; ohl.value().UpdateTiles(); auto palette = CM_PALETTE_TINT_WHITE; auto area = ohl.value().GetArea(); @@ -1123,6 +1123,7 @@ extern void ShowSelectStationWindow(TileArea ta, StationPickerCmdProc&& proc); template bool PostBuildStationCommand(Taction *action, Tcallback callback, Targ arg, StationID join_to) { auto cmd = action->GetCommand(arg, join_to); + if (cmd == nullptr) return false; if (UseImprovedStationJoin()) { cmd->with_callback([](bool res)->bool { if (!res) return false; @@ -1131,7 +1132,7 @@ bool PostBuildStationCommand(Taction *action, Tcallback callback, Targ arg, Stat return true; }); } - return cmd ? cmd->post(callback) : false; + return cmd->post(callback); } template @@ -1146,7 +1147,7 @@ bool ExecuteBuildCommand(Taction *action, Tcallback callback, Targ arg) { [&](StationAction::Picker &) { auto cmd = action->GetCommand(arg, StationID::Invalid()); auto proc = [cmd=sp{std::move(cmd)}, callback](bool test, StationID to_join) -> bool { - if (!cmd) return false; + if (cmd == nullptr) return false; auto station_cmd = dynamic_cast(cmd.get()); if (station_cmd == nullptr) return false; station_cmd->station_to_join = to_join; @@ -1186,6 +1187,7 @@ up RailStationBuildTool::RemoveAction::GetCommand(TileArea area) { bool RailStationBuildTool::RemoveAction::Execute(TileArea area) { auto cmd = this->GetCommand(area); + if (cmd == nullptr) return false; return cmd->post(&CcPlaySound_CONSTRUCTION_RAIL); } @@ -1317,6 +1319,7 @@ up RoadStopBuildTool::RemoveAction::GetCommand(TileArea area) { bool RoadStopBuildTool::RemoveAction::Execute(TileArea area) { auto cmd = this->GetCommand(area); + if (cmd == nullptr) return false; return cmd->post(&CcPlaySound_CONSTRUCTION_OTHER); } @@ -1521,13 +1524,17 @@ bool AirportBuildTool::RemoveAction::Execute(TileArea area) { std::optional AirportBuildTool::SizedPlacementAction::GetArea() const { if (!IsValidTile(this->cur_tile)) return std::nullopt; - auto as = AirportClass::Get(_selected_airport_class)->GetSpec(_selected_airport_index); + auto ac = AirportClass::Get(_selected_airport_class); + if (ac == nullptr) return std::nullopt; + auto as = ac->GetSpec(_selected_airport_index); if (as == nullptr) return std::nullopt; return TileArea{this->cur_tile, as->size_x, as->size_y}; } up AirportBuildTool::SizedPlacementAction::GetCommand(TileIndex tile, StationID to_join) { - auto as = AirportClass::Get(_selected_airport_class)->GetSpec(_selected_airport_index); + auto ac = AirportClass::Get(_selected_airport_class); + if (ac == nullptr) return nullptr; + auto as = ac->GetSpec(_selected_airport_index); if (as == nullptr) return nullptr; auto airport_type = as->GetIndex(); auto layout = _selected_airport_layout; @@ -1547,14 +1554,21 @@ bool AirportBuildTool::SizedPlacementAction::Execute(TileIndex tile) { } std::optional AirportBuildTool::SizedPlacementAction::GetObjectHighlight(TileIndex tile) { - auto airport_type = AirportClass::Get(_selected_airport_class)->GetSpec(_selected_airport_index)->GetIndex(); - auto layout = _selected_airport_layout; + auto ac = AirportClass::Get(_selected_airport_class); + if (ac == nullptr) return std::nullopt; + auto as = ac->GetSpec(_selected_airport_index); + if (as == nullptr) return std::nullopt; + byte airport_type = as->GetIndex(); + byte layout = _selected_airport_layout; return ObjectHighlight::make_airport(tile, airport_type, layout); } std::pair AirportBuildTool::SizedPlacementAction::GetCatchmentParams() { - auto rad = AirportClass::Get(_selected_airport_class)->GetSpec(_selected_airport_index)->catchment; - return {SCT_ALL, rad}; + auto ac = AirportClass::Get(_selected_airport_class); + if (ac == nullptr) return {SCT_ALL, 0}; + auto as = ac->GetSpec(_selected_airport_index); + if (as == nullptr) return {SCT_ALL, 0}; + return {SCT_ALL, as->catchment}; } diff --git a/src/road_gui.cpp b/src/road_gui.cpp index d0a24f5607..ee2485cd3e 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -613,8 +613,7 @@ struct BuildRoadToolbarWindow : Window { default: NOT_REACHED(); } citymania::RoadToolbar_UpdateOptionWidgetStatus(this, widget, _remove_button_clicked, RoadTypeIsRoad(this->roadtype)); - // this->UpdateOptionWidgetStatus((RoadToolbarWidgets)widget); - // if (citymania::_remove_mod) RoadToolbar_CtrlChanged(this); + //this->UpdateOptionWidgetStatus((RoadToolbarWidgets)widget); } EventState OnHotkey(int hotkey) override