(svn r21105) -Feature-ish: Allow to sort purchase lists for trains and road vehicles by tractive effort

This commit is contained in:
planetmaker 2010-11-06 20:20:03 +00:00
parent 2364ac83a0
commit 1ee62de0a3
2 changed files with 33 additions and 5 deletions

View File

@ -231,6 +231,23 @@ static int CDECL EnginePowerSorter(const EngineID *a, const EngineID *b)
return _internal_sort_order ? -r : r; return _internal_sort_order ? -r : r;
} }
/**
* Determines order of engines by tractive effort
* @param *a first engine to compare
* @param *b second engine to compare
* @return for descending order: returns < 0 if a < b and > 0 for a > b. Vice versa for ascending order and 0 for equal
*/
static int CDECL EngineTractiveEffortSorter(const EngineID *a, const EngineID *b)
{
int va = Engine::Get(*a)->GetDisplayMaxTractiveEffort();
int vb = Engine::Get(*b)->GetDisplayMaxTractiveEffort();
int r = va - vb;
/* Use EngineID to sort instead since we want consistent sorting */
if (r == 0) return EngineNumberSorter(a, b);
return _internal_sort_order ? -r : r;
}
/** /**
* Determines order of engines by running costs * Determines order of engines by running costs
* @param *a first engine to compare * @param *a first engine to compare
@ -384,12 +401,13 @@ static int CDECL AircraftEngineCargoSorter(const EngineID *a, const EngineID *b)
return _internal_sort_order ? -r : r; return _internal_sort_order ? -r : r;
} }
static EngList_SortTypeFunction * const _sorter[][10] = {{ static EngList_SortTypeFunction * const _sorter[][11] = {{
/* Trains */ /* Trains */
&EngineNumberSorter, &EngineNumberSorter,
&EngineCostSorter, &EngineCostSorter,
&EngineSpeedSorter, &EngineSpeedSorter,
&EnginePowerSorter, &EnginePowerSorter,
&EngineTractiveEffortSorter,
&EngineIntroDateSorter, &EngineIntroDateSorter,
&EngineNameSorter, &EngineNameSorter,
&EngineRunningCostSorter, &EngineRunningCostSorter,
@ -402,6 +420,7 @@ static EngList_SortTypeFunction * const _sorter[][10] = {{
&EngineCostSorter, &EngineCostSorter,
&EngineSpeedSorter, &EngineSpeedSorter,
&EnginePowerSorter, &EnginePowerSorter,
&EngineTractiveEffortSorter,
&EngineIntroDateSorter, &EngineIntroDateSorter,
&EngineNameSorter, &EngineNameSorter,
&EngineRunningCostSorter, &EngineRunningCostSorter,
@ -430,12 +449,13 @@ static EngList_SortTypeFunction * const _sorter[][10] = {{
&AircraftEngineCargoSorter, &AircraftEngineCargoSorter,
}}; }};
static const StringID _sort_listing[][11] = {{ static const StringID _sort_listing[][12] = {{
/* Trains */ /* Trains */
STR_SORT_BY_ENGINE_ID, STR_SORT_BY_ENGINE_ID,
STR_SORT_BY_COST, STR_SORT_BY_COST,
STR_SORT_BY_MAX_SPEED, STR_SORT_BY_MAX_SPEED,
STR_SORT_BY_POWER, STR_SORT_BY_POWER,
STR_SORT_BY_TRACTIVE_EFFORT,
STR_SORT_BY_INTRO_DATE, STR_SORT_BY_INTRO_DATE,
STR_SORT_BY_NAME, STR_SORT_BY_NAME,
STR_SORT_BY_RUNNING_COST, STR_SORT_BY_RUNNING_COST,
@ -449,6 +469,7 @@ static const StringID _sort_listing[][11] = {{
STR_SORT_BY_COST, STR_SORT_BY_COST,
STR_SORT_BY_MAX_SPEED, STR_SORT_BY_MAX_SPEED,
STR_SORT_BY_POWER, STR_SORT_BY_POWER,
STR_SORT_BY_TRACTIVE_EFFORT,
STR_SORT_BY_INTRO_DATE, STR_SORT_BY_INTRO_DATE,
STR_SORT_BY_NAME, STR_SORT_BY_NAME,
STR_SORT_BY_RUNNING_COST, STR_SORT_BY_RUNNING_COST,
@ -1155,11 +1176,17 @@ struct BuildVehicleWindow : Window {
case BUILD_VEHICLE_WIDGET_SORT_DROPDOWN: { // Select sorting criteria dropdown menu case BUILD_VEHICLE_WIDGET_SORT_DROPDOWN: { // Select sorting criteria dropdown menu
uint32 hidden_mask = 0; uint32 hidden_mask = 0;
/* Disable sorting by power when the original acceleration model for road vehicles is being used. */ /* Disable sorting by power or tractive effort when the original acceleration model for road vehicles is being used. */
if (this->vehicle_type == VEH_ROAD && if (this->vehicle_type == VEH_ROAD &&
_settings_game.vehicle.roadveh_acceleration_model == AM_ORIGINAL) { _settings_game.vehicle.roadveh_acceleration_model == AM_ORIGINAL) {
SetBit(hidden_mask, 3); SetBit(hidden_mask, 3); // power
SetBit(hidden_mask, 7); 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 (this->vehicle_type == VEH_TRAIN &&
_settings_game.vehicle.train_acceleration_model == AM_ORIGINAL) {
SetBit(hidden_mask, 4); // tractive effort
} }
ShowDropDownMenu(this, _sort_listing[this->vehicle_type], this->sort_criteria, BUILD_VEHICLE_WIDGET_SORT_DROPDOWN, 0, hidden_mask); ShowDropDownMenu(this, _sort_listing[this->vehicle_type], this->sort_criteria, BUILD_VEHICLE_WIDGET_SORT_DROPDOWN, 0, hidden_mask);
break; break;

View File

@ -285,6 +285,7 @@ STR_SORT_BY_RATING_MIN :Lowest cargo ra
STR_SORT_BY_ENGINE_ID :EngineID (classic sort) STR_SORT_BY_ENGINE_ID :EngineID (classic sort)
STR_SORT_BY_COST :Cost STR_SORT_BY_COST :Cost
STR_SORT_BY_POWER :Power STR_SORT_BY_POWER :Power
STR_SORT_BY_TRACTIVE_EFFORT :Tractive effort
STR_SORT_BY_INTRO_DATE :Introduction Date STR_SORT_BY_INTRO_DATE :Introduction Date
STR_SORT_BY_RUNNING_COST :Running Cost STR_SORT_BY_RUNNING_COST :Running Cost
STR_SORT_BY_POWER_VS_RUNNING_COST :Power/Running Cost STR_SORT_BY_POWER_VS_RUNNING_COST :Power/Running Cost