summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/company_cmd.cpp13
-rw-r--r--src/company_gui.cpp5
-rw-r--r--src/vehicle.cpp21
-rw-r--r--src/vehicle_func.h1
4 files changed, 12 insertions, 28 deletions
diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp
index f72d131e0..df08fff00 100644
--- a/src/company_cmd.cpp
+++ b/src/company_cmd.cpp
@@ -610,15 +610,14 @@ void InitializeCompanies()
*/
bool MayCompanyTakeOver(CompanyID cbig, CompanyID csmall)
{
- uint big_counts[4], small_counts[4];
- CountCompanyVehicles(cbig, big_counts);
- CountCompanyVehicles(csmall, small_counts);
+ const Company *c1 = Company::Get(cbig);
+ const Company *c2 = Company::Get(csmall);
/* Do the combined vehicle counts stay within the limits? */
- return big_counts[VEH_TRAIN] + small_counts[VEH_TRAIN] <= _settings_game.vehicle.max_trains &&
- big_counts[VEH_ROAD] + small_counts[VEH_ROAD] <= _settings_game.vehicle.max_roadveh &&
- big_counts[VEH_SHIP] + small_counts[VEH_SHIP] <= _settings_game.vehicle.max_ships &&
- big_counts[VEH_AIRCRAFT] + small_counts[VEH_AIRCRAFT] <= _settings_game.vehicle.max_aircraft;
+ return c1->group_all[VEH_TRAIN].num_vehicle + c2->group_all[VEH_TRAIN].num_vehicle <= _settings_game.vehicle.max_trains &&
+ c1->group_all[VEH_ROAD].num_vehicle + c2->group_all[VEH_ROAD].num_vehicle <= _settings_game.vehicle.max_roadveh &&
+ c1->group_all[VEH_SHIP].num_vehicle + c2->group_all[VEH_SHIP].num_vehicle <= _settings_game.vehicle.max_ships &&
+ c1->group_all[VEH_AIRCRAFT].num_vehicle + c2->group_all[VEH_AIRCRAFT].num_vehicle <= _settings_game.vehicle.max_aircraft;
}
/**
diff --git a/src/company_gui.cpp b/src/company_gui.cpp
index a79ef5eb1..a224c1dcc 100644
--- a/src/company_gui.cpp
+++ b/src/company_gui.cpp
@@ -1888,7 +1888,10 @@ struct CompanyWindow : Window
case CW_WIDGET_DESC_VEHICLE_COUNTS: {
uint amounts[4];
- CountCompanyVehicles((CompanyID)this->window_number, amounts);
+ amounts[0] = c->group_all[VEH_TRAIN].num_vehicle;
+ amounts[1] = c->group_all[VEH_ROAD].num_vehicle;
+ amounts[2] = c->group_all[VEH_SHIP].num_vehicle;
+ amounts[3] = c->group_all[VEH_AIRCRAFT].num_vehicle;
int y = r.top;
if (amounts[0] + amounts[1] + amounts[2] + amounts[3] == 0) {
diff --git a/src/vehicle.cpp b/src/vehicle.cpp
index 6c34d51f3..890e5e221 100644
--- a/src/vehicle.cpp
+++ b/src/vehicle.cpp
@@ -600,21 +600,6 @@ uint CountVehiclesInChain(const Vehicle *v)
}
/**
- * Count the number of vehicles of a company.
- * @param c Company owning the vehicles.
- * @param [out] counts Array of counts. Contains the vehicle count ordered by type afterwards.
- */
-void CountCompanyVehicles(CompanyID cid, uint counts[4])
-{
- for (uint i = 0; i < 4; i++) counts[i] = 0;
-
- const Vehicle *v;
- FOR_ALL_VEHICLES(v) {
- if (v->owner == cid && v->IsPrimaryVehicle()) counts[v->type]++;
- }
-}
-
-/**
* Check if a vehicle is counted in num_engines in each company struct
* @return true if the vehicle is counted in num_engines
*/
@@ -1518,10 +1503,8 @@ UnitID GetFreeUnitNumber(VehicleType type)
default: NOT_REACHED();
}
- uint amounts[4];
- CountCompanyVehicles(_current_company, amounts);
- assert((uint)type < lengthof(amounts));
- if (amounts[type] >= max_veh) return UINT16_MAX; // Currently already at the limit, no room to make a new one.
+ const Company *c = Company::Get(_current_company);
+ if (c->group_all[type].num_vehicle >= max_veh) return UINT16_MAX; // Currently already at the limit, no room to make a new one.
FreeUnitIDGenerator gen(type, _current_company);
diff --git a/src/vehicle_func.h b/src/vehicle_func.h
index 166c0b9cf..475c8a313 100644
--- a/src/vehicle_func.h
+++ b/src/vehicle_func.h
@@ -30,7 +30,6 @@ typedef Vehicle *VehicleFromPosProc(Vehicle *v, void *data);
void VehicleServiceInDepot(Vehicle *v);
uint CountVehiclesInChain(const Vehicle *v);
-void CountCompanyVehicles(CompanyID cid, uint counts[4]);
void FindVehicleOnPos(TileIndex tile, void *data, VehicleFromPosProc *proc);
void FindVehicleOnPosXY(int x, int y, void *data, VehicleFromPosProc *proc);
bool HasVehicleOnPos(TileIndex tile, void *data, VehicleFromPosProc *proc);