protected override void SetupObjectives()
        {
            objectives.Clear();

            objectives.Add(new CustomObjective(Game, this, ObjectiveDescriptions[0],
                                               new EventTextCapsule(GetEvent((int)EventID.OutsideFortrun), null, EventTextCanvas.MessageBox, PortraitID.Sair),
                                               delegate { },
                                               delegate { },
                                               delegate { return(GameStateManager.currentState.ToLower().Equals("overworldstate")); },
                                               delegate { return(false); }));

            objectives.Add(new TimedMessageObjective(Game, this, ObjectiveDescriptions[0],
                                                     3000, 6000, PortraitID.Sair, GetEvent((int)EventID.ToMeetingPoint).Text));

            objectives.Add(new CloseInOnLocationObjective(Game, this, ObjectiveDescriptions[0],
                                                          300, new EventTextCapsule(GetEvent((int)EventID.AtMeeting), null, EventTextCanvas.MessageBox, PortraitID.Rok)));

            TimedMessageObjective objective4 = new TimedMessageObjective(Game, this, ObjectiveDescriptions[1],
                                                                         3000, 5000, PortraitID.Sair, GetEvent((int)EventID.AfterMeeting1).Text);

            objective4.SetEventText(new EventTextCapsule(GetEvent((int)EventID.AfterMeeting2), null, EventTextCanvas.MessageBox, PortraitID.Ai));
            objectives.Add(objective4);

            objectives.Add(new TimedMessageObjective(Game, this, ObjectiveDescriptions[1],
                                                     3000, 5000, PortraitID.Sair, GetEvent((int)EventID.ToLavis).Text));

            objectives.Add(new CloseInOnLocationObjective(Game, this, ObjectiveDescriptions[1],
                                                          300, new EventTextCapsule(GetEvent((int)EventID.Level1Begins), null, EventTextCanvas.MessageBox, PortraitID.AllianceCaptain)));

            objectives.Add(new ShootingLevelObjective(Game, this, ObjectiveDescriptions[1],
                                                      "Infiltration1", LevelStartCondition.TextCleared,
                                                      new EventTextCapsule(GetEvent((int)EventID.Level2Begins), null, EventTextCanvas.MessageBox,
                                                                           new List <PortraitID>()
            {
                PortraitID.AllianceCaptain, PortraitID.Rok, PortraitID.Sair
            }, new List <int>()
            {
                3, 4
            })));

            objectives.Add(new ShootingLevelObjective(Game, this, ObjectiveDescriptions[1],
                                                      "Infiltration2", LevelStartCondition.Immediately));

            objectives.Add(new CustomObjective(Game, this, ObjectiveDescriptions[2],
                                               new EventTextCapsule(GetEvent((int)EventID.AfterLevel2), null, EventTextCanvas.MessageBox, PortraitID.Rok),
                                               delegate
            {
                RemoveShips(allianceShips);
                AddShips(rebelShips2);
            },
                                               delegate { },
                                               delegate { return(true); },
                                               delegate { return(false); }));

            objectives.Add(new CustomObjective(Game, this, ObjectiveDescriptions[0],
                                               new EventTextCapsule(GetEvent((int)EventID.ToRebelBase), null, EventTextCanvas.MessageBox, PortraitID.Ai),
                                               delegate
            {
                time = StatsManager.PlayTime.GetFutureOverworldTime(2000);
            },
                                               delegate { },
                                               delegate { return(StatsManager.PlayTime.HasOverworldTimePassed(time)); },
                                               delegate { return(false); }));

            objectives.Add(new ArriveAtLocationObjective(Game, this, ObjectiveDescriptions[2]));
        }
        protected override void SetupObjectives()
        {
            objectives.Clear();

            Objectives.Add(new CustomObjective(Game, this, ObjectiveDescriptions[0],
                                               new EventTextCapsule(GetEvent((int)EventID.ToMeetingPoint), null, EventTextCanvas.MessageBox, PortraitID.Ai),
                                               delegate { },
                                               delegate { },
                                               delegate { return(GameStateManager.currentState.ToLower().Equals("overworldstate")); },
                                               delegate { return(false); }));

            Objectives.Add(new CustomObjective(Game, this, ObjectiveDescriptions[0],
                                               delegate
            {
                foreach (OverworldShip ship in rebelShips)
                {
                    Game.stateManager.overworldState.AddOverworldObject(ship);
                }
            },
                                               delegate { },
                                               delegate { return(true); },
                                               delegate { return(false); }));

            Objectives.Add(new CloseInOnLocationObjective(Game, this, ObjectiveDescriptions[0], 400));

            Objectives.Add(new CustomObjective(Game, this, ObjectiveDescriptions[0],
                                               new EventTextCapsule(GetEvent((int)EventID.AtMeetingPoint1), null, EventTextCanvas.MessageBox, PortraitID.RebelPilot),
                                               delegate
            {
                OverworldShip.FollowPlayer = false;
                StartFreighter();
            },
                                               delegate
                                               { },
                                               delegate { return(true); },
                                               delegate { return(false); }));

            Objectives.Add(new TimedMessageObjective(Game, this, ObjectiveDescriptions[0],
                                                     3000, 10000, PortraitID.RebelPilot, GetEvent((int)EventID.AtMeetingPoint2).Text));

            TimedMessageObjective timedMessageObjective = new TimedMessageObjective(Game, this, ObjectiveDescriptions[0],
                                                                                    3000, 10000, PortraitID.RebelPilot, GetEvent((int)EventID.AtMeetingPoint3).Text);

            timedMessageObjective.SetEventText(
                new EventTextCapsule(GetEvent((int)EventID.AtMeetingPoint4), null, EventTextCanvas.MessageBox, PortraitID.RebelPilot));
            Objectives.Add(timedMessageObjective);

            Objectives.Add(new CustomObjective(Game, this, ObjectiveDescriptions[0],
                                               new EventTextCapsule(GetEvent((int)EventID.AttackFreighter), null, EventTextCanvas.MessageBox, PortraitID.RebelPilot),
                                               delegate { },
                                               delegate { },
                                               delegate
            {
                return(Vector2.Distance(rebelShips[0].position, freighter.position) < 500);
            },
                                               delegate { return(false); }));

            Objectives.Add(new CustomObjective(Game, this, ObjectiveDescriptions[0],
                                               delegate { },
                                               delegate { },
                                               delegate
            {
                return(CollisionDetection.IsRectInRect(rebelShips[0].Bounds, freighter.Bounds));
            },
                                               delegate { return(false); }));

            objectives.Add(new ShootingLevelObjective(Game, this, ObjectiveDescriptions[0],
                                                      "Retribution1", LevelStartCondition.Immediately,
                                                      new EventTextCapsule(GetEvent((int)EventID.AfterLevel), null, EventTextCanvas.MessageBox, PortraitID.RebelPilot)));

            objectives.Add(new CustomObjective(Game, this, ObjectiveDescriptions[1],
                                               delegate
            {
                freighter.Explode();
                freighter.Destroy();
                Game.stateManager.overworldState.GetSectorX.shipSpawner.AddOverworldShip(
                    alliance1, Game.player.position + new Vector2(-900, 0), "Retribution2", Game.player);
                OverworldShip.FollowPlayer = true;
            },
                                               delegate { }, delegate { return(true); }, delegate { return(false); }));

            CustomObjective chaseObjective = new CustomObjective(Game, this, ObjectiveDescriptions[1],
                                                                 delegate { },
                                                                 delegate { },
                                                                 delegate
            {
                if (Game.stateManager.shooterState.CurrentLevel != null &&
                    Game.stateManager.shooterState.CurrentLevel.Identifier.Equals("Retribution2"))
                {
                    return(Game.stateManager.shooterState.CurrentLevel.IsObjectiveCompleted &&
                           GameStateManager.currentState.Equals("OverworldState"));
                }

                return(Game.stateManager.overworldState.GetCurrentSpaceRegion is RebelOutpost);
            },
                                                                 delegate
            {
                if (Game.stateManager.shooterState.CurrentLevel != null &&
                    Game.stateManager.shooterState.CurrentLevel.Identifier.Equals("Retribution2"))
                {
                    return(Game.stateManager.shooterState.CurrentLevel.IsObjectiveFailed &&
                           GameStateManager.currentState.Equals("OverworldState"));
                }

                return(false);
            });

            chaseObjective.SetCompletedLogic(
                delegate
            {
                alliance1.AIManager = new PatrolAction(alliance1, Game.stateManager.overworldState.GetSectorX);
            });

            objectives.Add(chaseObjective);

            objectives.Add(new ArriveAtLocationObjective(Game, this, ObjectiveDescriptions[1]));
        }