1
0
Fork 0

Codechange: Build engine preview strings from separate strings. (#13579)

This replaces stuffing substrings and parameters in various global parameters and uses local parameters instead.
pull/13585/head
Peter Nelson 2025-02-16 19:02:02 +00:00 committed by GitHub
parent af00b835a1
commit d13b0e0813
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 90 additions and 85 deletions

View File

@ -120,7 +120,7 @@ struct EnginePreviewWindow : Window {
DrawVehicleEngine(r.left, r.right, this->width >> 1, y + this->vehicle_space / 2, engine, GetEnginePalette(engine, _local_company), EIT_PREVIEW); DrawVehicleEngine(r.left, r.right, this->width >> 1, y + this->vehicle_space / 2, engine, GetEnginePalette(engine, _local_company), EIT_PREVIEW);
y += this->vehicle_space; y += this->vehicle_space;
DrawStringMultiLine(r.left, r.right, y, r.bottom, GetEngineInfoString(engine), TC_FROMSTRING, SA_CENTER); DrawStringMultiLine(r.left, r.right, y, r.bottom, GetEngineInfoString(engine), TC_BLACK, SA_CENTER);
} }
void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override void OnClick([[maybe_unused]] Point pt, WidgetID widget, [[maybe_unused]] int click_count) override
@ -168,99 +168,106 @@ uint GetTotalCapacityOfArticulatedParts(EngineID engine)
return cap.GetSum<uint>(); return cap.GetSum<uint>();
} }
static StringID GetTrainEngineInfoString(const Engine *e) /**
* Get preview running cost string for an engine.
* @param e Engine.
* @returns Formatted string of running cost.
*/
static std::string GetPreviewRunningCostString(const Engine &e)
{ {
SetDParam(0, STR_ENGINE_PREVIEW_COST_WEIGHT); return GetString(TimerGameEconomy::UsingWallclockUnits() ? STR_ENGINE_PREVIEW_RUNCOST_PERIOD : STR_ENGINE_PREVIEW_RUNCOST_YEAR, e.GetRunningCost());
SetDParam(1, e->GetCost());
SetDParam(2, e->GetDisplayWeight());
SetDParam(3, (_settings_game.vehicle.train_acceleration_model != AM_ORIGINAL && GetRailTypeInfo(e->u.rail.railtype)->acceleration_type != 2) ? STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE : STR_ENGINE_PREVIEW_SPEED_POWER);
SetDParam(4, PackVelocity(e->GetDisplayMaxSpeed(), e->type));
SetDParam(5, e->GetPower());
SetDParam(6, e->GetDisplayMaxTractiveEffort());
SetDParam(7, TimerGameEconomy::UsingWallclockUnits() ? STR_ENGINE_PREVIEW_RUNCOST_PERIOD : STR_ENGINE_PREVIEW_RUNCOST_YEAR);
SetDParam(8, e->GetRunningCost());
SetDParam(9, STR_ENGINE_PREVIEW_CAPACITY);
uint capacity = GetTotalCapacityOfArticulatedParts(e->index);
SetDParam(10, capacity != 0 ? e->GetDefaultCargoType() : INVALID_CARGO);
SetDParam(11, capacity);
return STR_ENGINE_PREVIEW_TEXT4;
} }
static StringID GetAircraftEngineInfoString(const Engine *e) static std::string GetTrainEngineInfoString(const Engine &e)
{ {
CargoType cargo = e->GetDefaultCargoType(); std::stringstream res;
res << GetString(STR_ENGINE_PREVIEW_COST_WEIGHT, e.GetCost(), e.GetDisplayWeight());
res << '\n';
if (_settings_game.vehicle.train_acceleration_model != AM_ORIGINAL && GetRailTypeInfo(e.u.rail.railtype)->acceleration_type != 2) {
res << GetString(STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE, PackVelocity(e.GetDisplayMaxSpeed(), e.type), e.GetPower(), e.GetDisplayMaxTractiveEffort());
res << '\n';
} else {
res << GetString(STR_ENGINE_PREVIEW_SPEED_POWER, PackVelocity(e.GetDisplayMaxSpeed(), e.type), e.GetPower());
res << '\n';
}
res << GetPreviewRunningCostString(e);
res << '\n';
uint capacity = GetTotalCapacityOfArticulatedParts(e.index);
res << GetString(STR_ENGINE_PREVIEW_CAPACITY, capacity == 0 ? INVALID_CARGO : e.GetDefaultCargoType(), capacity);
return res.str();
}
static std::string GetAircraftEngineInfoString(const Engine &e)
{
std::stringstream res;
res << GetString(STR_ENGINE_PREVIEW_COST_MAX_SPEED, e.GetCost(), PackVelocity(e.GetDisplayMaxSpeed(), e.type));
res << '\n';
if (uint16_t range = e.GetRange(); range > 0) {
res << GetString(STR_ENGINE_PREVIEW_TYPE_RANGE, e.GetAircraftTypeText(), range);
res << '\n';
} else {
res << GetString(STR_ENGINE_PREVIEW_TYPE, e.GetAircraftTypeText());
res << '\n';
}
res << GetPreviewRunningCostString(e);
res << '\n';
CargoType cargo = e.GetDefaultCargoType();
uint16_t mail_capacity; uint16_t mail_capacity;
uint capacity = e->GetDisplayDefaultCapacity(&mail_capacity); uint capacity = e.GetDisplayDefaultCapacity(&mail_capacity);
uint16_t range = e->GetRange(); if (mail_capacity > 0) {
res << GetString(STR_ENGINE_PREVIEW_CAPACITY_2, cargo, capacity, GetCargoTypeByLabel(CT_MAIL), mail_capacity);
} else {
res << GetString(STR_ENGINE_PREVIEW_CAPACITY, cargo, capacity);
}
SetDParam(0, STR_ENGINE_PREVIEW_COST_MAX_SPEED); return res.str();
SetDParam(1, e->GetCost());
SetDParam(2, PackVelocity(e->GetDisplayMaxSpeed(), e->type));
SetDParam(3, range > 0 ? STR_ENGINE_PREVIEW_TYPE_RANGE : STR_ENGINE_PREVIEW_TYPE);
SetDParam(4, e->GetAircraftTypeText());
SetDParam(5, range);
SetDParam(7, TimerGameEconomy::UsingWallclockUnits() ? STR_ENGINE_PREVIEW_RUNCOST_PERIOD : STR_ENGINE_PREVIEW_RUNCOST_YEAR);
SetDParam(8, e->GetRunningCost());
SetDParam(9, mail_capacity > 0 ? STR_ENGINE_PREVIEW_CAPACITY_2 : STR_ENGINE_PREVIEW_CAPACITY);
SetDParam(10, cargo);
SetDParam(11, capacity);
SetDParam(12, GetCargoTypeByLabel(CT_MAIL));
SetDParam(13, mail_capacity);
return STR_ENGINE_PREVIEW_TEXT4;
} }
static StringID GetRoadVehEngineInfoString(const Engine *e) static std::string GetRoadVehEngineInfoString(const Engine &e)
{ {
SetDParam(7, TimerGameEconomy::UsingWallclockUnits() ? STR_ENGINE_PREVIEW_RUNCOST_PERIOD : STR_ENGINE_PREVIEW_RUNCOST_YEAR); std::stringstream res;
SetDParam(8, e->GetRunningCost());
SetDParam(9, STR_ENGINE_PREVIEW_CAPACITY);
uint capacity = GetTotalCapacityOfArticulatedParts(e->index);
SetDParam(10, capacity != 0 ? e->GetDefaultCargoType() : INVALID_CARGO);
SetDParam(11, capacity);
if (_settings_game.vehicle.roadveh_acceleration_model == AM_ORIGINAL) { if (_settings_game.vehicle.roadveh_acceleration_model == AM_ORIGINAL) {
SetDParam(0, STR_ENGINE_PREVIEW_COST_MAX_SPEED); res << GetString(STR_ENGINE_PREVIEW_COST_MAX_SPEED, e.GetCost(), PackVelocity(e.GetDisplayMaxSpeed(), e.type));
SetDParam(1, e->GetCost()); res << '\n';
SetDParam(2, PackVelocity(e->GetDisplayMaxSpeed(), e->type));
return STR_ENGINE_PREVIEW_TEXT3;
} else { } else {
SetDParam(0, STR_ENGINE_PREVIEW_COST_WEIGHT); res << GetString(STR_ENGINE_PREVIEW_COST_WEIGHT, e.GetCost(), e.GetDisplayWeight());
SetDParam(1, e->GetCost()); res << '\n';
SetDParam(2, e->GetDisplayWeight()); res << GetString(STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE, PackVelocity(e.GetDisplayMaxSpeed(), e.type), e.GetPower(), e.GetDisplayMaxTractiveEffort());
res << '\n';
SetDParam(3, STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE);
SetDParam(4, PackVelocity(e->GetDisplayMaxSpeed(), e->type));
SetDParam(5, e->GetPower());
SetDParam(6, e->GetDisplayMaxTractiveEffort());
return STR_ENGINE_PREVIEW_TEXT4;
} }
res << GetPreviewRunningCostString(e);
res << '\n';
uint capacity = GetTotalCapacityOfArticulatedParts(e.index);
res << GetString(STR_ENGINE_PREVIEW_CAPACITY, capacity == 0 ? INVALID_CARGO : e.GetDefaultCargoType(), capacity);
return res.str();
} }
static StringID GetShipEngineInfoString(const Engine *e) static std::string GetShipEngineInfoString(const Engine &e)
{ {
SetDParam(0, STR_ENGINE_PREVIEW_COST_MAX_SPEED); std::stringstream res;
SetDParam(1, e->GetCost());
SetDParam(2, PackVelocity(e->GetDisplayMaxSpeed(), e->type));
SetDParam(7, TimerGameEconomy::UsingWallclockUnits() ? STR_ENGINE_PREVIEW_RUNCOST_PERIOD : STR_ENGINE_PREVIEW_RUNCOST_YEAR); res << GetString(STR_ENGINE_PREVIEW_COST_MAX_SPEED, e.GetCost(), PackVelocity(e.GetDisplayMaxSpeed(), e.type));
SetDParam(8, e->GetRunningCost()); res << '\n';
SetDParam(9, STR_ENGINE_PREVIEW_CAPACITY); res << GetPreviewRunningCostString(e);
SetDParam(10, e->GetDefaultCargoType()); res << '\n';
SetDParam(11, e->GetDisplayDefaultCapacity());
return STR_ENGINE_PREVIEW_TEXT3; res << GetString(STR_ENGINE_PREVIEW_CAPACITY, e.GetDefaultCargoType(), e.GetDisplayDefaultCapacity());
return res.str();
} }
@ -270,11 +277,11 @@ static StringID GetShipEngineInfoString(const Engine *e)
* @return String describing the engine. * @return String describing the engine.
* @post \c DParam array is set up for printing the string. * @post \c DParam array is set up for printing the string.
*/ */
StringID GetEngineInfoString(EngineID engine) std::string GetEngineInfoString(EngineID engine)
{ {
const Engine *e = Engine::Get(engine); const Engine &e = *Engine::Get(engine);
switch (e->type) { switch (e.type) {
case VEH_TRAIN: case VEH_TRAIN:
return GetTrainEngineInfoString(e); return GetTrainEngineInfoString(e);

View File

@ -34,7 +34,7 @@ void EngList_Sort(GUIEngineList &el, EngList_SortTypeFunction compare);
void EngList_SortPartial(GUIEngineList &el, EngList_SortTypeFunction compare, size_t begin, size_t num_items); void EngList_SortPartial(GUIEngineList &el, EngList_SortTypeFunction compare, size_t begin, size_t num_items);
StringID GetEngineCategoryName(EngineID engine); StringID GetEngineCategoryName(EngineID engine);
StringID GetEngineInfoString(EngineID engine); std::string GetEngineInfoString(EngineID engine);
void DrawVehicleEngine(int left, int right, int preferred_x, int y, EngineID engine, PaletteID pal, EngineImageType image_type); void DrawVehicleEngine(int left, int right, int preferred_x, int y, EngineID engine, PaletteID pal, EngineImageType image_type);
void DrawTrainEngine(int left, int right, int preferred_x, int y, EngineID engine, PaletteID pal, EngineImageType image_type); void DrawTrainEngine(int left, int right, int preferred_x, int y, EngineID engine, PaletteID pal, EngineImageType image_type);

View File

@ -4337,8 +4337,6 @@ STR_ENGINE_PREVIEW_TRAM_VEHICLE :tramway vehicle
STR_ENGINE_PREVIEW_AIRCRAFT :aircraft STR_ENGINE_PREVIEW_AIRCRAFT :aircraft
STR_ENGINE_PREVIEW_SHIP :ship STR_ENGINE_PREVIEW_SHIP :ship
STR_ENGINE_PREVIEW_TEXT3 :{BLACK}{STRING2}{}{5:STRING1}{}{STRING4}
STR_ENGINE_PREVIEW_TEXT4 :{BLACK}{STRING2}{}{STRING3}{}{STRING1}{}{STRING4}
STR_ENGINE_PREVIEW_COST_WEIGHT :Cost: {CURRENCY_LONG} Weight: {WEIGHT_SHORT} STR_ENGINE_PREVIEW_COST_WEIGHT :Cost: {CURRENCY_LONG} Weight: {WEIGHT_SHORT}
STR_ENGINE_PREVIEW_COST_MAX_SPEED :Cost: {CURRENCY_LONG} Max. Speed: {VELOCITY} STR_ENGINE_PREVIEW_COST_MAX_SPEED :Cost: {CURRENCY_LONG} Max. Speed: {VELOCITY}
STR_ENGINE_PREVIEW_SPEED_POWER :Speed: {VELOCITY} Power: {POWER} STR_ENGINE_PREVIEW_SPEED_POWER :Speed: {VELOCITY} Power: {POWER}

View File

@ -430,7 +430,7 @@ struct NewsWindow : Window {
void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override void UpdateWidgetSize(WidgetID widget, Dimension &size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension &fill, [[maybe_unused]] Dimension &resize) override
{ {
StringID str = STR_NULL; std::string str;
switch (widget) { switch (widget) {
case WID_N_CAPTION: { case WID_N_CAPTION: {
/* Caption is not a real caption (so that the window cannot be moved) /* Caption is not a real caption (so that the window cannot be moved)
@ -447,16 +447,16 @@ struct NewsWindow : Window {
case WID_N_MESSAGE: case WID_N_MESSAGE:
CopyInDParam(this->ni->params); CopyInDParam(this->ni->params);
str = this->ni->string_id; str = GetString(this->ni->string_id);
break; break;
case WID_N_COMPANY_MSG: case WID_N_COMPANY_MSG:
str = this->GetCompanyMessageString(); str = GetString(this->GetCompanyMessageString());
break; break;
case WID_N_VEH_NAME: case WID_N_VEH_NAME:
case WID_N_VEH_TITLE: case WID_N_VEH_TITLE:
str = this->GetNewVehicleMessageString(widget); str = GetString(this->GetNewVehicleMessageString(widget));
break; break;
case WID_N_VEH_INFO: { case WID_N_VEH_INFO: {