Changeset - r14750:777536f68ce0
[Not reviewed]
master
0 2 0
terkhen - 14 years ago 2010-03-06 13:03:17
terkhen@openttd.org
(svn r19348) -Add: Allow to sort road vehicles by power and by power vs running cost at the engine preview window.
2 files changed with 26 insertions and 7 deletions:
0 comments (0 inline, 0 general)
src/build_vehicle_gui.cpp
Show inline comments
 
@@ -200,14 +200,13 @@ static int CDECL EngineRunningCostSorter
 

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

	
 
/* Train sorting functions */
 
static int CDECL TrainEnginePowerVsRunningCostSorter(const EngineID *a, const EngineID *b)
 
static int CDECL EnginePowerVsRunningCostSorter(const EngineID *a, const EngineID *b)
 
{
 
	const Engine *e_a = Engine::Get(*a);
 
	const Engine *e_b = Engine::Get(*b);
 

	
 
	/* Here we are using a few tricks to get the right sort.
 
	 * We want power/running cost, but since we usually got higher running cost than power and we store the result in an int,
 
@@ -221,12 +220,14 @@ static int CDECL TrainEnginePowerVsRunni
 

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

	
 
/* Train sorting functions */
 

	
 
static int CDECL TrainEngineCapacitySorter(const EngineID *a, const EngineID *b)
 
{
 
	const RailVehicleInfo *rvi_a = RailVehInfo(*a);
 
	const RailVehicleInfo *rvi_b = RailVehInfo(*b);
 

	
 
	int va = GetTotalCapacityOfArticulatedParts(*a) * (rvi_a->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
 
@@ -305,25 +306,27 @@ static EngList_SortTypeFunction * const 
 
	&EngineCostSorter,
 
	&EngineSpeedSorter,
 
	&EnginePowerSorter,
 
	&EngineIntroDateSorter,
 
	&EngineNameSorter,
 
	&EngineRunningCostSorter,
 
	&TrainEnginePowerVsRunningCostSorter,
 
	&EnginePowerVsRunningCostSorter,
 
	&EngineReliabilitySorter,
 
	&TrainEngineCapacitySorter,
 
}, {
 
	/* Road vehicles */
 
	&EngineNumberSorter,
 
	&EngineCostSorter,
 
	&EngineSpeedSorter,
 
	&EngineIntroDateSorter,
 
	&EngineNameSorter,
 
	&EngineRunningCostSorter,
 
	&EngineReliabilitySorter,
 
	&RoadVehEngineCapacitySorter,
 
	&EnginePowerSorter,
 
	&EnginePowerVsRunningCostSorter,
 
}, {
 
	/* Ships */
 
	&EngineNumberSorter,
 
	&EngineCostSorter,
 
	&EngineSpeedSorter,
 
	&EngineIntroDateSorter,
 
@@ -363,12 +366,14 @@ static const StringID _sort_listing[][11
 
	STR_SORT_BY_MAX_SPEED,
 
	STR_SORT_BY_INTRO_DATE,
 
	STR_SORT_BY_NAME,
 
	STR_SORT_BY_RUNNING_COST,
 
	STR_SORT_BY_RELIABILITY,
 
	STR_SORT_BY_CARGO_CAPACITY,
 
	STR_SORT_BY_POWER,
 
	STR_SORT_BY_POWER_VS_RUNNING_COST,
 
	INVALID_STRING_ID
 
}, {
 
	/* Ships */
 
	STR_SORT_BY_ENGINE_ID,
 
	STR_SORT_BY_COST,
 
	STR_SORT_BY_MAX_SPEED,
 
@@ -1044,15 +1049,22 @@ struct BuildVehicleWindow : Window {
 
				this->sel_engine = (i < num_items) ? this->eng_list[i] : INVALID_ENGINE;
 
				this->SetDirty();
 
				if (click_count > 1) this->OnClick(pt, BUILD_VEHICLE_WIDGET_BUILD, 1);
 
				break;
 
			}
 

	
 
			case BUILD_VEHICLE_WIDGET_SORT_DROPDOWN: // Select sorting criteria dropdown menu
 
				ShowDropDownMenu(this, _sort_listing[this->vehicle_type], this->sort_criteria, BUILD_VEHICLE_WIDGET_SORT_DROPDOWN, 0, 0);
 
				break;
 
			case BUILD_VEHICLE_WIDGET_SORT_DROPDOWN: { // Select sorting criteria dropdown menu
 
				uint32 hidden_mask = 0;
 
				/* Disable sorting by power when the original acceleration model for road vehicles is being used. */
 
				if (this->vehicle_type == VEH_ROAD &&
 
						_settings_game.vehicle.roadveh_acceleration_model == AM_ORIGINAL) {
 
					SetBit(hidden_mask, 8);
 
					SetBit(hidden_mask, 9);
 
				}
 
				ShowDropDownMenu(this, _sort_listing[this->vehicle_type], this->sort_criteria, BUILD_VEHICLE_WIDGET_SORT_DROPDOWN, 0, hidden_mask);
 
			} break;
 

	
 
			case BUILD_VEHICLE_WIDGET_CARGO_FILTER_DROPDOWN: // Select cargo filtering criteria dropdown menu
 
				ShowDropDownMenu(this, this->cargo_filter_texts, this->cargo_filter_criteria, BUILD_VEHICLE_WIDGET_CARGO_FILTER_DROPDOWN, 0, 0);
 
				break;
 

	
 
			case BUILD_VEHICLE_WIDGET_BUILD: {
 
@@ -1075,12 +1087,19 @@ struct BuildVehicleWindow : Window {
 
			}
 
		}
 
	}
 

	
 
	virtual void OnInvalidateData(int data)
 
	{
 
		/* When switching to original acceleration model for road vehicles, clear the selected sort criteria if it is not available now. */
 
		if (this->vehicle_type == VEH_ROAD &&
 
				_settings_game.vehicle.roadveh_acceleration_model == AM_ORIGINAL &&
 
				this->sort_criteria > 7) {
 
			this->sort_criteria = 0;
 
			_last_sort_criteria[VEH_ROAD] = 0;
 
		}
 
		this->eng_list.ForceRebuild();
 
	}
 

	
 
	virtual void SetStringParameters(int widget) const
 
	{
 
		switch (widget) {
src/settings.cpp
Show inline comments
 
@@ -790,13 +790,13 @@ static bool RoadVehAccelerationModelChan
 
			}
 
		}
 
	}
 

	
 
	/* These windows show acceleration values only when realistic acceleration is on. They must be redrawn after a setting change. */
 
	SetWindowClassesDirty(WC_ENGINE_PREVIEW);
 
	SetWindowClassesDirty(WC_BUILD_VEHICLE);
 
	InvalidateWindowClassesData(WC_BUILD_VEHICLE, 0);
 
	SetWindowClassesDirty(WC_VEHICLE_DETAILS);
 

	
 
	return true;
 
}
 

	
 
/**
0 comments (0 inline, 0 general)