Changeset - r23548:3cdac86631ad
[Not reviewed]
master
0 4 0
Charles Pigott - 6 years ago 2019-03-26 00:07:20
charlespigott@googlemail.com
Add #6189: Groups now count the total number of vehicles in subgroups (3298)
4 files changed with 82 insertions and 11 deletions:
0 comments (0 inline, 0 general)
src/group.h
Show inline comments
 
@@ -100,6 +100,9 @@ static inline bool IsAllGroupID(GroupID 
 

	
 

	
 
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);
src/group_cmd.cpp
Show inline comments
 
@@ -808,6 +808,60 @@ uint GetGroupNumEngines(CompanyID compan
 
	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;
src/group_gui.cpp
Show inline comments
 
@@ -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;
 
		}
src/lang/english.txt
Show inline comments
 
@@ -3437,6 +3437,8 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES         
 
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
0 comments (0 inline, 0 general)