Add sort by vehicle count to vehicle purchase window

This commit is contained in:
Jonathan G Rennison
2020-10-12 18:25:34 +01:00
parent ca726d79f5
commit 781fd14205
3 changed files with 29 additions and 4 deletions

View File

@@ -127,6 +127,22 @@ static bool EngineIntroDateSorter(const EngineID &a, const EngineID &b)
return _engine_sort_direction ? r > 0 : r < 0; return _engine_sort_direction ? r > 0 : r < 0;
} }
/**
* Determines order of engines by vehicle count
* @param a first engine to compare
* @param b second engine to compare
* @return for descending order: returns true if a < b. Vice versa for ascending order
*/
static bool EngineVehicleCountSorter(const EngineID &a, const EngineID &b)
{
const GroupStatistics &stats = GroupStatistics::Get(_local_company, ALL_GROUP, Engine::Get(a)->type);
const int r = ((int) stats.num_engines[a]) - ((int) stats.num_engines[b]);
/* Use EngineID to sort instead since we want consistent sorting */
if (r == 0) return EngineNumberSorter(a, b);
return _engine_sort_direction ? r > 0 : r < 0;
}
/* cached values for EngineNameSorter to spare many GetString() calls */ /* cached values for EngineNameSorter to spare many GetString() calls */
static EngineID _last_engine[2] = { INVALID_ENGINE, INVALID_ENGINE }; static EngineID _last_engine[2] = { INVALID_ENGINE, INVALID_ENGINE };
@@ -430,7 +446,7 @@ static bool AircraftRangeSorter(const EngineID &a, const EngineID &b)
} }
/** Sort functions for the vehicle sort criteria, for each vehicle type. */ /** Sort functions for the vehicle sort criteria, for each vehicle type. */
EngList_SortTypeFunction * const _engine_sort_functions[][11] = {{ EngList_SortTypeFunction * const _engine_sort_functions[][12] = {{
/* Trains */ /* Trains */
&EngineNumberSorter, &EngineNumberSorter,
&EngineCostSorter, &EngineCostSorter,
@@ -443,6 +459,7 @@ EngList_SortTypeFunction * const _engine_sort_functions[][11] = {{
&EnginePowerVsRunningCostSorter, &EnginePowerVsRunningCostSorter,
&EngineReliabilitySorter, &EngineReliabilitySorter,
&TrainEngineCapacitySorter, &TrainEngineCapacitySorter,
&EngineVehicleCountSorter,
}, { }, {
/* Road vehicles */ /* Road vehicles */
&EngineNumberSorter, &EngineNumberSorter,
@@ -456,6 +473,7 @@ EngList_SortTypeFunction * const _engine_sort_functions[][11] = {{
&EnginePowerVsRunningCostSorter, &EnginePowerVsRunningCostSorter,
&EngineReliabilitySorter, &EngineReliabilitySorter,
&RoadVehEngineCapacitySorter, &RoadVehEngineCapacitySorter,
&EngineVehicleCountSorter,
}, { }, {
/* Ships */ /* Ships */
&EngineNumberSorter, &EngineNumberSorter,
@@ -466,6 +484,7 @@ EngList_SortTypeFunction * const _engine_sort_functions[][11] = {{
&EngineRunningCostSorter, &EngineRunningCostSorter,
&EngineReliabilitySorter, &EngineReliabilitySorter,
&ShipEngineCapacitySorter, &ShipEngineCapacitySorter,
&EngineVehicleCountSorter,
}, { }, {
/* Aircraft */ /* Aircraft */
&EngineNumberSorter, &EngineNumberSorter,
@@ -476,11 +495,12 @@ EngList_SortTypeFunction * const _engine_sort_functions[][11] = {{
&EngineRunningCostSorter, &EngineRunningCostSorter,
&EngineReliabilitySorter, &EngineReliabilitySorter,
&AircraftEngineCargoSorter, &AircraftEngineCargoSorter,
&EngineVehicleCountSorter,
&AircraftRangeSorter, &AircraftRangeSorter,
}}; }};
/** Dropdown menu strings for the vehicle sort criteria. */ /** Dropdown menu strings for the vehicle sort criteria. */
const StringID _engine_sort_listing[][12] = {{ const StringID _engine_sort_listing[][13] = {{
/* Trains */ /* Trains */
STR_SORT_BY_ENGINE_ID, STR_SORT_BY_ENGINE_ID,
STR_SORT_BY_COST, STR_SORT_BY_COST,
@@ -493,6 +513,7 @@ const StringID _engine_sort_listing[][12] = {{
STR_SORT_BY_POWER_VS_RUNNING_COST, STR_SORT_BY_POWER_VS_RUNNING_COST,
STR_SORT_BY_RELIABILITY, STR_SORT_BY_RELIABILITY,
STR_SORT_BY_CARGO_CAPACITY, STR_SORT_BY_CARGO_CAPACITY,
STR_SORT_BY_VEHICLE_COUNT,
INVALID_STRING_ID INVALID_STRING_ID
}, { }, {
/* Road vehicles */ /* Road vehicles */
@@ -507,6 +528,7 @@ const StringID _engine_sort_listing[][12] = {{
STR_SORT_BY_POWER_VS_RUNNING_COST, STR_SORT_BY_POWER_VS_RUNNING_COST,
STR_SORT_BY_RELIABILITY, STR_SORT_BY_RELIABILITY,
STR_SORT_BY_CARGO_CAPACITY, STR_SORT_BY_CARGO_CAPACITY,
STR_SORT_BY_VEHICLE_COUNT,
INVALID_STRING_ID INVALID_STRING_ID
}, { }, {
/* Ships */ /* Ships */
@@ -518,6 +540,7 @@ const StringID _engine_sort_listing[][12] = {{
STR_SORT_BY_RUNNING_COST, STR_SORT_BY_RUNNING_COST,
STR_SORT_BY_RELIABILITY, STR_SORT_BY_RELIABILITY,
STR_SORT_BY_CARGO_CAPACITY, STR_SORT_BY_CARGO_CAPACITY,
STR_SORT_BY_VEHICLE_COUNT,
INVALID_STRING_ID INVALID_STRING_ID
}, { }, {
/* Aircraft */ /* Aircraft */
@@ -529,6 +552,7 @@ const StringID _engine_sort_listing[][12] = {{
STR_SORT_BY_RUNNING_COST, STR_SORT_BY_RUNNING_COST,
STR_SORT_BY_RELIABILITY, STR_SORT_BY_RELIABILITY,
STR_SORT_BY_CARGO_CAPACITY, STR_SORT_BY_CARGO_CAPACITY,
STR_SORT_BY_VEHICLE_COUNT,
STR_SORT_BY_RANGE, STR_SORT_BY_RANGE,
INVALID_STRING_ID INVALID_STRING_ID
}}; }};

View File

@@ -34,8 +34,8 @@ extern bool _engine_sort_direction;
extern byte _engine_sort_last_criteria[]; extern byte _engine_sort_last_criteria[];
extern bool _engine_sort_last_order[]; extern bool _engine_sort_last_order[];
extern bool _engine_sort_show_hidden_engines[]; extern bool _engine_sort_show_hidden_engines[];
extern const StringID _engine_sort_listing[][12]; extern const StringID _engine_sort_listing[][13];
extern EngList_SortTypeFunction * const _engine_sort_functions[][11]; extern EngList_SortTypeFunction * const _engine_sort_functions[][12];
uint GetEngineListHeight(VehicleType type); uint GetEngineListHeight(VehicleType type);
void DisplayVehicleSortDropDown(Window *w, VehicleType vehicle_type, int selected, int button); void DisplayVehicleSortDropDown(Window *w, VehicleType vehicle_type, int selected, int button);

View File

@@ -314,6 +314,7 @@ STR_SORT_BY_INTRO_DATE :Introduction da
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
STR_SORT_BY_CARGO_CAPACITY :Cargo capacity STR_SORT_BY_CARGO_CAPACITY :Cargo capacity
STR_SORT_BY_VEHICLE_COUNT :Vehicle count
STR_SORT_BY_RANGE :Range STR_SORT_BY_RANGE :Range
STR_SORT_BY_POPULATION :Population STR_SORT_BY_POPULATION :Population
STR_SORT_BY_RATING :Rating STR_SORT_BY_RATING :Rating