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); }
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; }
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); }
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); }