Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        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);
        }