mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-02-11 00:34:27 +00:00
Add #6189: Groups now count the total number of vehicles in subgroups (3298)
This commit is contained in:
parent
a393c94695
commit
8890436af1
@ -100,6 +100,9 @@ static inline bool IsAllGroupID(GroupID id_g)
|
||||
|
||||
|
||||
uint GetGroupNumEngines(CompanyID company, GroupID id_g, EngineID id_e);
|
||||
uint GetGroupNumVehicle(CompanyID company, GroupID id_g, VehicleType type);
|
||||
uint GetGroupNumProfitVehicle(CompanyID company, GroupID id_g, VehicleType type);
|
||||
Money GetGroupProfitLastYear(CompanyID company, GroupID id_g, VehicleType type);
|
||||
|
||||
void SetTrainGroupID(Train *v, GroupID grp);
|
||||
void UpdateTrainGroupID(Train *v);
|
||||
|
@ -808,6 +808,60 @@ uint GetGroupNumEngines(CompanyID company, GroupID id_g, EngineID id_e)
|
||||
return count + GroupStatistics::Get(company, id_g, e->type).num_engines[id_e];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of vehicles in the group with GroupID
|
||||
* id_g and its sub-groups.
|
||||
* @param company The company the group belongs to
|
||||
* @param id_g The GroupID of the group used
|
||||
* @param type The vehicle type of the group
|
||||
* @return The number of vehicles in the group
|
||||
*/
|
||||
uint GetGroupNumVehicle(CompanyID company, GroupID id_g, VehicleType type)
|
||||
{
|
||||
uint count = 0;
|
||||
const Group *g;
|
||||
FOR_ALL_GROUPS(g) {
|
||||
if (g->parent == id_g) count += GetGroupNumVehicle(company, g->index, type);
|
||||
}
|
||||
return count + GroupStatistics::Get(company, id_g, type).num_vehicle;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of vehicles above profit minimum age in the group with GroupID
|
||||
* id_g and its sub-groups.
|
||||
* @param company The company the group belongs to
|
||||
* @param id_g The GroupID of the group used
|
||||
* @param type The vehicle type of the group
|
||||
* @return The number of vehicles above profit minimum age in the group
|
||||
*/
|
||||
uint GetGroupNumProfitVehicle(CompanyID company, GroupID id_g, VehicleType type)
|
||||
{
|
||||
uint count = 0;
|
||||
const Group *g;
|
||||
FOR_ALL_GROUPS(g) {
|
||||
if (g->parent == id_g) count += GetGroupNumProfitVehicle(company, g->index, type);
|
||||
}
|
||||
return count + GroupStatistics::Get(company, id_g, type).num_profit_vehicle;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get last year's profit for the group with GroupID
|
||||
* id_g and its sub-groups.
|
||||
* @param company The company the group belongs to
|
||||
* @param id_g The GroupID of the group used
|
||||
* @param type The vehicle type of the group
|
||||
* @return Last year's profit for the group
|
||||
*/
|
||||
Money GetGroupProfitLastYear(CompanyID company, GroupID id_g, VehicleType type)
|
||||
{
|
||||
Money sum = 0;
|
||||
const Group *g;
|
||||
FOR_ALL_GROUPS(g) {
|
||||
if (g->parent == id_g) sum += GetGroupProfitLastYear(company, g->index, type);
|
||||
}
|
||||
return sum + GroupStatistics::Get(company, id_g, type).profit_last_year;
|
||||
}
|
||||
|
||||
void RemoveAllGroupsForCompany(const CompanyID company)
|
||||
{
|
||||
Group *g;
|
||||
|
@ -213,8 +213,10 @@ private:
|
||||
}
|
||||
this->tiny_step_height = max(this->tiny_step_height, this->column_size[VGC_PROFIT].height);
|
||||
|
||||
SetDParamMaxValue(0, GroupStatistics::Get(this->vli.company, ALL_GROUP, this->vli.vtype).num_vehicle, 3, FS_SMALL);
|
||||
this->column_size[VGC_NUMBER] = GetStringBoundingBox(STR_TINY_COMMA);
|
||||
int num_vehicle = GetGroupNumVehicle(this->vli.company, ALL_GROUP, this->vli.vtype);
|
||||
SetDParamMaxValue(0, num_vehicle, 3, FS_SMALL);
|
||||
SetDParamMaxValue(1, num_vehicle, 3, FS_SMALL);
|
||||
this->column_size[VGC_NUMBER] = GetStringBoundingBox(STR_GROUP_COUNT_WITH_SUBGROUP);
|
||||
this->tiny_step_height = max(this->tiny_step_height, this->column_size[VGC_NUMBER].height);
|
||||
|
||||
this->tiny_step_height += WD_MATRIX_TOP;
|
||||
@ -275,11 +277,13 @@ private:
|
||||
/* draw the profit icon */
|
||||
x = rtl ? x - 2 - this->column_size[VGC_PROFIT].width : x + 2 + this->column_size[VGC_AUTOREPLACE].width;
|
||||
SpriteID spr;
|
||||
if (stats.num_profit_vehicle == 0) {
|
||||
uint num_profit_vehicle = GetGroupNumProfitVehicle(this->vli.company, g_id, this->vli.vtype);
|
||||
Money profit_last_year = GetGroupProfitLastYear(this->vli.company, g_id, this->vli.vtype);
|
||||
if (num_profit_vehicle == 0) {
|
||||
spr = SPR_PROFIT_NA;
|
||||
} else if (stats.profit_last_year < 0) {
|
||||
} else if (profit_last_year < 0) {
|
||||
spr = SPR_PROFIT_NEGATIVE;
|
||||
} else if (stats.profit_last_year < 10000 * stats.num_profit_vehicle) { // TODO magic number
|
||||
} else if (profit_last_year < (Money) 10000 * num_profit_vehicle) { // TODO magic number
|
||||
spr = SPR_PROFIT_SOME;
|
||||
} else {
|
||||
spr = SPR_PROFIT_LOT;
|
||||
@ -288,8 +292,16 @@ private:
|
||||
|
||||
/* draw the number of vehicles of the group */
|
||||
x = rtl ? x - 2 - this->column_size[VGC_NUMBER].width : x + 2 + this->column_size[VGC_PROFIT].width;
|
||||
SetDParam(0, stats.num_vehicle);
|
||||
DrawString(x, x + this->column_size[VGC_NUMBER].width - 1, y + (this->tiny_step_height - this->column_size[VGC_NUMBER].height) / 2, STR_TINY_COMMA, colour, SA_RIGHT | SA_FORCE);
|
||||
int num_vehicle_with_subgroups = GetGroupNumVehicle(this->vli.company, g_id, this->vli.vtype);
|
||||
int num_vehicle = GroupStatistics::Get(this->vli.company, g_id, this->vli.vtype).num_vehicle;
|
||||
if (IsAllGroupID(g_id) || IsDefaultGroupID(g_id) || num_vehicle_with_subgroups == num_vehicle) {
|
||||
SetDParam(0, num_vehicle);
|
||||
DrawString(x, x + this->column_size[VGC_NUMBER].width - 1, y + (this->tiny_step_height - this->column_size[VGC_NUMBER].height) / 2, STR_TINY_COMMA, colour, SA_RIGHT | SA_FORCE);
|
||||
} else {
|
||||
SetDParam(0, num_vehicle);
|
||||
SetDParam(1, num_vehicle_with_subgroups - num_vehicle);
|
||||
DrawString(x, x + this->column_size[VGC_NUMBER].width - 1, y + (this->tiny_step_height - this->column_size[VGC_NUMBER].height) / 2, STR_GROUP_COUNT_WITH_SUBGROUP, colour, SA_RIGHT | SA_FORCE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -463,12 +475,12 @@ public:
|
||||
SetDParam(2, this->vehicles.size());
|
||||
SetDParam(3, this->vehicles.size());
|
||||
} else {
|
||||
const Group *g = Group::Get(this->vli.index);
|
||||
uint num_vehicle = GetGroupNumVehicle(this->vli.company, this->vli.index, this->vli.vtype);
|
||||
|
||||
SetDParam(0, STR_GROUP_NAME);
|
||||
SetDParam(1, g->index);
|
||||
SetDParam(2, g->statistics.num_vehicle);
|
||||
SetDParam(3, g->statistics.num_vehicle);
|
||||
SetDParam(1, this->vli.index);
|
||||
SetDParam(2, num_vehicle);
|
||||
SetDParam(3, num_vehicle);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -3437,6 +3437,8 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Ungrouped road
|
||||
STR_GROUP_DEFAULT_SHIPS :Ungrouped ships
|
||||
STR_GROUP_DEFAULT_AIRCRAFTS :Ungrouped aircraft
|
||||
|
||||
STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA})
|
||||
|
||||
STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Groups - click on a group to list all vehicles of this group. Drag and drop groups to arrange hierarchy.
|
||||
STR_GROUP_CREATE_TOOLTIP :{BLACK}Click to create a group
|
||||
STR_GROUP_DELETE_TOOLTIP :{BLACK}Delete the selected group
|
||||
|
Loading…
Reference in New Issue
Block a user