Merge branch 'v14'

This commit is contained in:
dP
2025-12-21 04:22:53 +05:00
4 changed files with 33 additions and 18 deletions

View File

@@ -2476,10 +2476,13 @@ 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);
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
if (_thd.size.x >= (int)TILE_SIZE && _thd.size.y >= (int)TILE_SIZE) {
@@ -2862,8 +2865,6 @@ bool HandlePlacePushButton(Window *w, WidgetID widget, up<Tool> 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> 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

View File

@@ -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

View File

@@ -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<ObjectHighlight> ohl, up<Command> 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<typename Taction, typename Tcallback, typename Targ>
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<typename Taction, typename Tcallback, typename Targ>
@@ -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<Command>{std::move(cmd)}, callback](bool test, StationID to_join) -> bool {
if (!cmd) return false;
if (cmd == nullptr) return false;
auto station_cmd = dynamic_cast<StationBuildCommand *>(cmd.get());
if (station_cmd == nullptr) return false;
station_cmd->station_to_join = to_join;
@@ -1186,6 +1187,7 @@ up<Command> 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<Command> 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<TileArea> 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<Command> 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<ObjectHighlight> 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<StationCoverageType, uint> 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};
}

View File

@@ -614,7 +614,6 @@ struct BuildRoadToolbarWindow : Window {
}
citymania::RoadToolbar_UpdateOptionWidgetStatus(this, widget, _remove_button_clicked, RoadTypeIsRoad(this->roadtype));
//this->UpdateOptionWidgetStatus((RoadToolbarWidgets)widget);
// if (citymania::_remove_mod) RoadToolbar_CtrlChanged(this);
}
EventState OnHotkey(int hotkey) override