diff --git a/src/autoreplace_cmd.cpp b/src/autoreplace_cmd.cpp index b51ce3519e..15619bcff3 100644 --- a/src/autoreplace_cmd.cpp +++ b/src/autoreplace_cmd.cpp @@ -538,10 +538,10 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlags flags, bool wago ReplaceChainItem &replacement = replacements.emplace_back(w, nullptr, 0); CommandCost ret = BuildReplacementVehicle(replacement.old_veh, &replacement.new_veh, true, flags); - cost.AddCost(ret); + replacement.cost = ret.GetCost(); + cost.AddCost(std::move(ret)); if (cost.Failed()) break; - replacement.cost = ret.GetCost(); if (replacement.new_veh != nullptr) *nothing_to_do = false; } Vehicle *new_head = replacements.front().GetVehicle(); @@ -602,7 +602,7 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlags flags, bool wago break; } - cost.AddCost(res); + cost.AddCost(std::move(res)); if (cost.Failed()) break; } else { /* We have reached 'last_engine', continue with the next engine towards the front */ diff --git a/src/command.cpp b/src/command.cpp index 529af6674e..281588e89a 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -398,11 +398,12 @@ CommandCost CommandHelperBase::InternalExecuteProcessResult(Commands cmd, Comman * Also takes a possible error message when it is set. * @param ret The command to add the cost of. */ -void CommandCost::AddCost(const CommandCost &ret) +void CommandCost::AddCost(CommandCost &&ret) { this->AddCost(ret.cost); if (this->success && !ret.success) { this->message = ret.message; + this->encoded_message = std::move(ret.encoded_message); this->success = false; } } diff --git a/src/command_type.h b/src/command_type.h index ddc0d91cb2..12a81a685b 100644 --- a/src/command_type.h +++ b/src/command_type.h @@ -100,7 +100,7 @@ public: this->cost += cost; } - void AddCost(const CommandCost &cmd_cost); + void AddCost(CommandCost &&cmd_cost); /** * Multiplies the cost of the command by the given factor. diff --git a/src/landscape.cpp b/src/landscape.cpp index 653bb2d8be..3b0d99e761 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -744,7 +744,7 @@ std::tuple CmdClearArea(DoCommandFlags flags, TileIndex tile /* When we're at the clearing limit we better bail (unneed) testing as well. */ if (ret.GetCost() != 0 && --limit <= 0) break; } - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); } return { had_success ? cost : last_error, 0 }; diff --git a/src/object_cmd.cpp b/src/object_cmd.cpp index 454992bd77..888634ee38 100644 --- a/src/object_cmd.cpp +++ b/src/object_cmd.cpp @@ -422,7 +422,7 @@ CommandCost CmdBuildObjectArea(DoCommandFlags flags, TileIndex tile, TileIndex s if (ret.GetCost() > 0 && money < 0) break; Command::Do(flags, t, type, view); } - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); } return had_success ? cost : last_error; diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index f8f91524fe..97a775940d 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -447,7 +447,7 @@ CommandCost CmdBuildSingleRail(DoCommandFlags flags, TileIndex tile, RailType ra ret = CheckRailSlope(tileh, trackbit, GetTrackBits(tile), tile); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); if (HasSignals(tile) && TracksOverlap(GetTrackBits(tile) | TrackToTrackBits(track))) { /* If adding the new track causes any overlap, all signals must be removed first */ @@ -457,7 +457,7 @@ CommandCost CmdBuildSingleRail(DoCommandFlags flags, TileIndex tile, RailType ra if (HasTrack(tile, track_it) && HasSignalOnTrack(tile, track_it)) { CommandCost ret_remove_signals = Command::Do(flags, tile, track_it); if (ret_remove_signals.Failed()) return ret_remove_signals; - cost.AddCost(ret_remove_signals); + cost.AddCost(ret_remove_signals.GetCost()); } } } @@ -469,7 +469,7 @@ CommandCost CmdBuildSingleRail(DoCommandFlags flags, TileIndex tile, RailType ra if (HasPowerOnRail(GetRailType(tile), railtype)) { ret = Command::Do(flags, tile, tile, railtype, false); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); } else { return CMD_ERROR; } @@ -571,11 +571,11 @@ CommandCost CmdBuildSingleRail(DoCommandFlags flags, TileIndex tile, RailType ra CommandCost ret = CheckRailSlope(tileh, trackbit, TRACK_BIT_NONE, tile); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); ret = Command::Do(flags, tile); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); if (water_ground) { cost.AddCost(-_price[PR_CLEAR_WATER]); @@ -901,7 +901,7 @@ static CommandCost CmdRailTrackHelper(DoCommandFlags flags, TileIndex tile, Tile if (last_error.GetErrorMessage() == STR_ERROR_OWNED_BY && remove) break; } else { had_success = true; - total_cost.AddCost(ret); + total_cost.AddCost(ret.GetCost()); } if (tile == end_tile) break; @@ -1330,7 +1330,7 @@ static CommandCost CmdSignalTrackHelper(DoCommandFlags flags, TileIndex tile, Ti if (ret.Succeeded()) { had_success = true; - total_cost.AddCost(ret); + total_cost.AddCost(ret.GetCost()); } else { /* The "No railway" error is the least important one. */ if (ret.GetErrorMessage() != STR_ERROR_THERE_IS_NO_RAILROAD_TRACK || @@ -1824,7 +1824,7 @@ static CommandCost ClearTile_Track(TileIndex tile, DoCommandFlags flags) Track track = RemoveFirstTrack(&tracks); CommandCost ret = Command::Do(flags, tile, track); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); } /* When bankrupting, don't make water dirty, there could be a ship on lower halftile. diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 231e653561..ea0c71787e 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -817,7 +817,7 @@ do_clear:; if (need_to_clear) { CommandCost ret = Command::Do(flags, tile); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); } if (other_bits != pieces) { @@ -828,7 +828,7 @@ do_clear:; if (ret.Failed() || (ret.GetCost() != 0 && !_settings_game.construction.build_on_slopes)) { return CommandCost(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION); } - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); } if (!need_to_clear) { @@ -863,7 +863,7 @@ do_clear:; } else if (HasPowerOnRoad(existing_rt, rt)) { ret = Command::Do(flags, tile, tile, rt); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); } else { return CMD_ERROR; } @@ -1036,17 +1036,17 @@ CommandCost CmdBuildLongRoad(DoCommandFlags flags, TileIndex end_tile, TileIndex if (IsTileType(tile, MP_TUNNELBRIDGE)) { if (IsBridge(tile)) { if (!had_bridge || GetTunnelBridgeDirection(tile) == dir) { - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); } had_bridge = true; } else { // IsTunnel(tile) if (!had_tunnel || GetTunnelBridgeDirection(tile) == dir) { - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); } had_tunnel = true; } } else { - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); } } @@ -1110,7 +1110,7 @@ std::tuple CmdRemoveLongRoad(DoCommandFlags flags, TileIndex } RemoveRoad(tile, flags, bits, rtt, false); } - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); had_success = true; } else { /* Some errors are more equal than others. */ @@ -1241,7 +1241,7 @@ static CommandCost ClearTile_Road(TileIndex tile, DoCommandFlags flags) CommandCost tmp_ret = RemoveRoad(tile, flags, GetRoadBits(tile, rtt), rtt, true); if (tmp_ret.Failed()) return tmp_ret; - ret.AddCost(tmp_ret); + ret.AddCost(tmp_ret.GetCost()); } return ret; } @@ -1260,7 +1260,7 @@ static CommandCost ClearTile_Road(TileIndex tile, DoCommandFlags flags) CommandCost tmp_ret = RemoveRoad(tile, flags, GetCrossingRoadBits(tile), rtt, true); if (tmp_ret.Failed()) return tmp_ret; - ret.AddCost(tmp_ret); + ret.AddCost(tmp_ret.GetCost()); } if (flags.Test(DoCommandFlag::Execute)) { diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 1f5d81bb11..d75f093e5a 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -853,11 +853,11 @@ static CommandCost CheckFlatLandAirport(AirportTileTableIterator tile_iter, DoCo for (; tile_iter != INVALID_TILE; ++tile_iter) { CommandCost ret = CheckBuildableTile(tile_iter, 0, allowed_z, true); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); ret = Command::Do(flags, tile_iter); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); } return cost; @@ -889,7 +889,7 @@ static CommandCost CheckFlatLandRailStation(TileIndex tile_cur, TileIndex north_ CommandCost ret = CheckBuildableTile(tile_cur, invalid_dirs, allowed_z, false); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); if (slope_cb) { /* Do slope check if requested. */ @@ -934,7 +934,7 @@ static CommandCost CheckFlatLandRailStation(TileIndex tile_cur, TileIndex north_ } ret = Command::Do(flags, tile_cur, track); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); /* With DoCommandFlags{flags}.Reset(DoCommandFlag::Execute) CmdLandscapeClear would fail since the rail still exists */ return cost; } @@ -942,7 +942,7 @@ static CommandCost CheckFlatLandRailStation(TileIndex tile_cur, TileIndex north_ } ret = Command::Do(flags, tile_cur); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); } return cost; @@ -967,7 +967,7 @@ CommandCost CheckFlatLandRoadStop(TileIndex cur_tile, int &allowed_z, DoCommandF CommandCost ret = CheckBuildableTile(cur_tile, invalid_dirs, allowed_z, !is_drive_through); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); /* If station is set, then we have special handling to allow building on top of already existing stations. * Station points to StationID::Invalid() if we can build on any station. @@ -1060,7 +1060,7 @@ CommandCost CheckFlatLandRoadStop(TileIndex cur_tile, int &allowed_z, DoCommandF } else { ret = Command::Do(flags, cur_tile); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); cost.AddCost(RoadBuildCost(rt) * 2); } } @@ -1283,7 +1283,7 @@ static CommandCost CalculateRailStationCost(TileArea tile_area, DoCommandFlags f /* AddCost for new or rotated rail stations. */ if (!IsRailStationTile(cur_tile) || (IsRailStationTile(cur_tile) && GetRailStationAxis(cur_tile) != axis)) { - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); cost.AddCost(_price[PR_BUILD_STATION_RAIL]); cost.AddCost(RailBuildCost(rt)); @@ -1652,8 +1652,8 @@ CommandCost RemoveFromRailBaseStation(TileArea ta, std::vector &affected_st /* If there is a vehicle on ground, do not allow to remove (flood) the tile */ CommandCost ret = EnsureNoVehicleOnGround(tile); - error.AddCost(ret); - if (ret.Failed()) continue; + error.AddCost(std::move(ret)); + if (error.Failed()) continue; /* Check ownership of station */ T *st = T::GetByTile(tile); @@ -1661,8 +1661,8 @@ CommandCost RemoveFromRailBaseStation(TileArea ta, std::vector &affected_st if (_current_company != OWNER_WATER) { ret = CheckOwnership(st->owner); - error.AddCost(ret); - if (ret.Failed()) continue; + error.AddCost(std::move(ret)); + if (error.Failed()) continue; } /* If we reached here, the tile is valid so increase the quantity of tiles we will remove */ @@ -1817,7 +1817,7 @@ CommandCost RemoveRailStation(T *st, DoCommandFlags flags, Money removal_cost) std::vector affected_stations; // dummy CommandCost ret = RemoveFromRailBaseStation(TileArea(tile, 1, 1), affected_stations, flags, removal_cost, false); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); } } @@ -1933,7 +1933,7 @@ CommandCost CalculateRoadStopCost(TileArea tile_area, DoCommandFlags flags, bool /* Only add costs if a stop doesn't already exist in the location */ if (!is_preexisting_roadstop) { - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); cost.AddCost(unit_cost); } } @@ -2346,7 +2346,7 @@ static CommandCost RemoveGenericRoadStop(DoCommandFlags flags, const TileArea &r last_error = std::move(ret); continue; } - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); had_success = true; /* Restore roads. */ @@ -2806,7 +2806,7 @@ CommandCost CmdBuildDock(DoCommandFlags flags, TileIndex tile, StationID station CommandCost cost(EXPENSES_CONSTRUCTION, _price[PR_BUILD_STATION_DOCK]); ret = Command::Do(flags, tile); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); TileIndex tile_cur = tile + TileOffsByDiagDir(direction); @@ -2822,7 +2822,7 @@ CommandCost CmdBuildDock(DoCommandFlags flags, TileIndex tile, StationID station bool add_cost = !IsWaterTile(tile_cur); ret = Command::Do(flags, tile_cur); if (ret.Failed()) return ret; - if (add_cost) cost.AddCost(ret); + if (add_cost) cost.AddCost(ret.GetCost()); tile_cur += TileOffsByDiagDir(direction); if (!IsTileType(tile_cur, MP_WATER) || !IsTileFlat(tile_cur)) { diff --git a/src/terraform_cmd.cpp b/src/terraform_cmd.cpp index 0a73bd2b04..2c1c637b41 100644 --- a/src/terraform_cmd.cpp +++ b/src/terraform_cmd.cpp @@ -151,7 +151,7 @@ static std::tuple TerraformTileHeight(TerraformerState * height_diff += (height_diff < 0 ? 1 : -1); auto [cost, err_tile] = TerraformTileHeight(ts, neighbour_tile, r + height_diff); if (cost.Failed()) return { cost, err_tile }; - total_cost.AddCost(cost); + total_cost.AddCost(cost.GetCost()); } } @@ -177,28 +177,28 @@ std::tuple CmdTerraformLand(DoCommandFlags flags, TileIndex t = tile + TileDiffXY(1, 0); auto [cost, err_tile] = TerraformTileHeight(&ts, t, TileHeight(t) + direction); if (cost.Failed()) return { cost, 0, err_tile }; - total_cost.AddCost(cost); + total_cost.AddCost(cost.GetCost()); } if ((slope & SLOPE_S) != 0 && tile + TileDiffXY(1, 1) < Map::Size()) { TileIndex t = tile + TileDiffXY(1, 1); auto [cost, err_tile] = TerraformTileHeight(&ts, t, TileHeight(t) + direction); if (cost.Failed()) return { cost, 0, err_tile }; - total_cost.AddCost(cost); + total_cost.AddCost(cost.GetCost()); } if ((slope & SLOPE_E) != 0 && tile + TileDiffXY(0, 1) < Map::Size()) { TileIndex t = tile + TileDiffXY(0, 1); auto [cost, err_tile] = TerraformTileHeight(&ts, t, TileHeight(t) + direction); if (cost.Failed()) return { cost, 0, err_tile }; - total_cost.AddCost(cost); + total_cost.AddCost(cost.GetCost()); } if ((slope & SLOPE_N) != 0) { TileIndex t = tile + TileDiffXY(0, 0); auto [cost, err_tile] = TerraformTileHeight(&ts, t, TileHeight(t) + direction); if (cost.Failed()) return { cost, 0, err_tile }; - total_cost.AddCost(cost); + total_cost.AddCost(cost.GetCost()); } /* Check if the terraforming is valid wrt. tunnels, bridges and objects on the surface @@ -271,7 +271,7 @@ std::tuple CmdTerraformLand(DoCommandFlags flags, if (cost.Failed()) { return { cost, 0, t }; } - if (pass == 1) total_cost.AddCost(cost); + if (pass == 1) total_cost.AddCost(cost.GetCost()); } } @@ -374,7 +374,7 @@ std::tuple CmdLevelLand(DoCommandFlags flags, Til } } - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); curh += (curh > h) ? -1 : 1; had_success = true; } diff --git a/src/tree_cmd.cpp b/src/tree_cmd.cpp index 7df13e934b..f188fc6d7b 100644 --- a/src/tree_cmd.cpp +++ b/src/tree_cmd.cpp @@ -585,7 +585,7 @@ CommandCost CmdPlantTree(DoCommandFlags flags, TileIndex tile, TileIndex start_t case CLEAR_ROCKS: { CommandCost ret = Command::Do(flags, current_tile); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); break; } diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index cfcae74c6d..6377b48555 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -402,16 +402,16 @@ CommandCost CmdBuildBridge(DoCommandFlags flags, TileIndex tile_end, TileIndex t cost = ret; if (terraform_cost_north.Failed() || (terraform_cost_north.GetCost() != 0 && !allow_on_slopes)) return CommandCost(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION); - cost.AddCost(terraform_cost_north); + cost.AddCost(terraform_cost_north.GetCost()); /* Try and clear the end landscape */ ret = Command::Do(flags, tile_end); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); /* false - end tile slope check */ if (terraform_cost_south.Failed() || (terraform_cost_south.GetCost() != 0 && !allow_on_slopes)) return CommandCost(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION); - cost.AddCost(terraform_cost_south); + cost.AddCost(terraform_cost_south.GetCost()); const TileIndex heads[] = {tile_start, tile_end}; for (int i = 0; i < 2; i++) { @@ -479,7 +479,7 @@ CommandCost CmdBuildBridge(DoCommandFlags flags, TileIndex tile_end, TileIndex t /* try and clear the middle landscape */ ret = Command::Do(flags, tile); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); break; } @@ -697,7 +697,7 @@ CommandCost CmdBuildTunnel(DoCommandFlags flags, TileIndex start_tile, Transport /* Add the cost of the entrance */ cost.AddCost(_price[PR_BUILD_TUNNEL]); - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); /* if the command fails from here on we want the end tile to be highlighted */ _build_tunnel_endtile = end_tile; @@ -709,7 +709,7 @@ CommandCost CmdBuildTunnel(DoCommandFlags flags, TileIndex start_tile, Transport /* Clear the tile in any case */ ret = Command::Do(flags, end_tile); if (ret.Failed()) return CommandCost(STR_ERROR_UNABLE_TO_EXCAVATE_LAND); - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); /* slope of end tile must be complementary to the slope of the start tile */ if (end_tileh != ComplementSlope(start_tileh)) { @@ -742,7 +742,7 @@ CommandCost CmdBuildTunnel(DoCommandFlags flags, TileIndex start_tile, Transport ret = std::get<0>(Command::Do(flags, end_tile, end_tileh & start_tileh, false)); _cleared_object_areas[(uint)coa_index].first_tile = old_first_tile; if (ret.Failed()) return CommandCost(STR_ERROR_UNABLE_TO_EXCAVATE_LAND); - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); } cost.AddCost(_price[PR_BUILD_TUNNEL]); diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 02c0042c54..5845e58f0c 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -171,7 +171,7 @@ std::tuple CmdBuildVehicle(D /* Refit only one vehicle. If we purchased an engine, it may have gained free wagons. */ CommandCost cc; std::tie(cc, refitted_capacity, refitted_mail_capacity, cargo_capacities) = CmdRefitVehicle(flags, v->index, cargo, 0, false, false, 1); - value.AddCost(cc); + value.AddCost(std::move(cc)); } else { /* Fill in non-refitted capacities */ if (e->type == VEH_TRAIN || e->type == VEH_ROAD) { @@ -452,7 +452,7 @@ static std::tuple RefitVehicle(Vehicle } continue; } - cost.AddCost(refit_cost); + cost.AddCost(std::move(refit_cost)); /* Record the refitting. * Do not execute the refitting immediately, so DetermineCapacity and GetRefitCost do the same in test and exec run. @@ -720,7 +720,7 @@ CommandCost CmdDepotSellAllVehicles(DoCommandFlags flags, TileIndex tile, Vehicl for (const Vehicle *v : list) { CommandCost ret = Command::Do(flags, v->index, true, false, INVALID_CLIENT_ID); if (ret.Succeeded()) { - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); had_success = true; } else { last_error = std::move(ret); @@ -754,7 +754,7 @@ CommandCost CmdDepotMassAutoReplace(DoCommandFlags flags, TileIndex tile, Vehicl CommandCost ret = Command::Do(flags, v->index); - if (ret.Succeeded()) cost.AddCost(ret); + if (ret.Succeeded()) cost.AddCost(ret.GetCost()); } return cost; } @@ -900,7 +900,7 @@ std::tuple CmdCloneVehicle(DoCommandFlags flags, TileInd return { cost, VehicleID::Invalid() }; } - total_cost.AddCost(cost); + total_cost.AddCost(cost.GetCost()); if (flags.Test(DoCommandFlag::Execute)) { w = Vehicle::Get(new_veh_id); @@ -961,7 +961,7 @@ std::tuple CmdCloneVehicle(DoCommandFlags flags, TileInd uint8_t subtype = GetBestFittingSubType(v, w, v->cargo_type); if (w->cargo_type != v->cargo_type || w->cargo_subtype != subtype) { CommandCost cost = std::get<0>(Command::Do(flags, w->index, v->cargo_type, subtype, false, true, 0)); - if (cost.Succeeded()) total_cost.AddCost(cost); + if (cost.Succeeded()) total_cost.AddCost(cost.GetCost()); } if (w->IsGroundVehicle() && w->HasArticulatedPart()) { diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index cd47c33c46..c80281d353 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -135,13 +135,13 @@ CommandCost CmdBuildShipDepot(DoCommandFlags flags, TileIndex tile, Axis axis) CommandCost ret = Command::Do(flags | DoCommandFlag::Auto, tile); if (ret.Failed()) return ret; if (add_cost) { - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); } add_cost = !IsWaterTile(tile2); ret = Command::Do(flags | DoCommandFlag::Auto, tile2); if (ret.Failed()) return ret; if (add_cost) { - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); } if (flags.Test(DoCommandFlag::Execute)) { @@ -322,13 +322,13 @@ static CommandCost DoBuildLock(TileIndex tile, DiagDirection dir, DoCommandFlags WaterClass wc_middle = HasTileWaterGround(tile) ? GetWaterClass(tile) : WATER_CLASS_CANAL; ret = Command::Do(flags, tile); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); /* lower tile */ if (!IsWaterTile(tile - delta)) { ret = Command::Do(flags, tile - delta); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); cost.AddCost(_price[PR_BUILD_CANAL]); } if (!IsTileFlat(tile - delta)) { @@ -340,7 +340,7 @@ static CommandCost DoBuildLock(TileIndex tile, DiagDirection dir, DoCommandFlags if (!IsWaterTile(tile + delta)) { ret = Command::Do(flags, tile + delta); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); cost.AddCost(_price[PR_BUILD_CANAL]); } if (!IsTileFlat(tile + delta)) { @@ -495,7 +495,7 @@ CommandCost CmdBuildCanal(DoCommandFlags flags, TileIndex tile, TileIndex start_ ret = Command::Do(flags, current_tile); if (ret.Failed()) return ret; - if (!water) cost.AddCost(ret); + if (!water) cost.AddCost(ret.GetCost()); if (flags.Test(DoCommandFlag::Execute)) { if (IsTileType(current_tile, MP_WATER) && IsCanal(current_tile)) { diff --git a/src/waypoint_cmd.cpp b/src/waypoint_cmd.cpp index fe75aeb072..559d2e55a3 100644 --- a/src/waypoint_cmd.cpp +++ b/src/waypoint_cmd.cpp @@ -479,7 +479,7 @@ CommandCost CmdBuildBuoy(DoCommandFlags flags, TileIndex tile) if (!IsWaterTile(tile)) { CommandCost ret = Command::Do(flags | DoCommandFlag::Auto, tile); if (ret.Failed()) return ret; - cost.AddCost(ret); + cost.AddCost(ret.GetCost()); } if (flags.Test(DoCommandFlag::Execute)) {