diff --git a/src/script/api/ai_changelog.hpp b/src/script/api/ai_changelog.hpp index 15e1710275..6e32838203 100644 --- a/src/script/api/ai_changelog.hpp +++ b/src/script/api/ai_changelog.hpp @@ -20,6 +20,7 @@ * API additions: * \li AINewGRF * \li AINewGRFList + * \li AIGroup::GetNumVehicles * * \b 1.11.0 * diff --git a/src/script/api/script_group.cpp b/src/script/api/script_group.cpp index 0295c67aa7..a6e2fdee25 100644 --- a/src/script/api/script_group.cpp +++ b/src/script/api/script_group.cpp @@ -106,6 +106,15 @@ return GetGroupNumEngines(ScriptObject::GetCompany(), group_id, engine_id); } +/* static */ int32 ScriptGroup::GetNumVehicles(GroupID group_id, ScriptVehicle::VehicleType vehicle_type) +{ + bool valid_group = IsValidGroup(group_id); + if (!valid_group && group_id != GROUP_DEFAULT && group_id != GROUP_ALL) return -1; + if (!valid_group && (vehicle_type < ScriptVehicle::VT_RAIL || vehicle_type > ScriptVehicle::VT_AIR)) return -1; + + return GetGroupNumVehicle(ScriptObject::GetCompany(), group_id, valid_group ? ::Group::Get(group_id)->vehicle_type : (::VehicleType)vehicle_type); +} + /* static */ bool ScriptGroup::MoveVehicle(GroupID group_id, VehicleID vehicle_id) { EnforcePrecondition(false, IsValidGroup(group_id) || group_id == GROUP_DEFAULT); diff --git a/src/script/api/script_group.hpp b/src/script/api/script_group.hpp index 2c27b81c6e..384fea7a28 100644 --- a/src/script/api/script_group.hpp +++ b/src/script/api/script_group.hpp @@ -128,6 +128,20 @@ public: */ static int32 GetNumEngines(GroupID group_id, EngineID engine_id); + /** + * Get the total number of vehicles in a given group and its sub-groups. + * @param group_id The group to get the number of vehicles in. + * @param vehicle_type The type of vehicle of the group. + * @pre IsValidGroup(group_id) || group_id == GROUP_ALL || group_id == GROUP_DEFAULT. + * @pre IsValidGroup(group_id) || vehicle_type == ScriptVehicle::VT_ROAD || vehicle_type == ScriptVehicle::VT_RAIL || + * vehicle_type == ScriptVehicle::VT_WATER || vehicle_type == ScriptVehicle::VT_AIR + * @return The total number of vehicles in the group with id group_id and it's sub-groups. + * @note If the group is valid (neither GROUP_ALL nor GROUP_DEFAULT), the value of + * vehicle_type is retrieved from the group itself and not from the input value. + * But if the group is GROUP_ALL or GROUP_DEFAULT, then vehicle_type must be valid. + */ + static int32 GetNumVehicles(GroupID group_id, ScriptVehicle::VehicleType vehicle_type); + /** * Move a vehicle to a group. * @param group_id The group to move the vehicle to.