public void DeleteAsset(MissionAsset asset) { Debug.Assert(asset != null, "asset != null"); EntityDefinition entity = asset as EntityDefinition; FlightGroupDefinition flightGroup = asset as FlightGroupDefinition; FactionDefinition faction = asset as FactionDefinition; if (entity != null) { GetFlightGroup(entity.flightGroupId)?.RemoveEntity(entity); } else if (flightGroup != null) { faction = GetFaction(flightGroup.factionId); if (faction.flightGroups.Count == 1) { Debug.Log($"Can't Delete Flight Group {flightGroup.name}, every faction needs at least one flight group"); return; } GetFaction(flightGroup.factionId)?.RemoveFlightGroup(flightGroup); } else if (faction != null) { factions.Remove(faction); } else { throw new ArgumentException($"Can\'t delete: {asset.GetType().Name}"); } onChange?.Invoke(asset.id); }
private bool HasFlightGroup(FlightGroupDefinition flightGroup) { return(( from faction in factions from fg in faction.flightGroups where fg == flightGroup select fg ).FirstOrDefault() != null); }
public FlightGroupDefinition CreateFlightGroup(FactionDefinition faction) { if (faction == null || !factions.Contains(faction)) { throw new ArgumentException("Faction not part of this mission!"); } FlightGroupDefinition flightGroup = GameDatabase.ActiveInstance.CreateAsset <FlightGroupDefinition>(); faction.AddFlightGroup(flightGroup); onChange?.Invoke(flightGroup.id); return(flightGroup); }
public EntityDefinition CreateEntityDefinition(FlightGroupDefinition flightGroup) { if (HasFlightGroup(flightGroup)) { EntityDefinition entity = GameDatabase.ActiveInstance.CreateAsset <EntityDefinition>(); flightGroup.AddEntity(entity); onChange?.Invoke(entity.id); return(entity); } else { throw new ArgumentException("Flight group not part of any faction in mission"); } }
private void OnFlightGroupDrop(FlightGroupDefinition child, MissionAsset dropTarget, int index) { MissionTreeItem dropTargetItem = FindMissionItem(dropTarget.id); FactionDefinition faction = dropTarget as FactionDefinition; FlightGroupDefinition flightGroup = dropTarget as FlightGroupDefinition; if (faction != null) { db.GetCurrentMission().SetFlightGroupFaction(child, faction, index); } else if (flightGroup != null) { db.GetCurrentMission().SetFlightGroupFaction(child, dropTargetItem.GetFaction(), index); } }
public void SetFlightGroupFaction(FlightGroupDefinition flightGroup, FactionDefinition faction, int index) { if (flightGroup.factionId != faction.id) { FactionDefinition oldFaction = GetFaction(flightGroup.factionId); if (oldFaction != null && oldFaction.flightGroups.Count == 1) { Debug.Log($"Can't Move Flight Group {flightGroup.name}, every faction needs at least one flight group"); return; } oldFaction?.RemoveFlightGroup(flightGroup); } faction.AddFlightGroup(flightGroup, index); onChange?.Invoke(flightGroup.id); }
public void SetEntityFlightGroup(EntityDefinition entity, FlightGroupDefinition flightGroup, int index) { Debug.Assert(HasFlightGroup(flightGroup), $"Flight group {flightGroup.name} not part of any faction in mission"); if (entity.flightGroupId == flightGroup.id) { if (index == -1) { index = 0; } flightGroup.entities.MoveToIndex(entity, index); } else { FlightGroupDefinition currentFlightGroup = GetFlightGroup(entity.flightGroupId); currentFlightGroup?.RemoveEntity(entity); flightGroup.AddEntity(entity, index); } onChange?.Invoke(entity.id); }