|
|
|
@ -100,57 +100,54 @@ static CargoID _engine_sort_last_cargo_criteria[] = {CF_ANY, CF_ANY, CF_ANY, CF_
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Determines order of engines by engineID
|
|
|
|
|
* @param *a first engine to compare
|
|
|
|
|
* @param *b second engine to compare
|
|
|
|
|
* @return for descending order: returns < 0 if a < b and > 0 for a > b. Vice versa for ascending order and 0 for equal
|
|
|
|
|
* @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 int CDECL EngineNumberSorter(const EngineID *a, const EngineID *b)
|
|
|
|
|
static bool EngineNumberSorter(const EngineID &a, const EngineID &b)
|
|
|
|
|
{
|
|
|
|
|
int r = Engine::Get(*a)->list_position - Engine::Get(*b)->list_position;
|
|
|
|
|
int r = Engine::Get(a)->list_position - Engine::Get(b)->list_position;
|
|
|
|
|
|
|
|
|
|
return _engine_sort_direction ? -r : r;
|
|
|
|
|
return _engine_sort_direction ? r > 0 : r < 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Determines order of engines by introduction date
|
|
|
|
|
* @param *a first engine to compare
|
|
|
|
|
* @param *b second engine to compare
|
|
|
|
|
* @return for descending order: returns < 0 if a < b and > 0 for a > b. Vice versa for ascending order and 0 for equal
|
|
|
|
|
* @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 int CDECL EngineIntroDateSorter(const EngineID *a, const EngineID *b)
|
|
|
|
|
static bool EngineIntroDateSorter(const EngineID &a, const EngineID &b)
|
|
|
|
|
{
|
|
|
|
|
const int va = Engine::Get(*a)->intro_date;
|
|
|
|
|
const int vb = Engine::Get(*b)->intro_date;
|
|
|
|
|
const int va = Engine::Get(a)->intro_date;
|
|
|
|
|
const int vb = Engine::Get(b)->intro_date;
|
|
|
|
|
const int r = va - vb;
|
|
|
|
|
|
|
|
|
|
/* Use EngineID to sort instead since we want consistent sorting */
|
|
|
|
|
if (r == 0) return EngineNumberSorter(a, b);
|
|
|
|
|
return _engine_sort_direction ? -r : r;
|
|
|
|
|
return _engine_sort_direction ? r > 0 : r < 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Determines order of engines by name
|
|
|
|
|
* @param *a first engine to compare
|
|
|
|
|
* @param *b second engine to compare
|
|
|
|
|
* @return for descending order: returns < 0 if a < b and > 0 for a > b. Vice versa for ascending order and 0 for equal
|
|
|
|
|
* @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 int CDECL EngineNameSorter(const EngineID *a, const EngineID *b)
|
|
|
|
|
static bool EngineNameSorter(const EngineID &a, const EngineID &b)
|
|
|
|
|
{
|
|
|
|
|
static EngineID last_engine[2] = { INVALID_ENGINE, INVALID_ENGINE };
|
|
|
|
|
static char last_name[2][64] = { "\0", "\0" };
|
|
|
|
|
|
|
|
|
|
const EngineID va = *a;
|
|
|
|
|
const EngineID vb = *b;
|
|
|
|
|
|
|
|
|
|
if (va != last_engine[0]) {
|
|
|
|
|
last_engine[0] = va;
|
|
|
|
|
SetDParam(0, va);
|
|
|
|
|
if (a != last_engine[0]) {
|
|
|
|
|
last_engine[0] = a;
|
|
|
|
|
SetDParam(0, a);
|
|
|
|
|
GetString(last_name[0], STR_ENGINE_NAME, lastof(last_name[0]));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (vb != last_engine[1]) {
|
|
|
|
|
last_engine[1] = vb;
|
|
|
|
|
SetDParam(0, vb);
|
|
|
|
|
if (b != last_engine[1]) {
|
|
|
|
|
last_engine[1] = b;
|
|
|
|
|
SetDParam(0, b);
|
|
|
|
|
GetString(last_name[1], STR_ENGINE_NAME, lastof(last_name[1]));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -158,121 +155,121 @@ static int CDECL EngineNameSorter(const EngineID *a, const EngineID *b)
|
|
|
|
|
|
|
|
|
|
/* Use EngineID to sort instead since we want consistent sorting */
|
|
|
|
|
if (r == 0) return EngineNumberSorter(a, b);
|
|
|
|
|
return _engine_sort_direction ? -r : r;
|
|
|
|
|
return _engine_sort_direction ? r > 0 : r < 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Determines order of engines by reliability
|
|
|
|
|
* @param *a first engine to compare
|
|
|
|
|
* @param *b second engine to compare
|
|
|
|
|
* @return for descending order: returns < 0 if a < b and > 0 for a > b. Vice versa for ascending order and 0 for equal
|
|
|
|
|
* @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 int CDECL EngineReliabilitySorter(const EngineID *a, const EngineID *b)
|
|
|
|
|
static bool EngineReliabilitySorter(const EngineID &a, const EngineID &b)
|
|
|
|
|
{
|
|
|
|
|
const int va = Engine::Get(*a)->reliability;
|
|
|
|
|
const int vb = Engine::Get(*b)->reliability;
|
|
|
|
|
const int va = Engine::Get(a)->reliability;
|
|
|
|
|
const int vb = Engine::Get(b)->reliability;
|
|
|
|
|
const int r = va - vb;
|
|
|
|
|
|
|
|
|
|
/* Use EngineID to sort instead since we want consistent sorting */
|
|
|
|
|
if (r == 0) return EngineNumberSorter(a, b);
|
|
|
|
|
return _engine_sort_direction ? -r : r;
|
|
|
|
|
return _engine_sort_direction ? r > 0 : r < 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Determines order of engines by purchase cost
|
|
|
|
|
* @param *a first engine to compare
|
|
|
|
|
* @param *b second engine to compare
|
|
|
|
|
* @return for descending order: returns < 0 if a < b and > 0 for a > b. Vice versa for ascending order and 0 for equal
|
|
|
|
|
* @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 int CDECL EngineCostSorter(const EngineID *a, const EngineID *b)
|
|
|
|
|
static bool EngineCostSorter(const EngineID &a, const EngineID &b)
|
|
|
|
|
{
|
|
|
|
|
Money va = Engine::Get(*a)->GetCost();
|
|
|
|
|
Money vb = Engine::Get(*b)->GetCost();
|
|
|
|
|
Money va = Engine::Get(a)->GetCost();
|
|
|
|
|
Money vb = Engine::Get(b)->GetCost();
|
|
|
|
|
int r = ClampToI32(va - vb);
|
|
|
|
|
|
|
|
|
|
/* Use EngineID to sort instead since we want consistent sorting */
|
|
|
|
|
if (r == 0) return EngineNumberSorter(a, b);
|
|
|
|
|
return _engine_sort_direction ? -r : r;
|
|
|
|
|
return _engine_sort_direction ? r > 0 : r < 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Determines order of engines by speed
|
|
|
|
|
* @param *a first engine to compare
|
|
|
|
|
* @param *b second engine to compare
|
|
|
|
|
* @return for descending order: returns < 0 if a < b and > 0 for a > b. Vice versa for ascending order and 0 for equal
|
|
|
|
|
* @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 int CDECL EngineSpeedSorter(const EngineID *a, const EngineID *b)
|
|
|
|
|
static bool EngineSpeedSorter(const EngineID &a, const EngineID &b)
|
|
|
|
|
{
|
|
|
|
|
int va = Engine::Get(*a)->GetDisplayMaxSpeed();
|
|
|
|
|
int vb = Engine::Get(*b)->GetDisplayMaxSpeed();
|
|
|
|
|
int va = Engine::Get(a)->GetDisplayMaxSpeed();
|
|
|
|
|
int vb = Engine::Get(b)->GetDisplayMaxSpeed();
|
|
|
|
|
int r = va - vb;
|
|
|
|
|
|
|
|
|
|
/* Use EngineID to sort instead since we want consistent sorting */
|
|
|
|
|
if (r == 0) return EngineNumberSorter(a, b);
|
|
|
|
|
return _engine_sort_direction ? -r : r;
|
|
|
|
|
return _engine_sort_direction ? r > 0 : r < 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Determines order of engines by power
|
|
|
|
|
* @param *a first engine to compare
|
|
|
|
|
* @param *b second engine to compare
|
|
|
|
|
* @return for descending order: returns < 0 if a < b and > 0 for a > b. Vice versa for ascending order and 0 for equal
|
|
|
|
|
* @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 int CDECL EnginePowerSorter(const EngineID *a, const EngineID *b)
|
|
|
|
|
static bool EnginePowerSorter(const EngineID &a, const EngineID &b)
|
|
|
|
|
{
|
|
|
|
|
int va = Engine::Get(*a)->GetPower();
|
|
|
|
|
int vb = Engine::Get(*b)->GetPower();
|
|
|
|
|
int va = Engine::Get(a)->GetPower();
|
|
|
|
|
int vb = Engine::Get(b)->GetPower();
|
|
|
|
|
int r = va - vb;
|
|
|
|
|
|
|
|
|
|
/* Use EngineID to sort instead since we want consistent sorting */
|
|
|
|
|
if (r == 0) return EngineNumberSorter(a, b);
|
|
|
|
|
return _engine_sort_direction ? -r : r;
|
|
|
|
|
return _engine_sort_direction ? r > 0 : r < 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Determines order of engines by tractive effort
|
|
|
|
|
* @param *a first engine to compare
|
|
|
|
|
* @param *b second engine to compare
|
|
|
|
|
* @return for descending order: returns < 0 if a < b and > 0 for a > b. Vice versa for ascending order and 0 for equal
|
|
|
|
|
* @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 int CDECL EngineTractiveEffortSorter(const EngineID *a, const EngineID *b)
|
|
|
|
|
static bool EngineTractiveEffortSorter(const EngineID &a, const EngineID &b)
|
|
|
|
|
{
|
|
|
|
|
int va = Engine::Get(*a)->GetDisplayMaxTractiveEffort();
|
|
|
|
|
int vb = Engine::Get(*b)->GetDisplayMaxTractiveEffort();
|
|
|
|
|
int va = Engine::Get(a)->GetDisplayMaxTractiveEffort();
|
|
|
|
|
int vb = Engine::Get(b)->GetDisplayMaxTractiveEffort();
|
|
|
|
|
int r = va - vb;
|
|
|
|
|
|
|
|
|
|
/* Use EngineID to sort instead since we want consistent sorting */
|
|
|
|
|
if (r == 0) return EngineNumberSorter(a, b);
|
|
|
|
|
return _engine_sort_direction ? -r : r;
|
|
|
|
|
return _engine_sort_direction ? r > 0 : r < 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Determines order of engines by running costs
|
|
|
|
|
* @param *a first engine to compare
|
|
|
|
|
* @param *b second engine to compare
|
|
|
|
|
* @return for descending order: returns < 0 if a < b and > 0 for a > b. Vice versa for ascending order and 0 for equal
|
|
|
|
|
* @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 int CDECL EngineRunningCostSorter(const EngineID *a, const EngineID *b)
|
|
|
|
|
static bool EngineRunningCostSorter(const EngineID &a, const EngineID &b)
|
|
|
|
|
{
|
|
|
|
|
Money va = Engine::Get(*a)->GetRunningCost();
|
|
|
|
|
Money vb = Engine::Get(*b)->GetRunningCost();
|
|
|
|
|
Money va = Engine::Get(a)->GetRunningCost();
|
|
|
|
|
Money vb = Engine::Get(b)->GetRunningCost();
|
|
|
|
|
int r = ClampToI32(va - vb);
|
|
|
|
|
|
|
|
|
|
/* Use EngineID to sort instead since we want consistent sorting */
|
|
|
|
|
if (r == 0) return EngineNumberSorter(a, b);
|
|
|
|
|
return _engine_sort_direction ? -r : r;
|
|
|
|
|
return _engine_sort_direction ? r > 0 : r < 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Determines order of engines by running costs
|
|
|
|
|
* @param *a first engine to compare
|
|
|
|
|
* @param *b second engine to compare
|
|
|
|
|
* @return for descending order: returns < 0 if a < b and > 0 for a > b. Vice versa for ascending order and 0 for equal
|
|
|
|
|
* @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 int CDECL EnginePowerVsRunningCostSorter(const EngineID *a, const EngineID *b)
|
|
|
|
|
static bool EnginePowerVsRunningCostSorter(const EngineID &a, const EngineID &b)
|
|
|
|
|
{
|
|
|
|
|
const Engine *e_a = Engine::Get(*a);
|
|
|
|
|
const Engine *e_b = Engine::Get(*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,
|
|
|
|
@ -286,79 +283,79 @@ static int CDECL EnginePowerVsRunningCostSorter(const EngineID *a, const EngineI
|
|
|
|
|
|
|
|
|
|
/* Use EngineID to sort instead since we want consistent sorting */
|
|
|
|
|
if (r == 0) return EngineNumberSorter(a, b);
|
|
|
|
|
return _engine_sort_direction ? -r : r;
|
|
|
|
|
return _engine_sort_direction ? r > 0 : r < 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Train sorting functions */
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Determines order of train engines by capacity
|
|
|
|
|
* @param *a first engine to compare
|
|
|
|
|
* @param *b second engine to compare
|
|
|
|
|
* @return for descending order: returns < 0 if a < b and > 0 for a > b. Vice versa for ascending order and 0 for equal
|
|
|
|
|
* @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 int CDECL TrainEngineCapacitySorter(const EngineID *a, const EngineID *b)
|
|
|
|
|
static bool TrainEngineCapacitySorter(const EngineID &a, const EngineID &b)
|
|
|
|
|
{
|
|
|
|
|
const RailVehicleInfo *rvi_a = RailVehInfo(*a);
|
|
|
|
|
const RailVehicleInfo *rvi_b = RailVehInfo(*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);
|
|
|
|
|
int vb = GetTotalCapacityOfArticulatedParts(*b) * (rvi_b->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
|
|
|
|
|
int va = GetTotalCapacityOfArticulatedParts(a) * (rvi_a->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
|
|
|
|
|
int vb = GetTotalCapacityOfArticulatedParts(b) * (rvi_b->railveh_type == RAILVEH_MULTIHEAD ? 2 : 1);
|
|
|
|
|
int r = va - vb;
|
|
|
|
|
|
|
|
|
|
/* Use EngineID to sort instead since we want consistent sorting */
|
|
|
|
|
if (r == 0) return EngineNumberSorter(a, b);
|
|
|
|
|
return _engine_sort_direction ? -r : r;
|
|
|
|
|
return _engine_sort_direction ? r > 0 : r < 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Determines order of train engines by engine / wagon
|
|
|
|
|
* @param *a first engine to compare
|
|
|
|
|
* @param *b second engine to compare
|
|
|
|
|
* @return for descending order: returns < 0 if a < b and > 0 for a > b. Vice versa for ascending order and 0 for equal
|
|
|
|
|
* @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 int CDECL TrainEnginesThenWagonsSorter(const EngineID *a, const EngineID *b)
|
|
|
|
|
static bool TrainEnginesThenWagonsSorter(const EngineID &a, const EngineID &b)
|
|
|
|
|
{
|
|
|
|
|
int val_a = (RailVehInfo(*a)->railveh_type == RAILVEH_WAGON ? 1 : 0);
|
|
|
|
|
int val_b = (RailVehInfo(*b)->railveh_type == RAILVEH_WAGON ? 1 : 0);
|
|
|
|
|
int val_a = (RailVehInfo(a)->railveh_type == RAILVEH_WAGON ? 1 : 0);
|
|
|
|
|
int val_b = (RailVehInfo(b)->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 _engine_sort_direction ? -r : r;
|
|
|
|
|
return _engine_sort_direction ? r > 0 : r < 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Road vehicle sorting functions */
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Determines order of road vehicles by capacity
|
|
|
|
|
* @param *a first engine to compare
|
|
|
|
|
* @param *b second engine to compare
|
|
|
|
|
* @return for descending order: returns < 0 if a < b and > 0 for a > b. Vice versa for ascending order and 0 for equal
|
|
|
|
|
* @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 int CDECL RoadVehEngineCapacitySorter(const EngineID *a, const EngineID *b)
|
|
|
|
|
static bool RoadVehEngineCapacitySorter(const EngineID &a, const EngineID &b)
|
|
|
|
|
{
|
|
|
|
|
int va = GetTotalCapacityOfArticulatedParts(*a);
|
|
|
|
|
int vb = GetTotalCapacityOfArticulatedParts(*b);
|
|
|
|
|
int va = GetTotalCapacityOfArticulatedParts(a);
|
|
|
|
|
int vb = GetTotalCapacityOfArticulatedParts(b);
|
|
|
|
|
int r = va - vb;
|
|
|
|
|
|
|
|
|
|
/* Use EngineID to sort instead since we want consistent sorting */
|
|
|
|
|
if (r == 0) return EngineNumberSorter(a, b);
|
|
|
|
|
return _engine_sort_direction ? -r : r;
|
|
|
|
|
return _engine_sort_direction ? r > 0 : r < 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Ship vehicle sorting functions */
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Determines order of ships by capacity
|
|
|
|
|
* @param *a first engine to compare
|
|
|
|
|
* @param *b second engine to compare
|
|
|
|
|
* @return for descending order: returns < 0 if a < b and > 0 for a > b. Vice versa for ascending order and 0 for equal
|
|
|
|
|
* @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 int CDECL ShipEngineCapacitySorter(const EngineID *a, const EngineID *b)
|
|
|
|
|
static bool ShipEngineCapacitySorter(const EngineID &a, const EngineID &b)
|
|
|
|
|
{
|
|
|
|
|
const Engine *e_a = Engine::Get(*a);
|
|
|
|
|
const Engine *e_b = Engine::Get(*b);
|
|
|
|
|
const Engine *e_a = Engine::Get(a);
|
|
|
|
|
const Engine *e_b = Engine::Get(b);
|
|
|
|
|
|
|
|
|
|
int va = e_a->GetDisplayDefaultCapacity();
|
|
|
|
|
int vb = e_b->GetDisplayDefaultCapacity();
|
|
|
|
@ -366,21 +363,21 @@ static int CDECL ShipEngineCapacitySorter(const EngineID *a, const EngineID *b)
|
|
|
|
|
|
|
|
|
|
/* Use EngineID to sort instead since we want consistent sorting */
|
|
|
|
|
if (r == 0) return EngineNumberSorter(a, b);
|
|
|
|
|
return _engine_sort_direction ? -r : r;
|
|
|
|
|
return _engine_sort_direction ? r > 0 : r < 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Aircraft sorting functions */
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Determines order of aircraft by cargo
|
|
|
|
|
* @param *a first engine to compare
|
|
|
|
|
* @param *b second engine to compare
|
|
|
|
|
* @return for descending order: returns < 0 if a < b and > 0 for a > b. Vice versa for ascending order and 0 for equal
|
|
|
|
|
* @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 int CDECL AircraftEngineCargoSorter(const EngineID *a, const EngineID *b)
|
|
|
|
|
static bool AircraftEngineCargoSorter(const EngineID &a, const EngineID &b)
|
|
|
|
|
{
|
|
|
|
|
const Engine *e_a = Engine::Get(*a);
|
|
|
|
|
const Engine *e_b = Engine::Get(*b);
|
|
|
|
|
const Engine *e_a = Engine::Get(a);
|
|
|
|
|
const Engine *e_b = Engine::Get(b);
|
|
|
|
|
|
|
|
|
|
uint16 mail_a, mail_b;
|
|
|
|
|
int va = e_a->GetDisplayDefaultCapacity(&mail_a);
|
|
|
|
@ -396,25 +393,25 @@ static int CDECL AircraftEngineCargoSorter(const EngineID *a, const EngineID *b)
|
|
|
|
|
return EngineNumberSorter(a, b);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return _engine_sort_direction ? -r : r;
|
|
|
|
|
return _engine_sort_direction ? r > 0 : r < 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Determines order of aircraft by range.
|
|
|
|
|
* @param *a first engine to compare.
|
|
|
|
|
* @param *b second engine to compare.
|
|
|
|
|
* @return for descending order: returns < 0 if a < b and > 0 for a > b. Vice versa for ascending order and 0 for equal.
|
|
|
|
|
* @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 int CDECL AircraftRangeSorter(const EngineID *a, const EngineID *b)
|
|
|
|
|
static bool AircraftRangeSorter(const EngineID &a, const EngineID &b)
|
|
|
|
|
{
|
|
|
|
|
uint16 r_a = Engine::Get(*a)->GetRange();
|
|
|
|
|
uint16 r_b = Engine::Get(*b)->GetRange();
|
|
|
|
|
uint16 r_a = Engine::Get(a)->GetRange();
|
|
|
|
|
uint16 r_b = Engine::Get(b)->GetRange();
|
|
|
|
|
|
|
|
|
|
int r = r_a - r_b;
|
|
|
|
|
|
|
|
|
|
/* Use EngineID to sort instead since we want consistent sorting */
|
|
|
|
|
if (r == 0) return EngineNumberSorter(a, b);
|
|
|
|
|
return _engine_sort_direction ? -r : r;
|
|
|
|
|
return _engine_sort_direction ? r > 0 : r < 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** Sort functions for the vehicle sort criteria, for each vehicle type. */
|
|
|
|
|