@ -43,8 +43,9 @@ GroupStatistics::~GroupStatistics()
void GroupStatistics : : Clear ( )
{
this - > num_vehicle = 0 ;
this - > num_profit_vehicle = 0 ;
this - > profit_last_year = 0 ;
this - > num_vehicle_min_age = 0 ;
this - > profit_last_year_min_age = 0 ;
/* This is also called when NewGRF change. So the number of engines might have changed. Reallocate. */
free ( this - > num_engines ) ;
@ -136,13 +137,15 @@ void GroupStatistics::Clear()
GroupStatistics & stats = GroupStatistics : : Get ( v ) ;
stats_all . num_vehicle + = delta ;
stats_all . profit_last_year + = v - > GetDisplayProfitLastYear ( ) * delta ;
stats . num_vehicle + = delta ;
stats . profit_last_year + = v - > GetDisplayProfitLastYear ( ) * delta ;
if ( v - > age > VEHICLE_PROFIT_MIN_AGE ) {
stats_all . num_ profit_ vehicle + = delta ;
stats_all . profit_last_year + = v - > GetDisplayProfitLastYear ( ) * delta ;
stats . num_ profit_ vehicle + = delta ;
stats . profit_last_year + = v - > GetDisplayProfitLastYear ( ) * delta ;
stats_all . num_ vehicle_min_ag e + = delta ;
stats_all . profit_last_year _min_age + = v - > GetDisplayProfitLastYear ( ) * delta ;
stats . num_ vehicle_min_ag e + = delta ;
stats . profit_last_year _min_age + = v - > GetDisplayProfitLastYear ( ) * delta ;
}
}
@ -159,19 +162,31 @@ void GroupStatistics::Clear()
}
/**
* Add a vehicle to the profit sum of its group .
* Add a vehicle ' s last year profit to the profit sum of its group .
*/
/* static */ void GroupStatistics : : VehicleReachedProfitAge ( const Vehicle * v )
/* static */ void GroupStatistics : : AddProfitLastYear ( const Vehicle * v )
{
GroupStatistics & stats_all = GroupStatistics : : GetAllGroup ( v ) ;
GroupStatistics & stats = GroupStatistics : : Get ( v ) ;
stats_all . num_profit_vehicle + + ;
stats_all . profit_last_year + = v - > GetDisplayProfitLastYear ( ) ;
stats . num_profit_vehicle + + ;
stats . profit_last_year + = v - > GetDisplayProfitLastYear ( ) ;
}
/**
* Add a vehicle to the profit sum of its group .
*/
/* static */ void GroupStatistics : : VehicleReachedMinAge ( const Vehicle * v )
{
GroupStatistics & stats_all = GroupStatistics : : GetAllGroup ( v ) ;
GroupStatistics & stats = GroupStatistics : : Get ( v ) ;
stats_all . num_vehicle_min_age + + ;
stats_all . profit_last_year_min_age + = v - > GetDisplayProfitLastYear ( ) ;
stats . num_vehicle_min_age + + ;
stats . profit_last_year_min_age + = v - > GetDisplayProfitLastYear ( ) ;
}
/**
* Recompute the profits for all groups .
*/
@ -191,7 +206,10 @@ void GroupStatistics::Clear()
}
for ( const Vehicle * v : Vehicle : : Iterate ( ) ) {
if ( v - > IsPrimaryVehicle ( ) & & v - > age > VEHICLE_PROFIT_MIN_AGE ) GroupStatistics : : VehicleReachedProfitAge ( v ) ;
if ( v - > IsPrimaryVehicle ( ) ) {
GroupStatistics : : AddProfitLastYear ( v ) ;
if ( v - > age > VEHICLE_PROFIT_MIN_AGE ) GroupStatistics : : VehicleReachedMinAge ( v ) ;
}
}
}
@ -789,30 +807,30 @@ uint GetGroupNumVehicle(CompanyID company, GroupID id_g, VehicleType type)
* @ param type The vehicle type of the group
* @ return The number of vehicles above profit minimum age in the group
*/
uint GetGroupNum Profit Vehicle( CompanyID company , GroupID id_g , VehicleType type )
uint GetGroupNum VehicleMinAg e( CompanyID company , GroupID id_g , VehicleType type )
{
uint count = 0 ;
for ( const Group * g : Group : : Iterate ( ) ) {
if ( g - > parent = = id_g ) count + = GetGroupNum Profit Vehicle( company , g - > index , type ) ;
if ( g - > parent = = id_g ) count + = GetGroupNum VehicleMinAg e( company , g - > index , type ) ;
}
return count + GroupStatistics : : Get ( company , id_g , type ) . num_ profit_ vehicle;
return count + GroupStatistics : : Get ( company , id_g , type ) . num_ vehicle_min_ag e;
}
/**
* Get last year ' s profit for the group with GroupID
* id_g and its sub - groups .
* Get last year ' s profit of vehicles above minimum age
* 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
* @ return Last year ' s profit of vehicles above minimum age for the group
*/
Money GetGroupProfitLastYear ( CompanyID company , GroupID id_g , VehicleType type )
Money GetGroupProfitLastYear MinAge ( CompanyID company , GroupID id_g , VehicleType type )
{
Money sum = 0 ;
for ( const Group * g : Group : : Iterate ( ) ) {
if ( g - > parent = = id_g ) sum + = GetGroupProfitLastYear ( company , g - > index , type ) ;
if ( g - > parent = = id_g ) sum + = GetGroupProfitLastYear MinAge ( company , g - > index , type ) ;
}
return sum + GroupStatistics : : Get ( company , id_g , type ) . profit_last_year ;
return sum + GroupStatistics : : Get ( company , id_g , type ) . profit_last_year _min_age ;
}
void RemoveAllGroupsForCompany ( const CompanyID company )