Changeset - r6023:c78cfe30dfd3
[Not reviewed]
master
0 1 0
bjarni - 17 years ago 2007-02-15 17:51:39
bjarni@openttd.org
(svn r8746) -Regression r8331: build train window could sort incorrectly by EngineID with certain newGRF sets
1 file changed with 10 insertions and 1 deletions:
0 comments (0 inline, 0 general)
src/build_vehicle_gui.cpp
Show inline comments
 
@@ -215,24 +215,33 @@ static int CDECL TrainEnginePowerVsRunni
 
		* We want power/running cost, but since we usually got higher running cost than power and we store the result in an int,
 
		* we will actually calculate cunning cost/power (to make it more than 1).
 
		* Because of this, the return value have to be reversed as well and we return b - a instead of a - b.
 
		* Another thing is that both power and running costs should be doubled for multiheaded engines.
 
		* Since it would be multipling with 2 in both numerator and denumerator, it will even themselves out and we skip checking for multiheaded. */
 
	int va = (rvi_a->running_cost_base * _price.running_rail[rvi_a->running_cost_class]) / max((uint16)1, rvi_a->power);
 
	int vb = (rvi_b->running_cost_base * _price.running_rail[rvi_b->running_cost_class]) / max((uint16)1, rvi_b->power);
 
	int r = vb - va;
 

	
 
	return _internal_sort_order ? -r : r;
 
}
 

	
 
static int CDECL TrainEngineNumberSorter(const void *a, const void *b)
 
{
 
	const EngineID va = *(const EngineID*)a;
 
	const EngineID vb = *(const EngineID*)b;
 
	int r = ListPositionOfEngine(va) - ListPositionOfEngine(vb);
 

	
 
	return _internal_sort_order ? -r : r;
 
}
 

	
 
static int CDECL TrainEnginesThenWagonsSorter(const void *a, const void *b)
 
{
 
	EngineID va = *(const EngineID*)a;
 
	EngineID vb = *(const EngineID*)b;
 
	int val_a = (RailVehInfo(va)->railveh_type == RAILVEH_WAGON ? 1 : 0);
 
	int val_b = (RailVehInfo(vb)->railveh_type == RAILVEH_WAGON ? 1 : 0);
 
	int r = val_a - val_b;
 

	
 
	/* Use EngineID to sort instead since we want consistent sorting */
 
	if (r == 0) return EngineNumberSorter(a, b);
 

	
 
	return _internal_sort_order ? -r : r;
 
@@ -281,25 +290,25 @@ static int CDECL AircraftEngineCargoSort
 
	const int vb = AircraftVehInfo(*(const EngineID*)b)->passenger_capacity;
 
	const int r = va - vb;
 

	
 
	if (r == 0) {
 
		/* Use EngineID to sort instead since we want consistent sorting */
 
		return EngineNumberSorter(a, b);
 
	}
 
	return _internal_sort_order ? -r : r;
 
}
 

	
 
static EngList_SortTypeFunction * const _sorter[][9] = {{
 
	/* Trains */
 
	&EngineNumberSorter,
 
	&TrainEngineNumberSorter,
 
	&TrainEngineCostSorter,
 
	&TrainEngineSpeedSorter,
 
	&TrainEnginePowerSorter,
 
	&EngineIntroDateSorter,
 
	&EngineNameSorter,
 
	&TrainEngineRunningCostSorter,
 
	&TrainEnginePowerVsRunningCostSorter,
 
	&EngineReliabilitySorter,
 
},{
 
	/* Road vehicles */
 
	&EngineNumberSorter,
 
	&EngineIntroDateSorter,
0 comments (0 inline, 0 general)