summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/vehicle.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/vehicle.cpp b/src/vehicle.cpp
index 8673baef1..0fde74128 100644
--- a/src/vehicle.cpp
+++ b/src/vehicle.cpp
@@ -1321,8 +1321,28 @@ UnitID FreeUnitIDGenerator::NextID()
return this->curid;
}
+/**
+ * Get an unused unit number for a vehicle (if allowed).
+ * @param type Type of vehicle
+ * @return A unused unit number for the given type of vehicle if it is allowed to build one, else \c UINT16_MAX.
+ */
UnitID GetFreeUnitNumber(VehicleType type)
{
+ /* Check whether it is allowed to build another vehicle. */
+ uint max_veh;
+ switch (type) {
+ case VEH_TRAIN: max_veh = _settings_game.vehicle.max_trains; break;
+ case VEH_ROAD: max_veh = _settings_game.vehicle.max_roadveh; break;
+ case VEH_SHIP: max_veh = _settings_game.vehicle.max_ships; break;
+ case VEH_AIRCRAFT: max_veh = _settings_game.vehicle.max_aircraft; break;
+ 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.
+
FreeUnitIDGenerator gen(type, _current_company);
return gen.NextID();