Changeset - r2965:a5c9a7a0f3a2
[Not reviewed]
master
0 2 0
peter1138 - 18 years ago 2006-02-03 18:32:59
peter1138@openttd.org
(svn r3528) - Feature: Allow sorting of vehicle lists by model or value (based on meush's work)
2 files changed with 38 insertions and 1 deletions:
0 comments (0 inline, 0 general)
lang/english.txt
Show inline comments
 
@@ -345,6 +345,8 @@ STR_SORT_BY_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
vehicle_gui.c
Show inline comments
 
@@ -42,6 +42,8 @@ static VehicleSortListingTypeFunction Ve
 
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* c
 
	&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(c
 
	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))
0 comments (0 inline, 0 general)