/// <summary> /// Returns the UnitCategory an UnitFamily belongs to. /// </summary> /// <param name="family">The unit family.</param> /// <returns>The unit category.</returns> public static UnitCategory GetUnitCategoryFromUnitFamily(UnitFamily family) { string roleStr = family.ToString().ToLowerInvariant(); if (roleStr.StartsWith("helicopter")) { return(UnitCategory.Helicopter); } if (roleStr.StartsWith("plane")) { return(UnitCategory.Plane); } if (roleStr.StartsWith("ship")) { return(UnitCategory.Ship); } if (roleStr.StartsWith("static")) { return(UnitCategory.Static); } return(UnitCategory.Vehicle); }
public static DCSMissionUnitGroup FromCoalitionArmyAndUnitFamily( string luaGroup, string luaUnit, DefinitionCoalition army, TimePeriod timePeriod, UnitFamily family, int unitCount, int groupID, Coalition coalition, Coordinates coordinates) { List <string> unitList = new List <string>(); UnitCategory category = HQTools.GetUnitCategoryFromUnitFamily(family); // FIXME: extendSearchToUnitsOfOtherFamilies and returnDefaultIfNoneFound should be parameters string[] availableUnits = army.GetUnits(timePeriod, family, false, false); if (availableUnits.Length == 0) { DebugLog.Instance.Log($" WARNING: Cannot spawn unit group, no units of type {family.ToString().ToUpperInvariant()} for coalition {army.DisplayName.ToUpperInvariant()} in {timePeriod.ToString().ToUpperInvariant()}."); return(null); } do { unitList.AddRange((from u in HQTools.RandomFrom(availableUnits).Split('|') select u.Trim())); } while (unitList.Count < unitCount); // Some unit categories (helicopters and planes) require all units to be the same type if ((category == UnitCategory.Helicopter) || (category == UnitCategory.Plane)) { for (int i = 1; i < unitList.Count; i++) { unitList[i] = unitList[0]; } } DCSMissionUnitGroup uGroup = new DCSMissionUnitGroup( luaGroup, luaUnit, category, groupID, coalition, coordinates, unitList.ToArray()); return(uGroup); }