From 1f0fd6dfab37b84b0e76a25e591e85cd16d9952e Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 21 Jun 2026 10:01:34 +0100 Subject: [PATCH] Codechange: make AccelerationModel a scoped enum (#15757) --- src/build_vehicle_gui.cpp | 10 +++++----- src/engine_gui.cpp | 4 ++-- src/rail_cmd.cpp | 2 +- src/roadveh_cmd.cpp | 18 +++++++++--------- src/saveload/afterload.cpp | 4 ++-- src/saveload/vehicle_sl.cpp | 2 +- src/settings_table.cpp | 2 +- src/settings_type.h | 4 ++-- src/table/settings/game_settings.ini | 12 ++++++------ src/train_cmd.cpp | 18 +++++++++--------- src/vehicle_cmd.cpp | 2 +- src/vehicle_gui.cpp | 4 ++-- src/vehicle_type.h | 6 +++--- 13 files changed, 44 insertions(+), 44 deletions(-) diff --git a/src/build_vehicle_gui.cpp b/src/build_vehicle_gui.cpp index ec4aff56a5..6b9e17fe7f 100644 --- a/src/build_vehicle_gui.cpp +++ b/src/build_vehicle_gui.cpp @@ -605,7 +605,7 @@ static int DrawRailEnginePurchaseInfo(int left, int right, int y, EngineID engin y += GetCharacterHeight(FontSize::Normal); /* Max tractive effort - not applicable if old acceleration or maglev */ - if (_settings_game.vehicle.train_acceleration_model != AM_ORIGINAL) { + if (_settings_game.vehicle.train_acceleration_model != AccelerationModel::Original) { bool is_maglev = true; for (RailType rt : rvi->railtypes) { is_maglev &= GetRailTypeInfo(rt)->acceleration_type == VehicleAccelerationModel::Maglev; @@ -636,7 +636,7 @@ static int DrawRoadVehPurchaseInfo(int left, int right, int y, EngineID engine_n { const Engine *e = Engine::Get(engine_number); - if (_settings_game.vehicle.roadveh_acceleration_model != AM_ORIGINAL) { + if (_settings_game.vehicle.roadveh_acceleration_model != AccelerationModel::Original) { /* Purchase Cost */ if (te.cost != 0) { DrawString(left, right, y, GetString(STR_PURCHASE_INFO_COST_REFIT, e->GetCost() + te.cost, te.cost)); @@ -1162,13 +1162,13 @@ void DisplayVehicleSortDropDown(Window *w, VehicleType vehicle_type, int selecte { uint32_t hidden_mask = 0; /* Disable sorting by power or tractive effort when the original acceleration model for road vehicles is being used. */ - if (vehicle_type == VehicleType::Road && _settings_game.vehicle.roadveh_acceleration_model == AM_ORIGINAL) { + if (vehicle_type == VehicleType::Road && _settings_game.vehicle.roadveh_acceleration_model == AccelerationModel::Original) { SetBit(hidden_mask, 3); // power SetBit(hidden_mask, 4); // tractive effort SetBit(hidden_mask, 8); // power by running costs } /* Disable sorting by tractive effort when the original acceleration model for trains is being used. */ - if (vehicle_type == VehicleType::Train && _settings_game.vehicle.train_acceleration_model == AM_ORIGINAL) { + if (vehicle_type == VehicleType::Train && _settings_game.vehicle.train_acceleration_model == AccelerationModel::Original) { SetBit(hidden_mask, 4); // tractive effort } ShowDropDownMenu(w, GetEngineSortNames(vehicle_type), selected, button, 0, hidden_mask); @@ -1819,7 +1819,7 @@ struct BuildVehicleWindow : Window { if (!gui_scope) return; /* When switching to original acceleration model for road vehicles, clear the selected sort criteria if it is not available now. */ if (this->vehicle_type == VehicleType::Road && - _settings_game.vehicle.roadveh_acceleration_model == AM_ORIGINAL && + _settings_game.vehicle.roadveh_acceleration_model == AccelerationModel::Original && this->sort_criteria > 7) { this->sort_criteria = 0; _engine_sort_last_criteria[VehicleType::Road] = 0; diff --git a/src/engine_gui.cpp b/src/engine_gui.cpp index 6053953a2c..904bdffd89 100644 --- a/src/engine_gui.cpp +++ b/src/engine_gui.cpp @@ -339,7 +339,7 @@ static std::string GetTrainEngineInfoString(const Engine &e) is_maglev &= GetRailTypeInfo(rt)->acceleration_type == VehicleAccelerationModel::Maglev; } - if (_settings_game.vehicle.train_acceleration_model != AM_ORIGINAL && !is_maglev) { + if (_settings_game.vehicle.train_acceleration_model != AccelerationModel::Original && !is_maglev) { res << GetString(STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE, PackVelocity(e.GetDisplayMaxSpeed(), e.type), e.GetPower(), e.GetDisplayMaxTractiveEffort()); res << '\n'; } else { @@ -390,7 +390,7 @@ static std::string GetRoadVehEngineInfoString(const Engine &e) { std::stringstream res; - if (_settings_game.vehicle.roadveh_acceleration_model == AM_ORIGINAL) { + if (_settings_game.vehicle.roadveh_acceleration_model == AccelerationModel::Original) { res << GetString(STR_ENGINE_PREVIEW_COST_MAX_SPEED, e.GetCost(), PackVelocity(e.GetDisplayMaxSpeed(), e.type)); res << '\n'; } else { diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index ff2928e12a..c4546c7d63 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -2919,7 +2919,7 @@ static void GetTileDesc_Rail(TileIndex tile, TileDesc &td) case RailTileType::Depot: td.str = STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT; - if (_settings_game.vehicle.train_acceleration_model != AM_ORIGINAL) { + if (_settings_game.vehicle.train_acceleration_model != AccelerationModel::Original) { if (td.rail_speed > 0) { td.rail_speed = std::min(td.rail_speed, 61); } else { diff --git a/src/roadveh_cmd.cpp b/src/roadveh_cmd.cpp index 3fa4ca7148..8b26c19896 100644 --- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -331,7 +331,7 @@ CommandCost CmdBuildRoadVehicle(DoCommandFlags flags, TileIndex tile, const Engi } RoadVehUpdateCache(v); /* Initialize cached values for realistic acceleration. */ - if (_settings_game.vehicle.roadveh_acceleration_model != AM_ORIGINAL) v->CargoChanged(); + if (_settings_game.vehicle.roadveh_acceleration_model != AccelerationModel::Original) v->CargoChanged(); v->UpdatePosition(); @@ -469,7 +469,7 @@ inline int RoadVehicle::GetCurrentMaxSpeed() const /* Limit speed to 50% while reversing, 75% in curves. */ for (const RoadVehicle *u = this; u != nullptr; u = u->Next()) { - if (_settings_game.vehicle.roadveh_acceleration_model == AM_REALISTIC) { + if (_settings_game.vehicle.roadveh_acceleration_model == AccelerationModel::Realistic) { if (this->state <= RVSB_TRACKDIR_MASK && IsReversingRoadTrackdir(static_cast(this->state))) { max_speed = this->gcache.cached_max_track_speed / 2; break; @@ -743,10 +743,10 @@ int RoadVehicle::UpdateSpeed() { switch (_settings_game.vehicle.roadveh_acceleration_model) { default: NOT_REACHED(); - case AM_ORIGINAL: + case AccelerationModel::Original: return this->DoUpdateSpeed(this->overtaking != 0 ? 512 : 256, 0, this->GetCurrentMaxSpeed()); - case AM_REALISTIC: + case AccelerationModel::Realistic: return this->DoUpdateSpeed(this->GetAcceleration() + (this->overtaking != 0 ? 256 : 0), this->GetAccelerationStatus() == AS_BRAKE ? 0 : 4, this->GetCurrentMaxSpeed()); } } @@ -829,7 +829,7 @@ static void RoadVehCheckOvertake(RoadVehicle *v, RoadVehicle *u) /* Can't overtake a vehicle that is moving faster than us. If the vehicle in front is * accelerating, take the maximum speed for the comparison, else the current speed. * Original acceleration always accelerates, so always use the maximum speed. */ - int u_speed = (_settings_game.vehicle.roadveh_acceleration_model == AM_ORIGINAL || u->GetAcceleration() > 0) ? u->GetCurrentMaxSpeed() : u->cur_speed; + int u_speed = (_settings_game.vehicle.roadveh_acceleration_model == AccelerationModel::Original || u->GetAcceleration() > 0) ? u->GetCurrentMaxSpeed() : u->cur_speed; if (u_speed >= v->GetCurrentMaxSpeed() && !u->vehstatus.Test(VehState::Stopped) && u->cur_speed != 0) { @@ -858,7 +858,7 @@ static void RoadVehCheckOvertake(RoadVehicle *v, RoadVehicle *u) static void RoadZPosAffectSpeed(RoadVehicle *v, int old_z) { - if (old_z == v->z_pos || _settings_game.vehicle.roadveh_acceleration_model != AM_ORIGINAL) return; + if (old_z == v->z_pos || _settings_game.vehicle.roadveh_acceleration_model != AccelerationModel::Original) return; if (old_z < v->z_pos) { v->cur_speed = v->cur_speed * 232 / 256; // slow down by ~10% @@ -1341,7 +1341,7 @@ again: } if (new_dir != v->direction) { v->direction = new_dir; - if (_settings_game.vehicle.roadveh_acceleration_model == AM_ORIGINAL) v->cur_speed -= v->cur_speed >> 2; + if (_settings_game.vehicle.roadveh_acceleration_model == AccelerationModel::Original) v->cur_speed -= v->cur_speed >> 2; } v->x_pos = x; v->y_pos = y; @@ -1414,7 +1414,7 @@ again: if (new_dir != v->direction) { v->direction = new_dir; - if (_settings_game.vehicle.roadveh_acceleration_model == AM_ORIGINAL) v->cur_speed -= v->cur_speed >> 2; + if (_settings_game.vehicle.roadveh_acceleration_model == AccelerationModel::Original) v->cur_speed -= v->cur_speed >> 2; } v->x_pos = x; @@ -1469,7 +1469,7 @@ again: Direction old_dir = v->direction; if (new_dir != old_dir) { v->direction = new_dir; - if (_settings_game.vehicle.roadveh_acceleration_model == AM_ORIGINAL) v->cur_speed -= v->cur_speed >> 2; + if (_settings_game.vehicle.roadveh_acceleration_model == AccelerationModel::Original) v->cur_speed -= v->cur_speed >> 2; /* Delay the vehicle in curves by making it require one additional frame per turning direction (two in total). * A vehicle has to spend at least 9 frames on a tile, so the following articulated part can follow. diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 4863b7594c..4e20cea8cc 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -761,7 +761,7 @@ bool AfterLoadGame() */ if (IsSavegameVersionBefore(SLV_4, 2)) _settings_game.station.modified_catchment = false; if (IsSavegameVersionBefore(SLV_6, 1)) _settings_game.pf.forbid_90_deg = false; - if (IsSavegameVersionBefore(SLV_21)) _settings_game.vehicle.train_acceleration_model = 0; + if (IsSavegameVersionBefore(SLV_21)) _settings_game.vehicle.train_acceleration_model = AccelerationModel::Original; if (IsSavegameVersionBefore(SLV_90)) _settings_game.vehicle.plane_speed = 4; if (IsSavegameVersionBefore(SLV_95)) _settings_game.vehicle.dynamic_engines = false; if (IsSavegameVersionBefore(SLV_96)) _settings_game.economy.station_noise_level = false; @@ -771,7 +771,7 @@ bool AfterLoadGame() if (IsSavegameVersionBefore(SLV_134)) _settings_game.economy.feeder_payment_share = 75; if (IsSavegameVersionBefore(SLV_138)) _settings_game.vehicle.plane_crashes = 2; if (IsSavegameVersionBefore(SLV_139)) { - _settings_game.vehicle.roadveh_acceleration_model = 0; + _settings_game.vehicle.roadveh_acceleration_model = AccelerationModel::Original; _settings_game.vehicle.roadveh_slope_steepness = 7; } if (IsSavegameVersionBefore(SLV_143)) _settings_game.economy.allow_town_level_crossings = true; diff --git a/src/saveload/vehicle_sl.cpp b/src/saveload/vehicle_sl.cpp index 5c28c7dcf5..7be4828c9b 100644 --- a/src/saveload/vehicle_sl.cpp +++ b/src/saveload/vehicle_sl.cpp @@ -463,7 +463,7 @@ void AfterLoadVehiclesPhase2(bool part_of_load) } RoadVehUpdateCache(rv); - if (_settings_game.vehicle.roadveh_acceleration_model != AM_ORIGINAL) { + if (_settings_game.vehicle.roadveh_acceleration_model != AccelerationModel::Original) { rv->CargoChanged(); } } diff --git a/src/settings_table.cpp b/src/settings_table.cpp index a99704dee9..848fea9022 100644 --- a/src/settings_table.cpp +++ b/src/settings_table.cpp @@ -342,7 +342,7 @@ static void TrainSlopeSteepnessChanged(int32_t) */ static void RoadVehAccelerationModelChanged(int32_t) { - if (_settings_game.vehicle.roadveh_acceleration_model != AM_ORIGINAL) { + if (_settings_game.vehicle.roadveh_acceleration_model != AccelerationModel::Original) { for (RoadVehicle *rv : RoadVehicle::Iterate()) { if (rv->IsFrontEngine()) { rv->CargoChanged(); diff --git a/src/settings_type.h b/src/settings_type.h index a2c8600b97..f38bac8bce 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -596,8 +596,8 @@ enum class RoadVehicleDrivingSide : uint8_t { struct VehicleSettings { uint8_t max_train_length; ///< maximum length for trains uint8_t smoke_amount; ///< amount of smoke/sparks locomotives produce - uint8_t train_acceleration_model; ///< realistic acceleration for trains - uint8_t roadveh_acceleration_model; ///< realistic acceleration for road vehicles + AccelerationModel train_acceleration_model; ///< realistic acceleration for trains + AccelerationModel roadveh_acceleration_model; ///< realistic acceleration for road vehicles uint8_t train_slope_steepness; ///< Steepness of hills for trains when using realistic acceleration uint8_t roadveh_slope_steepness; ///< Steepness of hills for road vehicles when using realistic acceleration bool wagon_speed_limits; ///< enable wagon speed limits diff --git a/src/table/settings/game_settings.ini b/src/table/settings/game_settings.ini index 5596adfd5f..0141f79cd3 100644 --- a/src/table/settings/game_settings.ini +++ b/src/table/settings/game_settings.ini @@ -159,9 +159,9 @@ cat = SC_BASIC var = vehicle.train_acceleration_model type = SLE_UINT8 flags = SettingFlag::GuiDropdown -def = 1 -min = 0 -max = 1 +def = AccelerationModel::Realistic +min = AccelerationModel::Original +max = AccelerationModel::Realistic interval = 1 str = STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL strhelp = STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT @@ -173,9 +173,9 @@ var = vehicle.roadveh_acceleration_model type = SLE_UINT8 from = SLV_139 flags = SettingFlag::GuiDropdown -def = 1 -min = 0 -max = 1 +def = AccelerationModel::Realistic +min = AccelerationModel::Original +max = AccelerationModel::Realistic interval = 1 str = STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL strhelp = STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 6960fe636a..9b149a7e4d 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -316,7 +316,7 @@ uint16_t Train::GetCurveSpeedLimit() const static const int absolute_max_speed = UINT16_MAX; int max_speed = absolute_max_speed; - if (_settings_game.vehicle.train_acceleration_model == AM_ORIGINAL) return max_speed; + if (_settings_game.vehicle.train_acceleration_model == AccelerationModel::Original) return max_speed; int curvecount[2] = {0, 0}; @@ -387,11 +387,11 @@ uint16_t Train::GetCurveSpeedLimit() const int Train::GetCurrentMaxSpeed() const { const Train *moving_front = this->GetMovingFront(); - int max_speed = _settings_game.vehicle.train_acceleration_model == AM_ORIGINAL ? + int max_speed = _settings_game.vehicle.train_acceleration_model == AccelerationModel::Original ? this->gcache.cached_max_track_speed : this->tcache.cached_max_curve_speed; - if (_settings_game.vehicle.train_acceleration_model == AM_REALISTIC && IsRailStationTile(moving_front->tile)) { + if (_settings_game.vehicle.train_acceleration_model == AccelerationModel::Realistic && IsRailStationTile(moving_front->tile)) { StationID sid = GetStationIndex(moving_front->tile); if (this->current_order.ShouldStopAtStation(this, sid)) { int station_ahead; @@ -417,7 +417,7 @@ int Train::GetCurrentMaxSpeed() const } for (const Train *u = this; u != nullptr; u = u->Next()) { - if (_settings_game.vehicle.train_acceleration_model == AM_REALISTIC && u->track == Track::Depot) { + if (_settings_game.vehicle.train_acceleration_model == AccelerationModel::Realistic && u->track == Track::Depot) { constexpr int DEPOT_SPEED_LIMIT = 61; max_speed = std::min(max_speed, DEPOT_SPEED_LIMIT); break; @@ -2169,7 +2169,7 @@ CommandCost CmdReverseTrainDirection(DoCommandFlags flags, VehicleID veh_id, boo v->force_proceed = TFP_NONE; InvalidateWindowData(WindowClass::VehicleView, v->index); - if (_settings_game.vehicle.train_acceleration_model != AM_ORIGINAL && v->cur_speed != 0) { + if (_settings_game.vehicle.train_acceleration_model != AccelerationModel::Original && v->cur_speed != 0) { v->flags.Flip(VehicleRailFlag::Reversing); } else { v->cur_speed = 0; @@ -3068,10 +3068,10 @@ int Train::UpdateSpeed() { switch (_settings_game.vehicle.train_acceleration_model) { default: NOT_REACHED(); - case AM_ORIGINAL: + case AccelerationModel::Original: return this->DoUpdateSpeed(this->acceleration * (this->GetAccelerationStatus() == AS_BRAKE ? -4 : 2), 0, this->GetCurrentMaxSpeed()); - case AM_REALISTIC: + case AccelerationModel::Realistic: return this->DoUpdateSpeed(this->GetAcceleration(), this->GetAccelerationStatus() == AS_BRAKE ? 0 : 2, this->GetCurrentMaxSpeed()); } } @@ -3145,7 +3145,7 @@ static const AccelerationSlowdownParams _accel_slowdown[] = { */ static inline void AffectSpeedByZChange(Train *consist, int z_diff) { - if (z_diff == 0 || _settings_game.vehicle.train_acceleration_model != AM_ORIGINAL) return; + if (z_diff == 0 || _settings_game.vehicle.train_acceleration_model != AccelerationModel::Original) return; const AccelerationSlowdownParams *asp = &_accel_slowdown[static_cast(consist->GetAccelerationType())]; @@ -3548,7 +3548,7 @@ bool TrainController(Train *v, Vehicle *nomove, bool reverse) update_signals_crossing = true; if (chosen_dir != v->GetMovingDirection()) { - if (prev == nullptr && _settings_game.vehicle.train_acceleration_model == AM_ORIGINAL) { + if (prev == nullptr && _settings_game.vehicle.train_acceleration_model == AccelerationModel::Original) { const AccelerationSlowdownParams *asp = &_accel_slowdown[static_cast(v->GetAccelerationType())]; DirDiff diff = DirDifference(v->direction, chosen_dir); v->cur_speed -= (diff == DirDiff::Right45 || diff == DirDiff::Left45 ? asp->small_turn : asp->large_turn) * v->cur_speed >> 8; diff --git a/src/vehicle_cmd.cpp b/src/vehicle_cmd.cpp index 0c05db605e..9aef20df63 100644 --- a/src/vehicle_cmd.cpp +++ b/src/vehicle_cmd.cpp @@ -542,7 +542,7 @@ std::tuple CmdRefitVehicle(DoCommandFla break; case VehicleType::Road: RoadVehUpdateCache(RoadVehicle::From(front), auto_refit); - if (_settings_game.vehicle.roadveh_acceleration_model != AM_ORIGINAL) RoadVehicle::From(front)->CargoChanged(); + if (_settings_game.vehicle.roadveh_acceleration_model != AccelerationModel::Original) RoadVehicle::From(front)->CargoChanged(); break; case VehicleType::Ship: diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index aca3f4ce47..110f0531c0 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -2634,9 +2634,9 @@ struct VehicleDetailsWindow : Window { /* Draw max speed */ uint64_t max_speed = PackVelocity(v->GetDisplayMaxSpeed(), v->type); if (v->type == VehicleType::Train || - (v->type == VehicleType::Road && _settings_game.vehicle.roadveh_acceleration_model != AM_ORIGINAL)) { + (v->type == VehicleType::Road && _settings_game.vehicle.roadveh_acceleration_model != AccelerationModel::Original)) { const GroundVehicleCache *gcache = v->GetGroundVehicleCache(); - if (v->type == VehicleType::Train && (_settings_game.vehicle.train_acceleration_model == AM_ORIGINAL || + if (v->type == VehicleType::Train && (_settings_game.vehicle.train_acceleration_model == AccelerationModel::Original || Train::From(v)->GetAccelerationType() == VehicleAccelerationModel::Maglev)) { DrawString(tr, GetString(STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED, gcache->cached_weight, gcache->cached_power, max_speed)); } else { diff --git a/src/vehicle_type.h b/src/vehicle_type.h index 17d96e2e50..21001ef303 100644 --- a/src/vehicle_type.h +++ b/src/vehicle_type.h @@ -67,9 +67,9 @@ static const uint MAX_LENGTH_VEHICLE_NAME_CHARS = 32; ///< The maximum length of static const uint VEHICLE_LENGTH = 8; /** Vehicle acceleration models. */ -enum AccelerationModel : uint8_t { - AM_ORIGINAL, - AM_REALISTIC, +enum class AccelerationModel : uint8_t { + Original, ///< Original acceleration model. + Realistic, ///< "Realistic" acceleration model. }; /** Visualisation contexts of vehicles and engines. */