diff options
author | peter1138 <peter1138@openttd.org> | 2006-02-03 18:32:59 +0000 |
---|---|---|
committer | peter1138 <peter1138@openttd.org> | 2006-02-03 18:32:59 +0000 |
commit | 144c1f39a484e5030f568cda41011791a3b5b104 (patch) | |
tree | eb36522c259294d74f3e9f2ef9888ccfd924c540 | |
parent | ad9e0548223f4ce4ba99f1cd73a1552146ba2722 (diff) | |
download | openttd-144c1f39a484e5030f568cda41011791a3b5b104.tar.xz |
(svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
-rw-r--r-- | lang/english.txt | 2 | ||||
-rw-r--r-- | vehicle_gui.c | 37 |
2 files changed, 38 insertions, 1 deletions
diff --git a/lang/english.txt b/lang/english.txt index 624ae0799..0db025bf6 100644 --- a/lang/english.txt +++ b/lang/english.txt @@ -345,6 +345,8 @@ STR_SORT_BY_AGE :Age STR_SORT_BY_RELIABILITY :Reliability STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Total capacity per cargo type STR_SORT_BY_MAX_SPEED :Maximum speed +STR_SORT_BY_MODEL :Model +STR_SORT_BY_VALUE :Value ############ range for months starts STR_0162_JAN :Jan diff --git a/vehicle_gui.c b/vehicle_gui.c index 169c3ce8b..51d810f34 100644 --- a/vehicle_gui.c +++ b/vehicle_gui.c @@ -42,6 +42,8 @@ static VehicleSortListingTypeFunction VehicleProfitLastYearSorter; static VehicleSortListingTypeFunction VehicleCargoSorter; static VehicleSortListingTypeFunction VehicleReliabilitySorter; static VehicleSortListingTypeFunction VehicleMaxSpeedSorter; +static VehicleSortListingTypeFunction VehicleModelSorter; +static VehicleSortListingTypeFunction VehicleValueSorter; static VehicleSortListingTypeFunction* const _vehicle_sorter[] = { &VehicleUnsortedSorter, @@ -52,7 +54,9 @@ static VehicleSortListingTypeFunction* const _vehicle_sorter[] = { &VehicleProfitLastYearSorter, &VehicleCargoSorter, &VehicleReliabilitySorter, - &VehicleMaxSpeedSorter + &VehicleMaxSpeedSorter, + &VehicleModelSorter, + &VehicleValueSorter, }; const StringID _vehicle_sort_listing[] = { @@ -65,6 +69,8 @@ const StringID _vehicle_sort_listing[] = { STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE, STR_SORT_BY_RELIABILITY, STR_SORT_BY_MAX_SPEED, + STR_SORT_BY_MODEL, + STR_SORT_BY_VALUE, INVALID_STRING_ID }; @@ -408,6 +414,35 @@ static int CDECL VehicleMaxSpeedSorter(const void *a, const void *b) return (_internal_sort_order & 1) ? -r : r; } +static int CDECL VehicleModelSorter(const void *a, const void *b) +{ + const Vehicle *va = GetVehicle((*(const SortStruct*)a).index); + const Vehicle *vb = GetVehicle((*(const SortStruct*)b).index); + int r = va->engine_type - vb->engine_type; + + VEHICLEUNITNUMBERSORTER(r, va, vb); + + return (_internal_sort_order & 1) ? -r : r; +} + +static int CDECL VehicleValueSorter(const void *a, const void *b) +{ + const Vehicle *va = GetVehicle((*(const SortStruct*)a).index); + const Vehicle *vb = GetVehicle((*(const SortStruct*)b).index); + const Vehicle *u; + int valuea = 0, valueb = 0; + int r; + + for (u = va; u != NULL; u = u->next) valuea += u->value; + for (u = vb; u != NULL; u = u->next) valueb += u->value; + + r = valuea - valueb; + + VEHICLEUNITNUMBERSORTER(r, va, vb); + + return (_internal_sort_order & 1) ? -r : r; +} + // this define is to match engine.c, but engine.c keeps it to itself // ENGINE_AVAILABLE is used in ReplaceVehicleWndProc #define ENGINE_AVAILABLE ((e->flags & 1 && HASBIT(info->climates, _opt.landscape)) || HASBIT(e->player_avail, _local_player)) |