public override void OnContextMenuItemClicked(object itemTag)
        {
            if (itemTag == null)
            {
                return;
            }

            if (itemTag is MissionTemplateFlightGroupTask groupTask)
            {
                Tasking = groupTask;
            }
            else if (itemTag is Country country)
            {
                Country = country;
            }
            else if (itemTag is PlayerStartLocation location)
            {
                StartLocation = location;
            }
            else if (itemTag is int)
            {
                Count = (int)itemTag;
            }
            else if (itemTag is string)
            {
                if (itemTag.ToString().StartsWith("$"))
                {
                    Carrier = itemTag.ToString().Substring(1);
                }
                else
                {
                    Aircraft = itemTag.ToString();
                }
            }
        }
 /// <summary>
 /// Resets all settings to their default values.
 /// </summary>
 private void Clear()
 {
     Aircraft      = Database.Instance.CheckValue <DBPseudoEntryPlayerAircraft>("Su-25T", "Su-25T");
     Carrier       = "";
     Count         = 2;
     Tasking       = MissionTemplateFlightGroupTask.Objectives;
     Country       = Country.CJTFBlue;
     StartLocation = PlayerStartLocation.Runway;
 }
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="ini">The .ini file to load from</param>
        /// <param name="section">The ini section to load from</param>
        /// <param name="key">The ini key to load from</param>
        public MissionTemplateFlightGroup(INIFile ini, string section, string key)
        {
            Clear();

            Aircraft      = Database.Instance.CheckValue <DBPseudoEntryPlayerAircraft>(ini.GetValue(section, $"{key}.AircraftType", Aircraft));
            Carrier       = ini.GetValue(section, $"{key}.Carrier", Carrier);
            Count         = ini.GetValue(section, $"{key}.Count", Count);
            Tasking       = ini.GetValue(section, $"{key}.Task", Tasking);
            Country       = ini.GetValue(section, $"{key}.Country", Country);
            StartLocation = ini.GetValue(section, $"{key}.StartLocation", StartLocation);
        }
示例#4
0
 public MissionTemplateFlightGroup(string aircraft, int count, string payload, string carrier, Country country, PlayerStartLocation startLocation, bool aiWingmen, bool hostile, string livery)
 {
     Aircraft      = aircraft;
     AIWingmen     = aiWingmen;
     Hostile       = hostile;
     Count         = count;
     Payload       = payload;
     Carrier       = carrier;
     Country       = country;
     StartLocation = startLocation;
     Livery        = livery;
 }
 public MissionTemplateFlightGroup(
     string aircraft,
     int count,
     MissionTemplateFlightGroupTask tasking,
     string carrier,
     Country country,
     PlayerStartLocation startLocation)
 {
     Aircraft      = aircraft;
     Count         = count;
     Tasking       = tasking;
     Carrier       = carrier;
     StartLocation = startLocation;
 }
示例#6
0
    void CreatePlayer()
    {
        PlayerStartLocation start = GameObject.FindObjectOfType <PlayerStartLocation>();

        if (start == null)
        {
            Debug.LogError("No PlayerStartLocation found");
            return;
        }
        start.positionX = WorldToGridX(start.transform.position);
        start.positionY = WorldToGridY(start.transform.position);
        Debug.Log("Found player start at: " + start.positionX + ", " + start.positionY);
        playerStartLocation = start;
        AddOccupant(start.positionX, start.positionY, start);
        Snake.Instance.CreateWithLength(start.positionX, start.positionY, start.startSnakeLength);
        Debug.Log("Created snake at: " + start.positionX + ", " + start.positionY + " with length: " + start.startSnakeLength);
    }
示例#7
0
        public DCSMissionUnitGroup AddUnitGroup(
            DCSMission mission, string[] units, Side side,
            Coordinates coordinates, string groupLua, string unitLua,
            DCSSkillLevel skill, DCSMissionUnitGroupFlags flags = 0, UnitTaskPayload payload = UnitTaskPayload.Default,
            Coordinates?coordinates2 = null, int airbaseID = 0, bool requiresParkingSpots = false, bool requiresOpenAirParking = false, Country?country = null, PlayerStartLocation startLocation = PlayerStartLocation.Runway)
        {
            if (units.Length == 0)
            {
                return(null);                   // No units database entries ID provided, cancel group creation
            }
            // TODO: check for missing units
            DBEntryUnit[] unitsBP = (from string u in units where Database.Instance.EntryExists <DBEntryUnit>(u) select Database.Instance.GetEntry <DBEntryUnit>(u)).ToArray();
            unitsBP = (from DBEntryUnit u in unitsBP where u != null select u).ToArray();
            if (unitsBP.Length == 0)
            {
                return(null);                                                                             // All database entries were null, cancel group creation
            }
            Coalition coalition = (side == Side.Ally) ? mission.CoalitionPlayer : mission.CoalitionEnemy; // Pick group coalition

            if (!country.HasValue)
            {
                country = coalition == Coalition.Blue? Country.CJTFBlue : Country.CJTFRed;
            }

            double groupHeading = unitsBP[0].IsAircraft ? 0 : Toolbox.RandomDouble(Toolbox.TWO_PI); // Generate global group heading

            // Generate units in the group
            int         unitIndex = 0;
            Coordinates?lastSpot  = null;
            List <DCSMissionUnitGroupUnit> groupUnits = new List <DCSMissionUnitGroupUnit>();

            foreach (DBEntryUnit unitBP in unitsBP)
            {
                if (unitBP == null)
                {
                    continue;
                }

                for (int i = 0; i < unitBP.DCSIDs.Length; i++)
                {
                    // Set unit coordinates and heading
                    Coordinates unitCoordinates = coordinates;
                    double      unitHeading     = groupHeading;

                    SetUnitCoordinatesAndHeading(ref unitCoordinates, ref unitHeading, unitBP, unitIndex);

                    // Get parking spot for the unit, if unit is parked at an airdrome
                    int parkingSpot = 0;
                    if (airbaseID > 0)
                    {
                        if (requiresParkingSpots)
                        {
                            parkingSpot = SpawnPointSelector.GetFreeParkingSpot(airbaseID, lastSpot, out Coordinates parkingCoordinates, requiresOpenAirParking);
                            if (parkingSpot >= 0)
                            {
                                unitCoordinates = parkingCoordinates;
                            }
                            else
                            {
                                parkingSpot = 0;
                            }
                            lastSpot = unitCoordinates;
                        }
                    }
                    else if (airbaseID == -99)  //carrier code always parks 1 maybe will need more
                    {
                        parkingSpot = 1;
                    }
                    // Add unit to the list of units
                    DCSMissionUnitGroupUnit unit = new DCSMissionUnitGroupUnit
                    {
                        Coordinates = unitCoordinates,
                        Heading     = unitHeading,
                        ID          = NextUnitID,
                        Type        = unitBP.DCSIDs[i],
                        ParkingSpot = parkingSpot,
                        Name        = unitBP.ID
                    };
                    groupUnits.Add(unit);
                    unitIndex++; NextUnitID++;
                }
            }

            // Generate group name
            string       groupName;
            UnitCallsign callsign = new UnitCallsign();

            if (unitsBP[0].IsAircraft) // Aircraft group, name is a callsign
            {
                callsign  = CallsignGenerator.GetCallsign(unitsBP[0].Families[0], coalition);
                groupName = callsign.GroupName;
            }
            else // Vehicle/ship/static group, name is a random group name
            {
                groupName = GetGroupName(unitsBP[0].Families[0]);
            }

            // Add group to the mission
            DCSMissionUnitGroup group = new DCSMissionUnitGroup
            {
                AirbaseID     = airbaseID,
                CallsignLua   = callsign.Lua,
                Category      = unitsBP[0].Category,
                Coalition     = coalition,
                Country       = country.Value,
                Coordinates   = airbaseID != 0?  groupUnits[0].Coordinates : coordinates,
                Coordinates2  = coordinates2 ?? coordinates + Coordinates.CreateRandom(1, 2) * Toolbox.NM_TO_METERS,
                Flags         = flags,
                GroupID       = NextGroupID,
                LuaGroup      = groupLua,
                Name          = groupName,
                Skill         = skill,
                Payload       = payload,
                UnitID        = units[0],
                LuaUnit       = unitLua,
                Units         = groupUnits.ToArray(),
                StartLocation = startLocation
            };

            mission.UnitGroups.Add(group);

            NextGroupID++;

            DebugLog.Instance.WriteLine($"Added \"{group.Units[0].Type}\" unit group \"{group.Name}\" for coalition {group.Coalition.ToString().ToUpperInvariant()}", 2);

            return(group);
        }