private static List <MissionModifier> GetRandomMissionModifiers()
 {
     return(new List <MissionModifier>()
     {
         MissionModifier.GetRandomMissionModifier()
     });
 }
    public static List <AbstractMission> GenerateAllMissionsForRegion()
    {
        var dayNumber = GameState.Instance.Day;

        var missions = new List <AbstractMission>
        {
            new KillEnemiesMission()
            {
                DaysUntilExpiration           = 1000,
                Difficulty                    = 1,
                MaxNumberOfFriendlyCharacters = 3,
                Name    = AbstractMission.GenerateMissionName(),
                Rewards = new List <AbstractMissionReward> {
                    new GoldMissionReward(60)
                },
                EnemySquad       = MissionRules.GetRandomSquadForCurrentActAndDay(SquadType.NORMAL),
                ProtoSprite      = AbstractMission.RetrieveIconFromMissionIconFolder("cash"),
                MissionModifiers = GetRandomMissionModifiers()
            },
            new KillEnemiesMission()
            {
                DaysUntilExpiration           = 1000,
                Difficulty                    = 1,
                MaxNumberOfFriendlyCharacters = 3,
                Name    = AbstractMission.GenerateMissionName(),
                Rewards = new List <AbstractMissionReward> {
                    new GoldMissionReward(60)
                },
                EnemySquad       = MissionRules.GetRandomSquadForCurrentActAndDay(SquadType.ELITE),
                ProtoSprite      = AbstractMission.RetrieveIconFromMissionIconFolder("key"),
                MissionModifiers = GetRandomMissionModifiers()
            },
            new KillEnemiesMission()
            {
                DaysUntilExpiration           = 1000,
                Difficulty                    = 1,
                MaxNumberOfFriendlyCharacters = 3,
                Name    = AbstractMission.GenerateMissionName(),
                Rewards = new List <AbstractMissionReward> {
                    new RandomAugmentationMissionReward()
                },
                EnemySquad  = MissionRules.GetRandomSquadForCurrentActAndDay(SquadType.NORMAL),
                ProtoSprite = AbstractMission.RetrieveIconFromMissionIconFolder("relic")
            },
            new GateMission()
            {
                DaysUntilExpiration           = 1000,
                Difficulty                    = 4,
                MaxNumberOfFriendlyCharacters = 3,
                Name    = AbstractMission.GenerateMissionName(),
                Rewards = new List <AbstractMissionReward> {
                    new GateBypassMissionReward()
                },
                EnemySquad  = MissionRules.GetRandomSquadForCurrentActAndDay(SquadType.BOSS),
                ProtoSprite = AbstractMission.RetrieveIconFromMissionIconFolder("gate")
            },
            new KillEnemiesMission()
            {
                DaysUntilExpiration           = 1000,
                Difficulty                    = 2,
                MaxNumberOfFriendlyCharacters = 3,
                Name    = AbstractMission.GenerateMissionName(),
                Rewards = new List <AbstractMissionReward> {
                    new GateKeyMissionReward()
                },
                EnemySquad  = MissionRules.GetEliteSquad(),
                ProtoSprite = AbstractMission.RetrieveIconFromMissionIconFolder("key")
            },
            new KillEnemiesMission()
            {
                DaysUntilExpiration           = 1000,
                Difficulty                    = 2,
                MaxNumberOfFriendlyCharacters = 3,
                Name    = AbstractMission.GenerateMissionName(),
                Rewards = new List <AbstractMissionReward> {
                    new GateKeyMissionReward()
                },
                EnemySquad  = MissionRules.GetEliteSquad(),
                ProtoSprite = AbstractMission.RetrieveIconFromMissionIconFolder("key")
            }
        };

        foreach (var mission in missions)
        {
            mission.Terrain = MissionTerrain.TerrainTypes.PickRandom();

            ProbabilityUtils.PerformWithProbability(.2f, () =>
            {
                var modifier = MissionModifier.GetRandomMissionModifier();
                mission.MissionModifiers.Add(modifier);
            });

            mission.Init();
        }

        return(missions);
    }