diff --git a/src/aircraft.h b/src/aircraft.h index 9100973297..5bf9eede33 100644 --- a/src/aircraft.h +++ b/src/aircraft.h @@ -89,7 +89,7 @@ struct Aircraft final : public SpecializedVehicleIsNormalAircraft(); } void GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const override; int GetDisplaySpeed() const override { return this->cur_speed; } diff --git a/src/aircraft_cmd.cpp b/src/aircraft_cmd.cpp index 27079a8941..0601a64e7e 100644 --- a/src/aircraft_cmd.cpp +++ b/src/aircraft_cmd.cpp @@ -463,7 +463,7 @@ void Aircraft::OnNewEconomyDay() if (this->running_ticks == 0) return; - CommandCost cost(EXPENSES_AIRCRAFT_RUN, this->GetRunningCost() * this->running_ticks / (CalendarTime::DAYS_IN_YEAR * Ticks::DAY_TICKS)); + CommandCost cost(ExpensesType::AircraftRun, this->GetRunningCost() * this->running_ticks / (CalendarTime::DAYS_IN_YEAR * Ticks::DAY_TICKS)); this->profit_this_year -= cost.GetCost(); this->running_ticks = 0; diff --git a/src/autoreplace_cmd.cpp b/src/autoreplace_cmd.cpp index 0906c10a7c..a19bfd9de1 100644 --- a/src/autoreplace_cmd.cpp +++ b/src/autoreplace_cmd.cpp @@ -461,7 +461,7 @@ static CommandCost ReplaceFreeUnit(Vehicle **single_unit, DoCommandFlags flags, Train *old_v = Train::From(*single_unit); assert(!old_v->IsArticulatedPart() && !old_v->IsRearDualheaded()); - CommandCost cost = CommandCost(EXPENSES_NEW_VEHICLES, (Money)0); + CommandCost cost = CommandCost(ExpensesType::NewVehicles, (Money)0); /* Build and refit replacement vehicle */ Vehicle *new_v = nullptr; @@ -534,7 +534,7 @@ static CommandCost ReplaceChain(Vehicle **chain, DoCommandFlags flags, bool wago Vehicle *old_head = *chain; assert(old_head->IsPrimaryVehicle()); - CommandCost cost = CommandCost(EXPENSES_NEW_VEHICLES, (Money)0); + CommandCost cost = CommandCost(ExpensesType::NewVehicles, (Money)0); if (old_head->type == VehicleType::Train) { /* Store the length of the old vehicle chain, rounded up to whole tiles */ @@ -781,7 +781,7 @@ CommandCost CmdAutoreplaceVehicle(DoCommandFlags flags, VehicleID veh_id) w = (!free_wagon && w->type == VehicleType::Train ? Train::From(w)->GetNextUnit() : nullptr); } - CommandCost cost = CommandCost(EXPENSES_NEW_VEHICLES, (Money)0); + CommandCost cost = CommandCost(ExpensesType::NewVehicles, (Money)0); bool nothing_to_do = true; if (any_replacements) { diff --git a/src/clear_cmd.cpp b/src/clear_cmd.cpp index e952155698..717c25e998 100644 --- a/src/clear_cmd.cpp +++ b/src/clear_cmd.cpp @@ -36,7 +36,7 @@ static CommandCost ClearTile_Clear(TileIndex tile, DoCommandFlags flags) Price::ClearRough, // Unused. Price::ClearRough, // Unused. }; - CommandCost price(EXPENSES_CONSTRUCTION); + CommandCost price(ExpensesType::Construction); ClearGround ground = GetClearGround(tile); uint8_t density = GetClearDensity(tile); diff --git a/src/command_type.h b/src/command_type.h index 0162433c15..a39cc1da50 100644 --- a/src/command_type.h +++ b/src/command_type.h @@ -34,14 +34,14 @@ public: /** * Creates a command cost return with no cost and no error */ - CommandCost() : cost(0), message(INVALID_STRING_ID), expense_type(INVALID_EXPENSES), success(true) {} + CommandCost() : cost(0), message(INVALID_STRING_ID), expense_type(ExpensesType::Invalid), success(true) {} /** * Creates a command return value with one, or optionally two, error message strings. * @param msg The error message. * @param extra_msg Optional secondary error message. */ - explicit CommandCost(StringID msg, StringID extra_msg = INVALID_STRING_ID) : cost(0), message(msg), expense_type(INVALID_EXPENSES), success(false), extra_message(extra_msg) {} + explicit CommandCost(StringID msg, StringID extra_msg = INVALID_STRING_ID) : cost(0), message(msg), expense_type(ExpensesType::Invalid), success(false), extra_message(extra_msg) {} /** * Creates a command cost with given expense type and start cost of 0 diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 8ecc9d7938..a9e1f7430f 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -287,23 +287,31 @@ bool CheckCompanyHasMoney(CommandCost &cost) */ static void SubtractMoneyFromCompany(Company *c, const CommandCost &cost) { + using ExpensesTypes = EnumBitSet; + static constexpr ExpensesTypes EXPENSESTYPES_INCOME{ + ExpensesType::TrainRevenue, + ExpensesType::RoadVehRevenue, + ExpensesType::AircraftRevenue, + ExpensesType::ShipRevenue + }; + static constexpr ExpensesTypes EXPENSESTYPES_EXPENSES{ + ExpensesType::TrainRun, + ExpensesType::RoadVehRun, + ExpensesType::AircraftRun, + ExpensesType::ShipRun, + ExpensesType::Property, + ExpensesType::LoanInterest + }; + if (cost.GetCost() == 0) return; - assert(cost.GetExpensesType() != INVALID_EXPENSES); + assert(cost.GetExpensesType() != ExpensesType::Invalid); c->money -= cost.GetCost(); c->yearly_expenses[0][cost.GetExpensesType()] += cost.GetCost(); - if (HasBit(1 << EXPENSES_TRAIN_REVENUE | - 1 << EXPENSES_ROADVEH_REVENUE | - 1 << EXPENSES_AIRCRAFT_REVENUE | - 1 << EXPENSES_SHIP_REVENUE, cost.GetExpensesType())) { + if (EXPENSESTYPES_INCOME.Test(cost.GetExpensesType())) { c->cur_economy.income -= cost.GetCost(); - } else if (HasBit(1 << EXPENSES_TRAIN_RUN | - 1 << EXPENSES_ROADVEH_RUN | - 1 << EXPENSES_AIRCRAFT_RUN | - 1 << EXPENSES_SHIP_RUN | - 1 << EXPENSES_PROPERTY | - 1 << EXPENSES_LOAN_INTEREST, cost.GetExpensesType())) { + } else if (EXPENSESTYPES_EXPENSES.Test(cost.GetExpensesType())) { c->cur_economy.expenses -= cost.GetCost(); } @@ -1321,7 +1329,7 @@ CommandCost CmdGiveMoney(DoCommandFlags flags, Money money, CompanyID dest_compa if (!_settings_game.economy.give_money) return CMD_ERROR; const Company *c = Company::Get(_current_company); - CommandCost amount(EXPENSES_OTHER, std::min(money, 20000000LL)); + CommandCost amount(ExpensesType::Other, std::min(money, 20000000LL)); /* You can only transfer funds that is in excess of your loan */ if (c->money - c->current_loan < amount.GetCost() || amount.GetCost() < 0) return CommandCost(STR_ERROR_INSUFFICIENT_FUNDS); @@ -1329,7 +1337,7 @@ CommandCost CmdGiveMoney(DoCommandFlags flags, Money money, CompanyID dest_compa if (flags.Test(DoCommandFlag::Execute)) { /* Add money to company */ - SubtractMoneyFromCompany(dest_company, CommandCost(EXPENSES_OTHER, -amount.GetCost())); + SubtractMoneyFromCompany(dest_company, CommandCost(ExpensesType::Other, -amount.GetCost())); if (_networking) { std::string dest_company_name = GetString(STR_COMPANY_NAME, dest_company); diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 0bbf485893..bb6db1eba4 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -63,27 +63,27 @@ static void ShowCompanyInfrastructure(CompanyID company); /** List of revenues. */ static const std::initializer_list _expenses_list_revenue = { - EXPENSES_TRAIN_REVENUE, - EXPENSES_ROADVEH_REVENUE, - EXPENSES_AIRCRAFT_REVENUE, - EXPENSES_SHIP_REVENUE, + ExpensesType::TrainRevenue, + ExpensesType::RoadVehRevenue, + ExpensesType::AircraftRevenue, + ExpensesType::ShipRevenue, }; /** List of operating expenses. */ static const std::initializer_list _expenses_list_operating_costs = { - EXPENSES_TRAIN_RUN, - EXPENSES_ROADVEH_RUN, - EXPENSES_AIRCRAFT_RUN, - EXPENSES_SHIP_RUN, - EXPENSES_PROPERTY, - EXPENSES_LOAN_INTEREST, + ExpensesType::TrainRun, + ExpensesType::RoadVehRun, + ExpensesType::AircraftRun, + ExpensesType::ShipRun, + ExpensesType::Property, + ExpensesType::LoanInterest, }; /** List of capital expenses. */ static const std::initializer_list _expenses_list_capital_costs = { - EXPENSES_CONSTRUCTION, - EXPENSES_NEW_VEHICLES, - EXPENSES_OTHER, + ExpensesType::Construction, + ExpensesType::NewVehicles, + ExpensesType::Other, }; /** Expense list container. */ @@ -109,7 +109,7 @@ struct ExpensesList { { uint width = 0; for (const ExpensesType &et : this->items) { - width = std::max(width, GetStringBoundingBox(STR_FINANCES_SECTION_CONSTRUCTION + et).width); + width = std::max(width, GetStringBoundingBox(STR_FINANCES_SECTION_CONSTRUCTION + to_underlying(et)).width); } return width; } @@ -174,7 +174,7 @@ static void DrawCategory(const Rect &r, int start_y, const ExpensesList &list) tr.top = start_y; for (const ExpensesType &et : list.items) { - DrawString(tr, STR_FINANCES_SECTION_CONSTRUCTION + et); + DrawString(tr, STR_FINANCES_SECTION_CONSTRUCTION + to_underlying(et)); tr.top += GetCharacterHeight(FontSize::Normal); } } diff --git a/src/economy.cpp b/src/economy.cpp index 1ae0d7d8d3..c20f6522a9 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -647,7 +647,7 @@ static void CompaniesGenStatistics() if (_settings_game.economy.infrastructure_maintenance) { /* Improved monthly infrastructure costs. */ for (const Company *c : Company::Iterate()) { - CommandCost cost(EXPENSES_PROPERTY); + CommandCost cost(ExpensesType::Property); uint32_t rail_total = c->infrastructure.GetRailTotal(); for (RailType rt = RAILTYPE_BEGIN; rt < RAILTYPE_END; rt++) { if (c->infrastructure.rail[rt] != 0) cost.AddCost(RailMaintenanceCost(rt, c->infrastructure.rail[rt], rail_total)); @@ -824,9 +824,9 @@ static void CompaniesPayInterest() Money up_to_previous_month = yearly_fee * TimerGameEconomy::month / 12; Money up_to_this_month = yearly_fee * (TimerGameEconomy::month + 1) / 12; - SubtractMoneyFromCompany(c->index, CommandCost(EXPENSES_LOAN_INTEREST, up_to_this_month - up_to_previous_month)); + SubtractMoneyFromCompany(c->index, CommandCost(ExpensesType::LoanInterest, up_to_this_month - up_to_previous_month)); - SubtractMoneyFromCompany(c->index, CommandCost(EXPENSES_OTHER, _price[Price::StationValue] >> 2)); + SubtractMoneyFromCompany(c->index, CommandCost(ExpensesType::Other, _price[Price::StationValue] >> 2)); } } @@ -2040,7 +2040,7 @@ CommandCost CmdBuyCompany(DoCommandFlags flags, CompanyID target_company, bool h /* Get the cost here as the company is deleted in DoAcquireCompany. * For bankruptcy this amount is calculated when the offer was made; * for hostile takeover you pay the current price. */ - CommandCost cost(EXPENSES_OTHER, hostile_takeover ? CalculateHostileTakeoverValue(c) : c->bankrupt_value); + CommandCost cost(ExpensesType::Other, hostile_takeover ? CalculateHostileTakeoverValue(c) : c->bankrupt_value); if (flags.Test(DoCommandFlag::Execute)) { DoAcquireCompany(c, hostile_takeover); diff --git a/src/economy_type.h b/src/economy_type.h index 3cd9bdd3f0..d4753fa97d 100644 --- a/src/economy_type.h +++ b/src/economy_type.h @@ -172,28 +172,31 @@ using Prices = EnumIndexArray; ///< Prices of everythi using PriceMultipliers = EnumIndexArray; /** Types of expenses. */ -enum ExpensesType : uint8_t { - EXPENSES_CONSTRUCTION = 0, ///< Construction costs. - EXPENSES_NEW_VEHICLES, ///< New vehicles. - EXPENSES_TRAIN_RUN, ///< Running costs trains. - EXPENSES_ROADVEH_RUN, ///< Running costs road vehicles. - EXPENSES_AIRCRAFT_RUN, ///< Running costs aircraft. - EXPENSES_SHIP_RUN, ///< Running costs ships. - EXPENSES_PROPERTY, ///< Property costs. - EXPENSES_TRAIN_REVENUE, ///< Revenue from trains. - EXPENSES_ROADVEH_REVENUE, ///< Revenue from road vehicles. - EXPENSES_AIRCRAFT_REVENUE, ///< Revenue from aircraft. - EXPENSES_SHIP_REVENUE, ///< Revenue from ships. - EXPENSES_LOAN_INTEREST, ///< Interest payments over the loan. - EXPENSES_OTHER, ///< Other expenses. - EXPENSES_END, ///< Number of expense types. - INVALID_EXPENSES = 0xFF, ///< Invalid expense type. +enum class ExpensesType : uint8_t { + Construction = 0, ///< Construction costs. + NewVehicles, ///< New vehicles. + TrainRun, ///< Running costs trains. + RoadVehRun, ///< Running costs road vehicles. + AircraftRun, ///< Running costs aircraft. + ShipRun, ///< Running costs ships. + Property, ///< Property costs. + TrainRevenue, ///< Revenue from trains. + RoadVehRevenue, ///< Revenue from road vehicles. + AircraftRevenue, ///< Revenue from aircraft. + ShipRevenue, ///< Revenue from ships. + LoanInterest, ///< Interest payments over the loan. + Other, ///< Other expenses. + End, ///< End marker. + Begin = ExpensesType::Construction, ///< Begin marker. + Invalid = 0xFF, ///< Invalid expense type. }; +DECLARE_INCREMENT_DECREMENT_OPERATORS(ExpensesType) + /** * Data type for storage of Money for each #ExpensesType category. */ -using Expenses = std::array; +using Expenses = EnumIndexArray; /** * Categories of a price bases. diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index f5652c4ab3..1743b43f51 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -515,7 +515,7 @@ static CommandCost ClearTile_Industry(TileIndex tile, DoCommandFlags flags) Game::NewEvent(new ScriptEventIndustryClose(i->index)); delete i; } - return CommandCost(EXPENSES_CONSTRUCTION, indspec->GetRemovalCost()); + return CommandCost(ExpensesType::Construction, indspec->GetRemovalCost()); } /** @@ -2142,7 +2142,7 @@ CommandCost CmdBuildIndustry(DoCommandFlags flags, TileIndex tile, IndustryType AdvertiseIndustryOpening(ind); } - return CommandCost(EXPENSES_OTHER, indspec->GetConstructionCost()); + return CommandCost(ExpensesType::Other, indspec->GetConstructionCost()); } /** @@ -3245,10 +3245,10 @@ static CommandCost TerraformTile_Industry(TileIndex tile, DoCommandFlags flags, if (itspec->callback_mask.Test(IndustryTileCallbackMask::Autoslope)) { /* If the callback fails, allow autoslope. */ uint16_t res = GetIndustryTileCallback(CBID_INDTILE_AUTOSLOPE, 0, 0, gfx, Industry::GetByTile(tile), tile); - if (res == CALLBACK_FAILED || !ConvertBooleanCallback(itspec->grf_prop.grffile, CBID_INDTILE_AUTOSLOPE, res)) return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildFoundation]); + if (res == CALLBACK_FAILED || !ConvertBooleanCallback(itspec->grf_prop.grffile, CBID_INDTILE_AUTOSLOPE, res)) return CommandCost(ExpensesType::Construction, _price[Price::BuildFoundation]); } else { /* allow autoslope */ - return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildFoundation]); + return CommandCost(ExpensesType::Construction, _price[Price::BuildFoundation]); } } } diff --git a/src/landscape.cpp b/src/landscape.cpp index 3c391639d4..d7938456bb 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -684,7 +684,7 @@ bool IsMapSurroundedByWater() */ CommandCost CmdLandscapeClear(DoCommandFlags flags, TileIndex tile) { - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); bool do_clear = false; /* Test for stuff which results in water when cleared. Then add the cost to also clear the water. */ if (flags.Test(DoCommandFlag::ForceClearTile) && HasTileWaterClass(tile) && IsTileOnWater(tile) && !IsWaterTile(tile) && !IsCoastTile(tile)) { @@ -748,7 +748,7 @@ std::tuple CmdClearArea(DoCommandFlags flags, TileIndex tile if (start_tile >= Map::Size()) return { CMD_ERROR, 0 }; Money money = GetAvailableMoneyForCommand(); - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); CommandCost last_error = CMD_ERROR; bool had_success = false; diff --git a/src/misc_cmd.cpp b/src/misc_cmd.cpp index 8d287d0893..314b3cef4c 100644 --- a/src/misc_cmd.cpp +++ b/src/misc_cmd.cpp @@ -72,7 +72,7 @@ CommandCost CmdIncreaseLoan(DoCommandFlags flags, LoanCommand cmd, Money amount) InvalidateCompanyWindows(c); } - return CommandCost(EXPENSES_OTHER); + return CommandCost(ExpensesType::Other); } /** @@ -225,7 +225,7 @@ CommandCost CmdPause(DoCommandFlags flags, PauseMode mode, bool pause) */ CommandCost CmdMoneyCheat(DoCommandFlags, Money amount) { - return CommandCost(EXPENSES_OTHER, -amount); + return CommandCost(ExpensesType::Other, -amount); } /** @@ -240,7 +240,7 @@ CommandCost CmdMoneyCheat(DoCommandFlags, Money amount) CommandCost CmdChangeBankBalance(DoCommandFlags flags, TileIndex tile, Money delta, CompanyID company, ExpensesType expenses_type) { if (!Company::IsValidID(company)) return CMD_ERROR; - if (expenses_type >= EXPENSES_END) return CMD_ERROR; + if (expenses_type >= ExpensesType::End) return CMD_ERROR; if (_current_company != OWNER_DEITY) return CMD_ERROR; if (flags.Test(DoCommandFlag::Execute)) { diff --git a/src/object_cmd.cpp b/src/object_cmd.cpp index 8d26b8b7c8..be2c45ad1a 100644 --- a/src/object_cmd.cpp +++ b/src/object_cmd.cpp @@ -209,7 +209,7 @@ static CommandCost ClearTile_Object(TileIndex tile, DoCommandFlags flags); */ CommandCost CmdBuildObject(DoCommandFlags flags, TileIndex tile, ObjectType type, uint8_t view) { - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); if (type >= ObjectSpec::Count()) return CMD_ERROR; const ObjectSpec *spec = ObjectSpec::Get(type); @@ -405,7 +405,7 @@ CommandCost CmdBuildObjectArea(DoCommandFlags flags, TileIndex tile, TileIndex s if (spec->size != OBJECT_SIZE_1X1) return CMD_ERROR; Money money = GetAvailableMoneyForCommand(); - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); CommandCost last_error = CMD_ERROR; bool had_success = false; @@ -550,7 +550,7 @@ static CommandCost ClearTile_Object(TileIndex tile, DoCommandFlags flags) ObjectType type = o->type; const ObjectSpec *spec = ObjectSpec::Get(type); - CommandCost cost(EXPENSES_CONSTRUCTION, spec->GetClearCost() * ta.w * ta.h / 5); + CommandCost cost(ExpensesType::Construction, spec->GetClearCost() * ta.w * ta.h / 5); if (spec->flags.Test(ObjectFlag::ClearIncome)) cost.MultiplyCost(-1); // They get an income! /* Towns can't remove any objects. */ @@ -597,7 +597,7 @@ static CommandCost ClearTile_Object(TileIndex tile, DoCommandFlags flags) } /* cost of relocating company is 1% of company value */ - cost = CommandCost(EXPENSES_CONSTRUCTION, CalculateCompanyValue(c) / 100); + cost = CommandCost(ExpensesType::Construction, CalculateCompanyValue(c) / 100); break; } @@ -996,10 +996,10 @@ static CommandCost TerraformTile_Object(TileIndex tile, DoCommandFlags flags, in if (spec->callback_mask.Test(ObjectCallbackMask::Autoslope)) { /* If the callback fails, allow autoslope. */ uint16_t res = GetObjectCallback(CBID_OBJECT_AUTOSLOPE, 0, 0, spec, Object::GetByTile(tile), tile); - if (res == CALLBACK_FAILED || !ConvertBooleanCallback(spec->grf_prop.grffile, CBID_OBJECT_AUTOSLOPE, res)) return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildFoundation]); + if (res == CALLBACK_FAILED || !ConvertBooleanCallback(spec->grf_prop.grffile, CBID_OBJECT_AUTOSLOPE, res)) return CommandCost(ExpensesType::Construction, _price[Price::BuildFoundation]); } else if (spec->IsEnabled()) { /* allow autoslope */ - return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildFoundation]); + return CommandCost(ExpensesType::Construction, _price[Price::BuildFoundation]); } } } diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index a690073112..cdaa6693a0 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -404,7 +404,7 @@ static CommandCost CheckRailSlope(Slope tileh, TrackBits rail_bits, TrackBits ex } Foundation f_old = GetRailFoundation(tileh, existing); - return CommandCost(EXPENSES_CONSTRUCTION, f_new != f_old ? _price[Price::BuildFoundation] : (Money)0); + return CommandCost(ExpensesType::Construction, f_new != f_old ? _price[Price::BuildFoundation] : (Money)0); } /* Validate functions for rail building */ @@ -424,7 +424,7 @@ static inline bool ValParamTrackOrientation(Track track) */ CommandCost CmdBuildSingleRail(DoCommandFlags flags, TileIndex tile, RailType railtype, Track track, bool auto_remove_signals) { - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); if (!ValParamRailType(railtype) || !ValParamTrackOrientation(track)) return CMD_ERROR; @@ -613,7 +613,7 @@ CommandCost CmdBuildSingleRail(DoCommandFlags flags, TileIndex tile, RailType ra */ CommandCost CmdRemoveSingleRail(DoCommandFlags flags, TileIndex tile, Track track) { - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); bool crossing = false; if (!ValParamTrackOrientation(track)) return CMD_ERROR; @@ -874,7 +874,7 @@ static CommandCost ValidateAutoDrag(Trackdir *trackdir, TileIndex start, TileInd */ static CommandCost CmdRailTrackHelper(DoCommandFlags flags, TileIndex tile, TileIndex end_tile, RailType railtype, Track track, bool remove, bool auto_remove_signals, bool fail_on_obstacle) { - CommandCost total_cost(EXPENSES_CONSTRUCTION); + CommandCost total_cost(ExpensesType::Construction); if ((!remove && !ValParamRailType(railtype)) || !ValParamTrackOrientation(track)) return CMD_ERROR; if (end_tile >= Map::Size() || tile >= Map::Size()) return CMD_ERROR; @@ -964,7 +964,7 @@ CommandCost CmdBuildTrainDepot(DoCommandFlags flags, TileIndex tile, RailType ra Slope tileh = GetTileSlope(tile); - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); /* Prohibit construction if * The tile is non-flat AND @@ -1073,17 +1073,17 @@ CommandCost CmdBuildSingleSignal(DoCommandFlags flags, TileIndex tile, Track tra CommandCost cost; if (!HasSignalOnTrack(tile, track)) { /* build new signals */ - cost = CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildSignals]); + cost = CommandCost(ExpensesType::Construction, _price[Price::BuildSignals]); } else { if (signals_copy != 0 && sigvar != GetSignalVariant(tile, track)) { /* convert signals <-> semaphores */ - cost = CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildSignals] + _price[Price::ClearSignals]); + cost = CommandCost(ExpensesType::Construction, _price[Price::BuildSignals] + _price[Price::ClearSignals]); } else if (convert_signal) { /* convert button pressed */ if (ctrl_pressed || GetSignalVariant(tile, track) != sigvar) { /* it costs money to change signal variant (light or semaphore) */ - cost = CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildSignals] + _price[Price::ClearSignals]); + cost = CommandCost(ExpensesType::Construction, _price[Price::BuildSignals] + _price[Price::ClearSignals]); } else { /* it is free to change signal type (block, exit, entry, combo, path, etc) */ cost = CommandCost(); @@ -1252,7 +1252,7 @@ static bool AdvanceSignalAutoFill(TileIndex &tile, Trackdir &trackdir, bool remo */ static CommandCost CmdSignalTrackHelper(DoCommandFlags flags, TileIndex tile, TileIndex end_tile, Track track, SignalType sigtype, SignalVariant sigvar, bool mode, bool remove, bool autofill, bool minimise_gaps, int signal_density) { - CommandCost total_cost(EXPENSES_CONSTRUCTION); + CommandCost total_cost(ExpensesType::Construction); if (end_tile >= Map::Size() || !ValParamTrackOrientation(track)) return CMD_ERROR; if (signal_density == 0 || signal_density > 20) return CMD_ERROR; @@ -1505,7 +1505,7 @@ CommandCost CmdRemoveSingleSignal(DoCommandFlags flags, TileIndex tile, Track tr MarkTileDirtyByTile(tile); } - return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::ClearSignals]); + return CommandCost(ExpensesType::Construction, _price[Price::ClearSignals]); } /** @@ -1543,7 +1543,7 @@ CommandCost CmdConvertRail(DoCommandFlags flags, TileIndex tile, TileIndex area_ TrainList affected_trains; - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); CommandCost error = CommandCost(STR_ERROR_NO_SUITABLE_RAILROAD_TRACK); // by default, there is no track to convert. bool found_convertible_track = false; // whether we actually did convert some track (see bug #7633) @@ -1786,13 +1786,13 @@ static CommandCost RemoveTrainDepot(TileIndex tile, DoCommandFlags flags) if (v != nullptr) TryPathReserve(v, true); } - return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::ClearDepotTrain]); + return CommandCost(ExpensesType::Construction, _price[Price::ClearDepotTrain]); } /** @copydoc ClearTileProc */ static CommandCost ClearTile_Rail(TileIndex tile, DoCommandFlags flags) { - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); if (flags.Test(DoCommandFlag::Auto)) { if (!IsTileOwner(tile, _current_company)) { @@ -3056,7 +3056,7 @@ static CommandCost TestAutoslopeOnRailTile(TileIndex tile, DoCommandFlags flags, /* Surface slope must not be changed */ default: if (z_old != z_new || tileh_old != tileh_new) return CommandCost(STR_ERROR_MUST_REMOVE_RAILROAD_TRACK); - return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildFoundation]); + return CommandCost(ExpensesType::Construction, _price[Price::BuildFoundation]); } /* The height of the track_corner must not be changed. The rest ensures GetRailFoundation() already. */ @@ -3064,7 +3064,7 @@ static CommandCost TestAutoslopeOnRailTile(TileIndex tile, DoCommandFlags flags, z_new += GetSlopeZInCorner(RemoveHalftileSlope(tileh_new), track_corner); if (z_old != z_new) return CommandCost(STR_ERROR_MUST_REMOVE_RAILROAD_TRACK); - CommandCost cost = CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildFoundation]); + CommandCost cost = CommandCost(ExpensesType::Construction, _price[Price::BuildFoundation]); /* Make the ground dirty, if surface slope has changed */ if (tileh_old != tileh_new) { /* If there is flat water on the lower halftile add the cost for clearing it */ @@ -3116,10 +3116,10 @@ static CommandCost TerraformTile_Rail(TileIndex tile, DoCommandFlags flags, int if (flags.Test(DoCommandFlag::Execute)) SetRailGroundType(tile, RailGroundType::Barren); /* allow terraforming */ - return CommandCost(EXPENSES_CONSTRUCTION, was_water ? _price[Price::ClearWater] : (Money)0); + return CommandCost(ExpensesType::Construction, was_water ? _price[Price::ClearWater] : (Money)0); } else if (_settings_game.construction.build_on_slopes && AutoslopeEnabled() && AutoslopeCheckForEntranceEdge(tile, z_new, tileh_new, GetRailDepotDirection(tile))) { - return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildFoundation]); + return CommandCost(ExpensesType::Construction, _price[Price::BuildFoundation]); } return Command::Do(flags, tile); } diff --git a/src/road_cmd.cpp b/src/road_cmd.cpp index 2c3f98f83e..4dd9eeef13 100644 --- a/src/road_cmd.cpp +++ b/src/road_cmd.cpp @@ -356,7 +356,7 @@ static CommandCost RemoveRoad(TileIndex tile, DoCommandFlags flags, RoadBits pie /* If it's the last roadtype, just clear the whole tile */ if (GetRoadType(tile, OtherRoadTramType(rtt)) == INVALID_ROADTYPE) return Command::Do(flags, tile); - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); if (IsTileType(tile, TileType::TunnelBridge)) { /* Removing any roadbit in the bridge axis removes the roadtype (that's the behaviour remove-long-roads needs) */ if (!AxisToRoadBits(DiagDirToAxis(GetTunnelBridgeDirection(tile))).Any(pieces)) return CommandCost((rtt == RoadTramType::Tram) ? STR_ERROR_THERE_IS_NO_TRAMWAY : STR_ERROR_THERE_IS_NO_ROAD); @@ -476,7 +476,7 @@ static CommandCost RemoveRoad(TileIndex tile, DoCommandFlags flags, RoadBits pie } } - CommandCost cost(EXPENSES_CONSTRUCTION, pieces.Count() * RoadClearCost(existing_rt)); + CommandCost cost(ExpensesType::Construction, pieces.Count() * RoadClearCost(existing_rt)); /* If we build a foundation we have to pay for it. */ if (f == FOUNDATION_NONE && GetRoadFoundation(tileh, present) != FOUNDATION_NONE) cost.AddCost(_price[Price::BuildFoundation]); @@ -514,7 +514,7 @@ static CommandCost RemoveRoad(TileIndex tile, DoCommandFlags flags, RoadBits pie MarkTileDirtyByTile(tile); YapfNotifyTrackLayoutChange(tile, railtrack); } - return CommandCost(EXPENSES_CONSTRUCTION, RoadClearCost(existing_rt) * 2); + return CommandCost(ExpensesType::Construction, RoadClearCost(existing_rt) * 2); } default: @@ -558,7 +558,7 @@ static CommandCost CheckRoadSlope(Slope tileh, RoadBits *pieces, RoadBits existi if (_settings_game.construction.build_on_slopes && !_invalid_tileh_slopes_road[0][tileh].Any(other | type_bits)) { /* If we add leveling we've got to pay for it */ - if ((other | existing).None()) return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildFoundation]); + if ((other | existing).None()) return CommandCost(ExpensesType::Construction, _price[Price::BuildFoundation]); return CommandCost(); } @@ -578,12 +578,12 @@ static CommandCost CheckRoadSlope(Slope tileh, RoadBits *pieces, RoadBits existi if (_settings_game.construction.build_on_slopes) { /* If we add foundation we've got to pay for it */ - if ((other | existing).None()) return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildFoundation]); + if ((other | existing).None()) return CommandCost(ExpensesType::Construction, _price[Price::BuildFoundation]); return CommandCost(); } } else { - if (existing.Count() == 1 && GetRoadFoundation(tileh, existing) == FOUNDATION_NONE) return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildFoundation]); + if (existing.Count() == 1 && GetRoadFoundation(tileh, existing) == FOUNDATION_NONE) return CommandCost(ExpensesType::Construction, _price[Price::BuildFoundation]); return CommandCost(); } } @@ -603,7 +603,7 @@ static CommandCost CheckRoadSlope(Slope tileh, RoadBits *pieces, RoadBits existi CommandCost CmdBuildRoad(DoCommandFlags flags, TileIndex tile, RoadBits pieces, RoadType rt, DisallowedRoadDirections toggle_drd, TownID town_id) { CompanyID company = _current_company; - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); RoadBits existing{}; RoadBits other_bits{}; @@ -775,7 +775,7 @@ CommandCost CmdBuildRoad(DoCommandFlags flags, TileIndex tile, RoadBits pieces, MarkDirtyAdjacentLevelCrossingTiles(tile, GetCrossingRoadAxis(tile)); MarkTileDirtyByTile(tile); } - return CommandCost(EXPENSES_CONSTRUCTION, 2 * RoadBuildCost(rt)); + return CommandCost(ExpensesType::Construction, 2 * RoadBuildCost(rt)); } case TileType::Station: { @@ -992,7 +992,7 @@ CommandCost CmdBuildLongRoad(DoCommandFlags flags, TileIndex end_tile, TileIndex * when you just 'click' on one tile to build them. */ if ((drd == DisallowedRoadDirection::Northbound || drd == DisallowedRoadDirection::Southbound) && (axis == AXIS_Y) == (start_tile == end_tile && start_half == end_half)) drd.Flip({DisallowedRoadDirection::Northbound, DisallowedRoadDirection::Southbound}); - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); CommandCost last_error = CMD_ERROR; TileIndex tile = start_tile; bool had_bridge = false; @@ -1066,7 +1066,7 @@ CommandCost CmdBuildLongRoad(DoCommandFlags flags, TileIndex end_tile, TileIndex */ std::tuple CmdRemoveLongRoad(DoCommandFlags flags, TileIndex end_tile, TileIndex start_tile, RoadType rt, Axis axis, bool start_half, bool end_half) { - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); if (start_tile >= Map::Size()) return { CMD_ERROR, 0 }; if (!ValParamRoadType(rt) || !IsValidAxis(axis)) return { CMD_ERROR, 0 }; @@ -1139,7 +1139,7 @@ CommandCost CmdBuildRoadDepot(DoCommandFlags flags, TileIndex tile, RoadType rt, { if (!ValParamRoadType(rt) || !IsValidDiagDirection(dir)) return CMD_ERROR; - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); Slope tileh = GetTileSlope(tile); if (tileh != SLOPE_FLAT) { @@ -1215,7 +1215,7 @@ static CommandCost RemoveRoadDepot(TileIndex tile, DoCommandFlags flags) DoClearSquare(tile); } - return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::ClearDepotRoad]); + return CommandCost(ExpensesType::Construction, _price[Price::ClearDepotRoad]); } /** @copydoc ClearTileProc */ @@ -1227,7 +1227,7 @@ static CommandCost ClearTile_Road(TileIndex tile, DoCommandFlags flags) /* Clear the road if only one piece is on the tile OR we are not using the DoCommandFlag::Auto flag */ if ((b.Count() == 1 && GetRoadBits(tile, RoadTramType::Tram).None()) || !flags.Test(DoCommandFlag::Auto)) { - CommandCost ret(EXPENSES_CONSTRUCTION); + CommandCost ret(ExpensesType::Construction); for (RoadTramType rtt : ROADTRAMTYPES_ALL) { if (!MayHaveRoad(tile) || GetRoadType(tile, rtt) == INVALID_ROADTYPE) continue; @@ -1241,7 +1241,7 @@ static CommandCost ClearTile_Road(TileIndex tile, DoCommandFlags flags) } case RoadTileType::Crossing: { - CommandCost ret(EXPENSES_CONSTRUCTION); + CommandCost ret(ExpensesType::Construction); if (flags.Test(DoCommandFlag::Auto)) return CommandCost(STR_ERROR_MUST_REMOVE_ROAD_FIRST); @@ -2381,11 +2381,11 @@ static CommandCost TerraformTile_Road(TileIndex tile, DoCommandFlags flags, int if (_settings_game.construction.build_on_slopes && AutoslopeEnabled()) { switch (GetRoadTileType(tile)) { case RoadTileType::Crossing: - if (!IsSteepSlope(tileh_new) && (GetTileMaxZ(tile) == z_new + GetSlopeMaxZ(tileh_new)) && HasBit(VALID_LEVEL_CROSSING_SLOPES, tileh_new)) return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildFoundation]); + if (!IsSteepSlope(tileh_new) && (GetTileMaxZ(tile) == z_new + GetSlopeMaxZ(tileh_new)) && HasBit(VALID_LEVEL_CROSSING_SLOPES, tileh_new)) return CommandCost(ExpensesType::Construction, _price[Price::BuildFoundation]); break; case RoadTileType::Depot: - if (AutoslopeCheckForEntranceEdge(tile, z_new, tileh_new, GetRoadDepotDirection(tile))) return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildFoundation]); + if (AutoslopeCheckForEntranceEdge(tile, z_new, tileh_new, GetRoadDepotDirection(tile))) return CommandCost(ExpensesType::Construction, _price[Price::BuildFoundation]); break; case RoadTileType::Normal: { @@ -2402,7 +2402,7 @@ static CommandCost TerraformTile_Road(TileIndex tile, DoCommandFlags flags, int z_new += ApplyFoundationToSlope(GetRoadFoundation(tileh_new, bits), tileh_new); /* The surface slope must not be changed */ - if ((z_old == z_new) && (tileh_old == tileh_new)) return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildFoundation]); + if ((z_old == z_new) && (tileh_old == tileh_new)) return CommandCost(ExpensesType::Construction, _price[Price::BuildFoundation]); } } break; @@ -2480,7 +2480,7 @@ CommandCost CmdConvertRoad(DoCommandFlags flags, TileIndex tile, TileIndex area_ RoadVehicleList affected_rvs; RoadTramType rtt = GetRoadTramType(to_type); - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); CommandCost error = CommandCost((rtt == RoadTramType::Tram) ? STR_ERROR_NO_SUITABLE_TRAMWAY : STR_ERROR_NO_SUITABLE_ROAD); // by default, there is no road to convert. bool found_convertible_road = false; // whether we actually did convert any road/tram (see bug #7633) diff --git a/src/roadveh.h b/src/roadveh.h index 94a043763b..df10463db6 100644 --- a/src/roadveh.h +++ b/src/roadveh.h @@ -124,7 +124,7 @@ struct RoadVehicle final : public GroundVehicle void MarkDirty() override; void UpdateDeltaXY() override; - ExpensesType GetExpenseType(bool income) const override { return income ? EXPENSES_ROADVEH_REVENUE : EXPENSES_ROADVEH_RUN; } + ExpensesType GetExpenseType(bool income) const override { return income ? ExpensesType::RoadVehRevenue : ExpensesType::RoadVehRun; } bool IsPrimaryVehicle() const override { return this->IsFrontEngine(); } void GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const override; int GetDisplaySpeed() const override { return this->gcache.last_speed / 2; } diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index a8f633b06b..521893882f 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -1740,7 +1740,7 @@ void RoadVehicle::OnNewEconomyDay() if (this->running_ticks == 0) return; - CommandCost cost(EXPENSES_ROADVEH_RUN, this->GetRunningCost() * this->running_ticks / (CalendarTime::DAYS_IN_YEAR * Ticks::DAY_TICKS)); + CommandCost cost(ExpensesType::RoadVehRun, this->GetRunningCost() * this->running_ticks / (CalendarTime::DAYS_IN_YEAR * Ticks::DAY_TICKS)); this->profit_this_year -= cost.GetCost(); this->running_ticks = 0; diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index 92cc528f6f..443f6a1086 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -904,8 +904,8 @@ static bool LoadOldCompanyYearly(LoadgameState &ls, int num) { Company *c = Company::Get(_current_company_id); - for (uint i = 0; i < 13; i++) { - if (_savegame_type == SGT_TTO && i == 6) { + for (ExpensesType i = ExpensesType::Begin; i != ExpensesType::End; ++i) { + if (_savegame_type == SGT_TTO && i == ExpensesType::Property) { _old_yearly = 0; // property maintenance } else { if (!LoadChunk(ls, nullptr, _company_yearly_chunk)) return false; diff --git a/src/script/api/script_company.cpp b/src/script/api/script_company.cpp index 844ccab851..8aca0f265d 100644 --- a/src/script/api/script_company.cpp +++ b/src/script/api/script_company.cpp @@ -286,7 +286,7 @@ /* static */ bool ScriptCompany::ChangeBankBalance(ScriptCompany::CompanyID company, Money delta, ExpensesType expenses_type, TileIndex tile) { EnforceDeityMode(false); - EnforcePrecondition(false, expenses_type < (ExpensesType)::EXPENSES_END); + EnforcePrecondition(false, expenses_type < static_cast(to_underlying(::ExpensesType::End))); EnforcePrecondition(false, tile == INVALID_TILE || ::IsValidTile(tile)); company = ResolveCompanyID(company); diff --git a/src/script/api/script_company.hpp b/src/script/api/script_company.hpp index 9e19c5da77..0bb6ef132b 100644 --- a/src/script/api/script_company.hpp +++ b/src/script/api/script_company.hpp @@ -112,20 +112,20 @@ public: * @api -ai */ enum ExpensesType : uint8_t { - EXPENSES_CONSTRUCTION = ::EXPENSES_CONSTRUCTION, ///< Construction costs. - EXPENSES_NEW_VEHICLES = ::EXPENSES_NEW_VEHICLES, ///< New vehicles. - EXPENSES_TRAIN_RUN = ::EXPENSES_TRAIN_RUN, ///< Running costs trains. - EXPENSES_ROADVEH_RUN = ::EXPENSES_ROADVEH_RUN, ///< Running costs road vehicles. - EXPENSES_AIRCRAFT_RUN = ::EXPENSES_AIRCRAFT_RUN, ///< Running costs aircraft. - EXPENSES_SHIP_RUN = ::EXPENSES_SHIP_RUN, ///< Running costs ships. - EXPENSES_PROPERTY = ::EXPENSES_PROPERTY, ///< Property costs. - EXPENSES_TRAIN_INC = ::EXPENSES_TRAIN_REVENUE, ///< Revenue from trains. - EXPENSES_ROADVEH_INC = ::EXPENSES_ROADVEH_REVENUE, ///< Revenue from road vehicles. - EXPENSES_AIRCRAFT_INC = ::EXPENSES_AIRCRAFT_REVENUE, ///< Revenue from aircraft. - EXPENSES_SHIP_INC = ::EXPENSES_SHIP_REVENUE, ///< Revenue from ships. - EXPENSES_LOAN_INT = ::EXPENSES_LOAN_INTEREST, ///< Interest payments over the loan. - EXPENSES_OTHER = ::EXPENSES_OTHER, ///< Other expenses. - EXPENSES_INVALID = ::INVALID_EXPENSES, ///< Invalid expense type. + EXPENSES_CONSTRUCTION = to_underlying(::ExpensesType::Construction), ///< Construction costs. + EXPENSES_NEW_VEHICLES = to_underlying(::ExpensesType::NewVehicles), ///< New vehicles. + EXPENSES_TRAIN_RUN = to_underlying(::ExpensesType::TrainRun), ///< Running costs trains. + EXPENSES_ROADVEH_RUN = to_underlying(::ExpensesType::RoadVehRun), ///< Running costs road vehicles. + EXPENSES_AIRCRAFT_RUN = to_underlying(::ExpensesType::AircraftRun), ///< Running costs aircraft. + EXPENSES_SHIP_RUN = to_underlying(::ExpensesType::ShipRun), ///< Running costs ships. + EXPENSES_PROPERTY = to_underlying(::ExpensesType::Property), ///< Property costs. + EXPENSES_TRAIN_INC = to_underlying(::ExpensesType::TrainRevenue), ///< Revenue from trains. + EXPENSES_ROADVEH_INC = to_underlying(::ExpensesType::RoadVehRevenue), ///< Revenue from road vehicles. + EXPENSES_AIRCRAFT_INC = to_underlying(::ExpensesType::AircraftRevenue), ///< Revenue from aircraft. + EXPENSES_SHIP_INC = to_underlying(::ExpensesType::ShipRevenue), ///< Revenue from ships. + EXPENSES_LOAN_INT = to_underlying(::ExpensesType::LoanInterest), ///< Interest payments over the loan. + EXPENSES_OTHER = to_underlying(::ExpensesType::Other), ///< Other expenses. + EXPENSES_INVALID = to_underlying(::ExpensesType::Invalid), ///< Invalid expense type. }; /** diff --git a/src/script/api/script_object.cpp b/src/script/api/script_object.cpp index 33fcceea15..932dce06d3 100644 --- a/src/script/api/script_object.cpp +++ b/src/script/api/script_object.cpp @@ -137,7 +137,7 @@ ScriptObject::DisableDoCommandScope::DisableDoCommandScope() /* static */ void ScriptObject::SetDoCommandCosts(Money value) { - GetStorage().costs = CommandCost(INVALID_EXPENSES, value); // Expense type is never read. + GetStorage().costs = CommandCost(ExpensesType::Invalid, value); // Expense type is never read. } /* static */ void ScriptObject::IncreaseDoCommandCosts(Money value) diff --git a/src/ship.h b/src/ship.h index 34306a3f10..2b23d72d0d 100644 --- a/src/ship.h +++ b/src/ship.h @@ -42,7 +42,7 @@ struct Ship final : public SpecializedVehicle { void MarkDirty() override; void UpdateDeltaXY() override; - ExpensesType GetExpenseType(bool income) const override { return income ? EXPENSES_SHIP_REVENUE : EXPENSES_SHIP_RUN; } + ExpensesType GetExpenseType(bool income) const override { return income ? ExpensesType::ShipRevenue : ExpensesType::ShipRun; } void PlayLeaveStationSound(bool force = false) const override; bool IsPrimaryVehicle() const override { return true; } void GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const override; diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index 08491fe0dc..1c7cee57ce 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -273,7 +273,7 @@ void Ship::OnNewEconomyDay() if (this->running_ticks == 0) return; - CommandCost cost(EXPENSES_SHIP_RUN, this->GetRunningCost() * this->running_ticks / (CalendarTime::DAYS_IN_YEAR * Ticks::DAY_TICKS)); + CommandCost cost(ExpensesType::ShipRun, this->GetRunningCost() * this->running_ticks / (CalendarTime::DAYS_IN_YEAR * Ticks::DAY_TICKS)); this->profit_this_year -= cost.GetCost(); this->running_ticks = 0; diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 35c597d84c..d9456726ca 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -824,7 +824,7 @@ CommandCost CheckBuildableTile(TileIndex tile, DiagDirections invalid_dirs, int return CommandCost(STR_ERROR_FLAT_LAND_REQUIRED); } - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); int flat_z = z + GetSlopeMaxZ(tileh); if (tileh != SLOPE_FLAT) { /* Forbid building if the tile faces a slope in a invalid direction. */ @@ -855,7 +855,7 @@ CommandCost CheckBuildableTile(TileIndex tile, DiagDirections invalid_dirs, int */ static CommandCost CheckFlatLandAirport(AirportTileTableIterator tile_iter, DoCommandFlags flags) { - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); int allowed_z = -1; for (; tile_iter != INVALID_TILE; ++tile_iter) { @@ -1010,7 +1010,7 @@ CommandCost IsBuoyBridgeAboveOk(TileIndex tile) */ static CommandCost CheckFlatLandRailStation(TileIndex tile_cur, TileIndex north_tile, int &allowed_z, DoCommandFlags flags, Axis axis, StationID *station, RailType rt, std::vector &affected_vehicles, StationClassID spec_class, uint16_t spec_index, uint8_t plat_len, uint8_t numtracks) { - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); DiagDirections invalid_dirs = AxisToDiagDirs(axis); const StationSpec *statspec = StationClass::Get(spec_class)->GetSpec(spec_index); @@ -1093,7 +1093,7 @@ static CommandCost CheckFlatLandRailStation(TileIndex tile_cur, TileIndex north_ */ static CommandCost CheckFlatLandRoadStop(TileIndex cur_tile, int &allowed_z, const RoadStopSpec *spec, DoCommandFlags flags, DiagDirections invalid_dirs, bool is_drive_through, StationType station_type, Axis axis, StationID *station, RoadType rt) { - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); CommandCost ret = CheckBuildableTile(cur_tile, invalid_dirs, allowed_z, !is_drive_through, false); if (ret.Failed()) return ret; @@ -1381,7 +1381,7 @@ static void RestoreTrainReservation(Train *v) */ static CommandCost CalculateRailStationCost(TileArea tile_area, DoCommandFlags flags, Axis axis, StationID *station, RailType rt, std::vector &affected_vehicles, StationClassID spec_class, uint16_t spec_index, uint8_t plat_len, uint8_t numtracks) { - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); bool length_price_ready = true; uint8_t tracknum = 0; int allowed_z = -1; @@ -1768,7 +1768,7 @@ CommandCost RemoveFromRailBaseStation(TileArea ta, std::vector &affected_st { /* Count of the number of tiles removed */ int quantity = 0; - CommandCost total_cost(EXPENSES_CONSTRUCTION); + CommandCost total_cost(ExpensesType::Construction); /* Accumulator for the errors seen during clearing. If no errors happen, * and the quantity is 0 there is no station. Otherwise it will be one * of the other error that got accumulated. */ @@ -1939,7 +1939,7 @@ CommandCost RemoveRailStation(T *st, DoCommandFlags flags, Money removal_cost) assert(ta.w != 0 && ta.h != 0); - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); /* clear all areas of the station */ for (TileIndex tile : ta) { /* only remove tiles that are actually train station tiles */ @@ -2055,7 +2055,7 @@ CommandCost CalculateRoadStopCost(TileArea tile_area, DoCommandFlags flags, bool /* Check every tile in the area. */ int allowed_z = -1; - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); for (TileIndex cur_tile : tile_area) { CommandCost ret = CheckFlatLandRoadStop(cur_tile, allowed_z, roadstopspec, flags, invalid_dirs, is_drive_through, station_type, axis, station, rt); if (ret.Failed()) return ret; @@ -2364,7 +2364,7 @@ static CommandCost RemoveRoadStop(TileIndex tile, DoCommandFlags flags, int repl } Price category = is_truck ? Price::ClearStationTruck : Price::ClearStationBus; - return CommandCost(EXPENSES_CONSTRUCTION, spec != nullptr ? spec->GetClearCost(category) : _price[category]); + return CommandCost(ExpensesType::Construction, spec != nullptr ? spec->GetClearCost(category) : _price[category]); } /** @@ -2428,7 +2428,7 @@ CommandCost RemoveRoadWaypointStop(TileIndex tile, DoCommandFlags flags, int rep } } - return CommandCost(EXPENSES_CONSTRUCTION, spec != nullptr ? spec->GetClearCost(Price::ClearStationTruck) : _price[Price::ClearStationTruck]); + return CommandCost(ExpensesType::Construction, spec != nullptr ? spec->GetClearCost(Price::ClearStationTruck) : _price[Price::ClearStationTruck]); } /** @@ -2441,7 +2441,7 @@ CommandCost RemoveRoadWaypointStop(TileIndex tile, DoCommandFlags flags, int rep */ static CommandCost RemoveGenericRoadStop(DoCommandFlags flags, const TileArea &roadstop_area, bool road_waypoint, bool remove_road) { - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); CommandCost last_error(STR_ERROR_THERE_IS_NO_STATION); bool had_success = false; @@ -2785,7 +2785,7 @@ static CommandCost RemoveAirport(TileIndex tile, DoCommandFlags flags) tile = st->airport.tile; - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); for (const Aircraft *a : Aircraft::Iterate()) { if (!a->IsNormalAircraft()) continue; @@ -2933,7 +2933,7 @@ CommandCost CmdBuildDock(DoCommandFlags flags, TileIndex tile, StationID station ret = IsDockBridgeAboveOk(tile, to_underlying(direction)); if (ret.Failed()) return ret; - CommandCost cost(EXPENSES_CONSTRUCTION, _price[Price::BuildStationDock]); + CommandCost cost(ExpensesType::Construction, _price[Price::BuildStationDock]); ret = Command::Do(flags, tile); if (ret.Failed()) return ret; cost.AddCost(ret.GetCost()); @@ -3126,7 +3126,7 @@ static CommandCost RemoveDock(TileIndex tile, DoCommandFlags flags) } } - return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::ClearStationDock]); + return CommandCost(ExpensesType::Construction, _price[Price::ClearStationDock]); } /** @@ -4974,11 +4974,11 @@ static CommandCost TerraformTile_Station(TileIndex tile, DoCommandFlags flags, i case StationType::RailWaypoint: case StationType::Rail: { if (!AutoslopeCheckForAxis(tile, z_new, tileh_new, GetRailStationAxis(tile))) break; - return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildFoundation]); + return CommandCost(ExpensesType::Construction, _price[Price::BuildFoundation]); } case StationType::Airport: - return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildFoundation]); + return CommandCost(ExpensesType::Construction, _price[Price::BuildFoundation]); case StationType::Truck: case StationType::Bus: @@ -4988,7 +4988,7 @@ static CommandCost TerraformTile_Station(TileIndex tile, DoCommandFlags flags, i } else { if (!AutoslopeCheckForEntranceEdge(tile, z_new, tileh_new, GetBayRoadStopDir(tile))) break; } - return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildFoundation]); + return CommandCost(ExpensesType::Construction, _price[Price::BuildFoundation]); } default: break; diff --git a/src/terraform_cmd.cpp b/src/terraform_cmd.cpp index 332745909e..af7af6b3a5 100644 --- a/src/terraform_cmd.cpp +++ b/src/terraform_cmd.cpp @@ -129,7 +129,7 @@ static std::tuple TerraformTileHeight(TerraformerState * /* Store the height modification */ TerraformSetHeightOfTile(ts, tile, height); - CommandCost total_cost(EXPENSES_CONSTRUCTION); + CommandCost total_cost(ExpensesType::Construction); /* Increment cost */ total_cost.AddCost(_price[Price::Terraform]); @@ -168,7 +168,7 @@ static std::tuple TerraformTileHeight(TerraformerState * */ std::tuple CmdTerraformLand(DoCommandFlags flags, TileIndex tile, Slope slope, bool dir_up) { - CommandCost total_cost(EXPENSES_CONSTRUCTION); + CommandCost total_cost(ExpensesType::Construction); int direction = (dir_up ? 1 : -1); TerraformerState ts; @@ -332,7 +332,7 @@ std::tuple CmdLevelLand(DoCommandFlags flags, Til if (h > _settings_game.construction.map_height_limit) return { CommandCost(oldh == 0 ? STR_ERROR_ALREADY_AT_SEA_LEVEL : STR_ERROR_TOO_HIGH), 0, INVALID_TILE }; Money money = GetAvailableMoneyForCommand(); - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); CommandCost last_error(lm == LM_LEVEL ? STR_ERROR_ALREADY_LEVELLED : INVALID_STRING_ID); bool had_success = false; diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 2a1d9ba035..d74beab06e 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -698,7 +698,7 @@ static CommandCost ClearTile_Town(TileIndex tile, DoCommandFlags flags) const HouseSpec *hs = HouseSpec::Get(GetHouseType(tile)); - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); cost.AddCost(hs->GetRemovalCost()); int rating = hs->remove_rating_decrease; @@ -2138,7 +2138,7 @@ static CommandCost TownCanBePlacedHere(TileIndex tile, bool check_surrounding) if (counter < VALID_TILE_GOAL) return CommandCost(STR_ERROR_SITE_UNSUITABLE); } - return CommandCost(EXPENSES_OTHER); + return CommandCost(ExpensesType::Other); } /** @@ -2208,7 +2208,7 @@ std::tuple CmdFoundTown(DoCommandFlags flags, TileIn /* multidimensional arrays have to have defined length of non-first dimension */ static_assert(lengthof(price_mult[0]) == 4); - CommandCost cost(EXPENSES_OTHER, _price[Price::BuildTown]); + CommandCost cost(ExpensesType::Other, _price[Price::BuildTown]); uint8_t mult = price_mult[city][size]; cost.MultiplyCost(mult); @@ -2217,7 +2217,7 @@ std::tuple CmdFoundTown(DoCommandFlags flags, TileIn TownID new_town = TownID::Invalid(); if (flags.Test(DoCommandFlag::Execute)) { if (cost.GetCost() > GetAvailableMoneyForCommand()) { - return { CommandCost(EXPENSES_OTHER), cost.GetCost(), TownID::Invalid() }; + return { CommandCost(ExpensesType::Other), cost.GetCost(), TownID::Invalid() }; } Backup old_generating_world(_generating_world, true); @@ -3763,7 +3763,7 @@ CommandCost CmdDoTownAction(DoCommandFlags flags, TownID town_id, TownAction act if (!GetMaskOfTownActions(_current_company, t).Test(action)) return CMD_ERROR; - CommandCost cost(EXPENSES_OTHER, _price[Price::TownAction] * GetTownActionCost(action) >> 8); + CommandCost cost(ExpensesType::Other, _price[Price::TownAction] * GetTownActionCost(action) >> 8); CommandCost ret = _town_action_proc[to_underlying(action)](t, flags); if (ret.Failed()) return ret; @@ -4224,7 +4224,7 @@ static CommandCost TerraformTile_Town(TileIndex tile, DoCommandFlags flags, int if (res != CALLBACK_FAILED && ConvertBooleanCallback(hs->grf_prop.grffile, CBID_HOUSE_AUTOSLOPE, res)) allow_terraform = false; } - if (allow_terraform) return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildFoundation]); + if (allow_terraform) return CommandCost(ExpensesType::Construction, _price[Price::BuildFoundation]); } } diff --git a/src/train.h b/src/train.h index 59ddfdd4e2..ea7fe7bfaa 100644 --- a/src/train.h +++ b/src/train.h @@ -119,7 +119,7 @@ struct Train final : public GroundVehicle { void MarkDirty() override; void UpdateDeltaXY() override; - ExpensesType GetExpenseType(bool income) const override { return income ? EXPENSES_TRAIN_REVENUE : EXPENSES_TRAIN_RUN; } + ExpensesType GetExpenseType(bool income) const override { return income ? ExpensesType::TrainRevenue : ExpensesType::TrainRun; } void PlayLeaveStationSound(bool force = false) const override; bool IsPrimaryVehicle() const override { return this->IsFrontEngine(); } void GetImage(Direction direction, EngineImageType image_type, VehicleSpriteSeq *result) const override; diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 1b12e57f19..a5971462b7 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -1477,7 +1477,7 @@ CommandCost CmdSellRailWagon(DoCommandFlags flags, Vehicle *t, bool sell_chain, return CommandCost(STR_ERROR_NO_MORE_SPACE_FOR_ORDERS); } - CommandCost cost(EXPENSES_NEW_VEHICLES); + CommandCost cost(ExpensesType::NewVehicles); for (Train *part = sell_head; part != nullptr; part = part->Next()) cost.AddCost(-part->value); /* do it? */ @@ -4284,7 +4284,7 @@ void Train::OnNewEconomyDay() if (this->running_ticks != 0) { /* running costs */ - CommandCost cost(EXPENSES_TRAIN_RUN, this->GetRunningCost() * this->running_ticks / (CalendarTime::DAYS_IN_YEAR * Ticks::DAY_TICKS)); + CommandCost cost(ExpensesType::TrainRun, this->GetRunningCost() * this->running_ticks / (CalendarTime::DAYS_IN_YEAR * Ticks::DAY_TICKS)); this->profit_this_year -= cost.GetCost(); this->running_ticks = 0; diff --git a/src/tree_cmd.cpp b/src/tree_cmd.cpp index 7dfe6beef4..1487002727 100644 --- a/src/tree_cmd.cpp +++ b/src/tree_cmd.cpp @@ -514,7 +514,7 @@ void GenerateTrees() CommandCost CmdPlantTree(DoCommandFlags flags, TileIndex tile, TileIndex start_tile, uint8_t tree_to_plant, bool diagonal) { StringID msg = INVALID_STRING_ID; - CommandCost cost(EXPENSES_OTHER); + CommandCost cost(ExpensesType::Other); if (start_tile >= Map::Size()) return CMD_ERROR; /* Check the tree type within the current climate */ @@ -735,7 +735,7 @@ static CommandCost ClearTile_Trees(TileIndex tile, DoCommandFlags flags) if (flags.Test(DoCommandFlag::Execute)) DoClearSquare(tile); - return CommandCost(EXPENSES_CONSTRUCTION, num * _price[Price::ClearTrees]); + return CommandCost(ExpensesType::Construction, num * _price[Price::ClearTrees]); } /** @copydoc GetTileDescProc */ diff --git a/src/tunnelbridge_cmd.cpp b/src/tunnelbridge_cmd.cpp index 87fda93f7f..108583c434 100644 --- a/src/tunnelbridge_cmd.cpp +++ b/src/tunnelbridge_cmd.cpp @@ -226,7 +226,7 @@ static CommandCost CheckBridgeSlope(BridgePieces bridge_piece, Axis axis, Slope if (f == FOUNDATION_NONE) return CommandCost(); - return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildFoundation]); + return CommandCost(ExpensesType::Construction, _price[Price::BuildFoundation]); } /** @@ -385,7 +385,7 @@ CommandCost CmdBuildBridge(DoCommandFlags flags, TileIndex tile_end, TileIndex t if (transport_type == TRANSPORT_WATER && (tileh_start == SLOPE_FLAT || tileh_end == SLOPE_FLAT)) return CommandCost(STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION); if (z_start != z_end) return CommandCost(STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT); - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); Owner owner; bool is_new_owner; RoadType road_rt = INVALID_ROADTYPE; @@ -701,7 +701,7 @@ CommandCost CmdBuildTunnel(DoCommandFlags flags, TileIndex start_tile, Transport /* Number of tiles at which the cost increase coefficient per tile is halved */ int tiles_bump = 25; - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); Slope end_tileh; int end_z; for (;;) { @@ -929,7 +929,7 @@ static CommandCost DoClearTunnel(TileIndex tile, DoCommandFlags flags) } } - return CommandCost(EXPENSES_CONSTRUCTION, len * base_cost); + return CommandCost(ExpensesType::Construction, len * base_cost); } @@ -1021,7 +1021,7 @@ static CommandCost DoClearBridge(TileIndex tile, DoCommandFlags flags) } } - return CommandCost(EXPENSES_CONSTRUCTION, len * base_cost); + return CommandCost(ExpensesType::Construction, len * base_cost); } /** @copydoc ClearTileProc */ @@ -2115,7 +2115,7 @@ static CommandCost TerraformTile_TunnelBridge(TileIndex tile, DoCommandFlags fla } /* Surface slope is valid and remains unchanged? */ - if (res.Succeeded() && (z_old == z_new) && (tileh_old == tileh_new)) return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildFoundation]); + if (res.Succeeded() && (z_old == z_new) && (tileh_old == tileh_new)) return CommandCost(ExpensesType::Construction, _price[Price::BuildFoundation]); } return Command::Do(flags, tile); diff --git a/src/vehicle.cpp b/src/vehicle.cpp index 02216044e3..52deb8ec50 100644 --- a/src/vehicle.cpp +++ b/src/vehicle.cpp @@ -1085,9 +1085,9 @@ void CallVehicleTicks() int z = v->z_pos; const Company *c = Company::Get(_current_company); - SubtractMoneyFromCompany(_current_company, CommandCost(EXPENSES_NEW_VEHICLES, (Money)c->settings.engine_renew_money)); + SubtractMoneyFromCompany(_current_company, CommandCost(ExpensesType::NewVehicles, (Money)c->settings.engine_renew_money)); CommandCost res = Command::Do(DoCommandFlag::Execute, v->index); - SubtractMoneyFromCompany(_current_company, CommandCost(EXPENSES_NEW_VEHICLES, -(Money)c->settings.engine_renew_money)); + SubtractMoneyFromCompany(_current_company, CommandCost(ExpensesType::NewVehicles, -(Money)c->settings.engine_renew_money)); if (!IsLocalCompany()) continue; diff --git a/src/vehicle_base.h b/src/vehicle_base.h index c00ae0b7f6..617bc7e090 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -468,7 +468,7 @@ public: * @param income whether this is income or (running) expenses of the vehicle * @return The expense type. */ - virtual ExpensesType GetExpenseType([[maybe_unused]] bool income) const { return EXPENSES_OTHER; } + virtual ExpensesType GetExpenseType([[maybe_unused]] bool income) const { return ExpensesType::Other; } /** * Play the sound associated with leaving the station diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 29029292dc..872c15836e 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -122,7 +122,7 @@ std::tuple CmdBuildVehicle(D if (cargo >= NUM_CARGO && IsValidCargoType(cargo)) return { CMD_ERROR, VehicleID::Invalid(), 0, 0, {} }; const Engine *e = Engine::Get(eid); - CommandCost value(EXPENSES_NEW_VEHICLES, e->GetCost()); + CommandCost value(ExpensesType::NewVehicles, e->GetCost()); /* Engines without valid cargo should not be available */ CargoType default_cargo = e->GetDefaultCargoType(); @@ -261,7 +261,7 @@ CommandCost CmdSellVehicle(DoCommandFlags flags, VehicleID v_id, bool sell_chain if (v->type == VehicleType::Train) { ret = CmdSellRailWagon(flags, v, sell_chain, backup_order, client_id); } else { - ret = CommandCost(EXPENSES_NEW_VEHICLES, -front->value); + ret = CommandCost(ExpensesType::NewVehicles, -front->value); if (flags.Test(DoCommandFlag::Execute)) { if (front->IsPrimaryVehicle() && backup_order) OrderBackup::Backup(front, client_id); @@ -322,23 +322,23 @@ static CommandCost GetRefitCost(const Vehicle *v, EngineID engine_type, CargoTyp switch (e->type) { case VehicleType::Ship: base_price = Price::BuildVehicleShip; - expense_type = EXPENSES_SHIP_RUN; + expense_type = ExpensesType::ShipRun; break; case VehicleType::Road: base_price = Price::BuildVehicleRoad; - expense_type = EXPENSES_ROADVEH_RUN; + expense_type = ExpensesType::RoadVehRun; break; case VehicleType::Aircraft: base_price = Price::BuildVehicleAircraft; - expense_type = EXPENSES_AIRCRAFT_RUN; + expense_type = ExpensesType::AircraftRun; break; case VehicleType::Train: base_price = (e->VehInfo().railveh_type == RAILVEH_WAGON) ? Price::BuildVehicleWagon : Price::BuildVehicleTrain; cost_factor <<= 1; - expense_type = EXPENSES_TRAIN_RUN; + expense_type = ExpensesType::TrainRun; break; default: NOT_REACHED(); @@ -708,7 +708,7 @@ CommandCost CmdDepotSellAllVehicles(DoCommandFlags flags, TileIndex tile, Vehicl { VehicleList list; - CommandCost cost(EXPENSES_NEW_VEHICLES); + CommandCost cost(ExpensesType::NewVehicles); if (!IsCompanyBuildableVehicleType(vehicle_type)) return CMD_ERROR; if (!IsDepotTile(tile) || !IsTileOwner(tile, _current_company)) return CMD_ERROR; @@ -741,7 +741,7 @@ CommandCost CmdDepotSellAllVehicles(DoCommandFlags flags, TileIndex tile, Vehicl CommandCost CmdDepotMassAutoReplace(DoCommandFlags flags, TileIndex tile, VehicleType vehicle_type) { VehicleList list; - CommandCost cost = CommandCost(EXPENSES_NEW_VEHICLES); + CommandCost cost = CommandCost(ExpensesType::NewVehicles); if (!IsCompanyBuildableVehicleType(vehicle_type)) return CMD_ERROR; if (!IsDepotTile(tile) || !IsTileOwner(tile, _current_company)) return CMD_ERROR; @@ -836,7 +836,7 @@ static void CloneVehicleName(const Vehicle *src, Vehicle *dst) */ std::tuple CmdCloneVehicle(DoCommandFlags flags, TileIndex tile, VehicleID veh_id, bool share_orders) { - CommandCost total_cost(EXPENSES_NEW_VEHICLES); + CommandCost total_cost(ExpensesType::NewVehicles); Vehicle *v = Vehicle::GetIfValid(veh_id); if (v == nullptr || !IsCompanyBuildableVehicleType(v) || !v->IsPrimaryVehicle()) return { CMD_ERROR, VehicleID::Invalid() }; diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index e45048a9d4..43d4963abb 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -130,7 +130,7 @@ CommandCost CmdBuildShipDepot(DoCommandFlags flags, TileIndex tile, Axis axis) WaterClass wc1 = GetWaterClass(tile); WaterClass wc2 = GetWaterClass(tile2); - CommandCost cost = CommandCost(EXPENSES_CONSTRUCTION, _price[Price::BuildDepotShip]); + CommandCost cost = CommandCost(ExpensesType::Construction, _price[Price::BuildDepotShip]); bool add_cost = !IsWaterTile(tile); CommandCost ret = Command::Do(flags | DoCommandFlag::Auto, tile); @@ -305,7 +305,7 @@ static CommandCost RemoveShipDepot(TileIndex tile, DoCommandFlags flags) MakeWaterKeepingClass(tile2, GetTileOwner(tile2)); } - return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::ClearDepotShip]); + return CommandCost(ExpensesType::Construction, _price[Price::ClearDepotShip]); } /** @@ -332,7 +332,7 @@ static uint8_t GetLockPartMinimalBridgeHeight(LockPart lock_part) */ static CommandCost DoBuildLock(TileIndex tile, DiagDirection dir, DoCommandFlags flags) { - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); TileIndexDiff delta = TileOffsByDiagDir(dir); CommandCost ret = EnsureNoVehicleOnGround(tile); @@ -448,7 +448,7 @@ static CommandCost RemoveLock(TileIndex tile, DoCommandFlags flags) MarkCanalsAndRiversAroundDirty(tile + delta); } - return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::ClearLock]); + return CommandCost(ExpensesType::Construction, _price[Price::ClearLock]); } /** @@ -503,7 +503,7 @@ CommandCost CmdBuildCanal(DoCommandFlags flags, TileIndex tile, TileIndex start_ /* Outside of the editor you can only build canals, not oceans */ if (wc != WaterClass::Canal && _game_mode != GM_EDITOR) return CMD_ERROR; - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); std::unique_ptr iter = TileIterator::Create(tile, start_tile, diagonal); for (; *iter != INVALID_TILE; ++(*iter)) { @@ -619,7 +619,7 @@ static CommandCost ClearTile_Water(TileIndex tile, DoCommandFlags flags) ClearNeighbourNonFloodingStates(tile); } - return CommandCost(EXPENSES_CONSTRUCTION, base_cost); + return CommandCost(ExpensesType::Construction, base_cost); } case WaterTileType::Coast: { @@ -635,9 +635,9 @@ static CommandCost ClearTile_Water(TileIndex tile, DoCommandFlags flags) ClearNeighbourNonFloodingStates(tile); } if (IsSlopeWithOneCornerRaised(slope)) { - return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::ClearWater]); + return CommandCost(ExpensesType::Construction, _price[Price::ClearWater]); } else { - return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::ClearRough]); + return CommandCost(ExpensesType::Construction, _price[Price::ClearRough]); } } diff --git a/src/waypoint_cmd.cpp b/src/waypoint_cmd.cpp index dc718a750d..6b162f9012 100644 --- a/src/waypoint_cmd.cpp +++ b/src/waypoint_cmd.cpp @@ -230,7 +230,7 @@ CommandCost CmdBuildRailWaypoint(DoCommandFlags flags, TileIndex start_tile, Axi TileArea new_location(start_tile, width, height); /* only AddCost for non-existing waypoints */ - CommandCost cost(EXPENSES_CONSTRUCTION); + CommandCost cost(ExpensesType::Construction); for (TileIndex cur_tile : new_location) { if (!IsRailWaypointTile(cur_tile)) cost.AddCost(_price[Price::BuildWaypointRail]); } @@ -484,7 +484,7 @@ CommandCost CmdBuildBuoy(DoCommandFlags flags, TileIndex tile) Waypoint *wp = FindDeletedWaypointCloseTo(tile, STR_SV_STNAME_BUOY, OWNER_NONE, false); if (wp == nullptr && !Waypoint::CanAllocateItem()) return CommandCost(STR_ERROR_TOO_MANY_STATIONS_LOADING); - CommandCost cost(EXPENSES_CONSTRUCTION, _price[Price::BuildWaypointBuoy]); + CommandCost cost(ExpensesType::Construction, _price[Price::BuildWaypointBuoy]); if (!IsWaterTile(tile)) { CommandCost ret = Command::Do(flags | DoCommandFlag::Auto, tile); if (ret.Failed()) return ret; @@ -559,7 +559,7 @@ CommandCost RemoveBuoy(TileIndex tile, DoCommandFlags flags) wp->delete_ctr = 0; } - return CommandCost(EXPENSES_CONSTRUCTION, _price[Price::ClearWaypointBuoy]); + return CommandCost(ExpensesType::Construction, _price[Price::ClearWaypointBuoy]); } /**