示例#1
0
        public bool SetToMainAgent(Agent agent)
        {
            if (agent != null)
            {
                if (Mission.MainAgent == agent || agent.Team != Mission.PlayerTeam)
                {
                    return(false);
                }
                if (!Utility.IsPlayerDead())
                {
                    MissionEvent.OnMainAgentWillBeChangedToAnotherOne(agent);
                    MissionLibrary.Event.MissionEvent.OnMainAgentWillBeChangedToAnotherOne(agent);
                    Utility.AIControlMainAgent(false);
                }
                GameTexts.SetVariable("ControlledTroopName", agent.Name);
                Utility.DisplayLocalizedText("str_rts_camera_control_troop");
                bool shouldSmoothMoveToAgent = Utility.BeforeSetMainAgent();
                if (_switchFreeCameraLogic.IsSpectatorCamera)
                {
                    Mission.MainAgent = agent;
                    Utility.AfterSetMainAgent(shouldSmoothMoveToAgent, _flyCameraMissionView.MissionScreen, false);
                }
                else
                {
                    Utility.PlayerControlAgent(agent);
                    Utility.AfterSetMainAgent(shouldSmoothMoveToAgent, _flyCameraMissionView.MissionScreen, true);
                }

                return(true);
            }

            Utility.DisplayLocalizedText("str_rts_camera_no_troop_to_control");
            return(false);
        }
        public override void OnRemoveBehaviour()
        {
            base.OnRemoveBehaviour();

            CommanderLogic.OnRemoveBehaviour();
            FixScoreBoardAfterPlayerDeadLogic.OnRemoveBehaviour();
            SwitchFreeCameraLogic.OnRemoveBehaviour();

            MissionEvent.Clear();
            MissionLibrary.Event.MissionEvent.Clear();
        }
示例#3
0
 internal void ReceiveMissionEvent(MissionEvent missionEvent)
 {
     foreach (Mission mission in activeMissions)
     {
         if (mission.missionData.TypeOfMission == missionEvent)
         {
             mission.ObjectiveAchieved++;
         }
         if (mission.ObjectiveAchieved == mission.missionData.ObjectiveTotal)
         {
             mission.Completed = true;
         }
     }
 }
示例#4
0
        public void SwapTeam()
        {
            if (!NativeConfig.CheatMode)
            {
                return;
            }
            if (Mission.PlayerEnemyTeam == null)
            {
                return;
            }
            if (Mission.GetMissionBehaviour <SiegeDeploymentHandler>() != null)
            {
                return;
            }
            bool firstTime   = Mission.PlayerEnemyTeam.PlayerOrderController.Owner == null;
            var  targetAgent = Mission.PlayerEnemyTeam.PlayerOrderController.Owner;

            // Fix a rare crash in e1.4.3 when targetAgent.Team == null && targetAgent.IsDeleted == true and even **targetAgent.IsActive() == true**.
            targetAgent = !Utility.IsAgentDead(targetAgent) && targetAgent?.Team != null
                ? Mission.PlayerEnemyTeam.PlayerOrderController.Owner
                : !Utility.IsAgentDead(Mission.PlayerEnemyTeam.GeneralAgent) ? Mission.PlayerEnemyTeam.GeneralAgent : Mission.PlayerEnemyTeam.Leader;

            if (Utility.IsAgentDead(targetAgent))
            {
                Utility.DisplayLocalizedText("str_rts_camera_enemy_wiped_out");
                return;
            }
            Utility.DisplayLocalizedText("str_rts_camera_switch_to_enemy_team");

            MissionEvent.OnPreSwitchTeam();
            MissionLibrary.Event.MissionEvent.OnPreSwitchTeam();
            Mission.PlayerEnemyTeam.PlayerOrderController.Owner = targetAgent;
            Mission.PlayerTeam = Mission.PlayerEnemyTeam;
            _controlTroopLogic.SetToMainAgent(targetAgent);
            MissionLibrary.Event.MissionEvent.OnPostSwitchTeam();
            MissionEvent.OnPostSwitchTeam();

            if (firstTime)
            {
                foreach (var formation in Mission.PlayerTeam.FormationsIncludingEmpty)
                {
                    bool isAIControlled = formation.IsAIControlled;
                    formation.PlayerOwner    = Mission.MainAgent;
                    formation.IsAIControlled = isAIControlled;
                }
            }
        }
示例#5
0
        public bool ForceControlAgent(Agent agent)
        {
            try
            {
                if (agent != null)
                {
                    if (agent.Controller == Agent.ControllerType.Player || agent.Team != Mission.PlayerTeam)
                    {
                        return(false);
                    }
                    if (!Utility.IsPlayerDead() && Mission.MainAgent != agent)
                    {
                        MissionEvent.OnMainAgentWillBeChangedToAnotherOne(agent);
                        MissionLibrary.Event.MissionEvent.OnMainAgentWillBeChangedToAnotherOne(agent);
                        Utility.AIControlMainAgent(false);
                    }
                    bool shouldSmoothMoveToAgent = Utility.BeforeSetMainAgent();
                    if (_switchFreeCameraLogic.IsSpectatorCamera)
                    {
                        Mission.MainAgent = agent;
                        _switchFreeCameraLogic.SwitchCamera();
                    }
                    else
                    {
                        Utility.PlayerControlAgent(agent);
                    }

                    Utility.AfterSetMainAgent(shouldSmoothMoveToAgent, _flyCameraMissionView.MissionScreen);

                    return(true);
                }
                else
                {
                    Utility.DisplayLocalizedText("str_rts_camera_no_troop_to_control");
                    return(false);
                }
            }
            catch (Exception e)
            {
                Utility.DisplayMessage(e.ToString());
            }

            return(false);
        }
    // Use this for initialization
    void Awake()
    {
        if (S == null)
        {
            S = this;
        }

        NewMissionAssigned = new MissionEvent();
        NewMissionAssigned.AddListener(UpdateMissionPlanetDisplay);
        player         = GameObject.FindObjectOfType <PlayerShip>();
        gameController = GameObject.FindObjectOfType <GameController>();
        Invoke("AssignFirstMission", 0.5f);

        // Set up IPausable fields
        Paused   = new UnityEvent();
        Unpaused = new UnityEvent();
        isPaused = false;

        // Set up stuff that's normally just in the inspector
        missionTimeFill = GameObject.Find("MissionTimeFill").GetComponent <Image>();
        missionLabel    = GameObject.Find("MissionLabel").GetComponent <Text>();
    }
示例#7
0
 public override void Action()
 {
     EventDispatcher.Dispatch(MissionEvent.Prepare(Mission, StateToSet));
 }
示例#8
0
    public void Process(MissionEvent ev)
    {
        switch (_currentState)
        {
        case MissionState.LAUNCHING:
            if (ev == MissionEvent.LAUNCHED)
            {
                _currentState = MissionState.SPIN_WHEEL;
                _lightsManager.SetWheelMission();
            }
            break;

        case MissionState.SPIN_WHEEL:
            if (ev == MissionEvent.WHEEL_FILL)
            {
                if (Random.value < 0.5)
                {
                    _currentState = MissionState.TAKE_RAMP;
                    _lightsManager.SetRampMission();
                }
                else
                {
                    _currentState = MissionState.HIT_TARGETS;
                    _lightsManager.SetTargetsMission();
                }
                _scoreManager.AddScore(ScoreManager.MISSION_SCORE);
            }
            if (ev == MissionEvent.BALL_LOST)
            {
                _currentState = MissionState.LAUNCHING;
                _ballManager.LoseBall();
            }
            break;

        case MissionState.TAKE_RAMP:
            if (ev == MissionEvent.RAMP_TAKEN)
            {
                _currentState = MissionState.LOCK_BALL;
                _lightsManager.SetLockMission();
                _scoreManager.AddScore(ScoreManager.MISSION_SCORE);
            }
            if (ev == MissionEvent.BALL_LOST)
            {
                _currentState = MissionState.LAUNCHING;
                _ballManager.LoseBall();
            }
            break;

        case MissionState.HIT_TARGETS:
            if (ev == MissionEvent.TARGET_FILL)
            {
                _currentState = MissionState.LOCK_BALL;
                _lightsManager.SetLockMission();
                _scoreManager.AddScore(ScoreManager.MISSION_SCORE);
            }
            if (ev == MissionEvent.BALL_LOST)
            {
                _currentState = MissionState.LAUNCHING;
                _ballManager.LoseBall();
            }
            break;

        case MissionState.LOCK_BALL:
            if (ev == MissionEvent.BALL_LOCKED)
            {
                _missionCount++;
                if (_missionCount == MissionsRequired)
                {
                    _currentState   = MissionState.MULTIBALL;
                    _multiballCount = 3;
                }
                else
                {
                    _currentState = MissionState.LAUNCHING;
                }
                _scoreManager.AddScore(ScoreManager.MISSION_SCORE);
            }
            if (ev == MissionEvent.BALL_LOST)
            {
                _currentState = MissionState.LAUNCHING;
                _ballManager.LoseBall();
            }
            break;

        case MissionState.MULTIBALL:
            if (ev == MissionEvent.BALL_LOST)
            {
                _multiballCount--;
                if (_multiballCount == 1)
                {
                    _currentState = MissionState.SPIN_WHEEL;
                    _lightsManager.SetWheelMission();
                }
            }
            break;
        }
    }