public void OpenCampaign(Campaign campaign)
        {
            try
            {
                unlockAllMissions = campaign.info.allUnlocked;
                if (campaign.background == null)
                {
                    _backgroundImage.color = new Color(1, 1, 1, 0);
                }
                else
                {
                    _backgroundImage.color  = new Color(1, 1, 1, campaign.info.backgroundAlpha);
                    _backgroundImage.sprite = campaign.background;
                }
                MenuLightsPresetSO customLights = Instantiate(baseDefaultLights);

                SimpleColorSO color = ScriptableObject.CreateInstance <SimpleColorSO>();
                color.SetColor(new Color(campaign.info.lightColor.r, campaign.info.lightColor.g, campaign.info.lightColor.b));
                foreach (LightIdColorPair pair in customLights.lightIdColorPairs)
                {
                    pair.baseColor = color;
                }
                _campaignFlowCoordinator.SetPrivateField("_defaultLightsPreset", customLights);
                MissionNode[] missionNodes = new MissionNode[campaign.info.mapPositions.Count];
                curCampaignNodes = missionNodes;
                MissionStage[] missionStages;
                if (campaign.info.unlockGate.Count == 0 || unlockAllMissions)
                {
                    //campaigns require an unlock gate so I make a fake one above the visible map area
                    missionStages    = new MissionStage[1];
                    missionStages[0] = Instantiate(baseMissionStages[0], _missionNodesManager.GetPrivateField <GameObject>("_missionNodesParentObject").transform);
                    missionStages[0].SetPrivateField("_minimumMissionsToUnlock", 0);
                    missionStages[0].GetPrivateField <RectTransform>("_rectTransform").localPosition = new Vector3(0, -baseMapHeight / 2 + campaign.info.mapHeight * EDITOR_TO_GAME_UNITS + HEIGHT_OFFSET / 2 + 1000, 0);
                }
                else
                {
                    missionStages = new MissionStage[campaign.info.unlockGate.Count + 1];
                    for (int i = 0; i < missionStages.Length - 1; i++)
                    {
                        missionStages[i] = Instantiate(baseMissionStages[0], _missionNodesManager.GetPrivateField <GameObject>("_missionNodesParentObject").transform);
                        missionStages[i].SetPrivateField("_minimumMissionsToUnlock", campaign.info.unlockGate[i].clearsToPass);
                        missionStages[i].GetPrivateField <RectTransform>("_rectTransform").localPosition = new Vector3(campaign.info.unlockGate[i].x * EDITOR_TO_GAME_UNITS, -baseMapHeight / 2 + campaign.info.mapHeight * EDITOR_TO_GAME_UNITS + HEIGHT_OFFSET / 2 - campaign.info.unlockGate[i].y * EDITOR_TO_GAME_UNITS, 0);
                    }
                    //ghost unlock gate required for some reason as last unlock gate never gets cleared
                    missionStages[campaign.info.unlockGate.Count] = Instantiate(baseMissionStages[0], _missionNodesManager.GetPrivateField <GameObject>("_missionNodesParentObject").transform);
                    missionStages[campaign.info.unlockGate.Count].SetPrivateField("_minimumMissionsToUnlock", campaign.info.mapPositions.Count + 1);
                    missionStages[campaign.info.unlockGate.Count].GetPrivateField <RectTransform>("_rectTransform").localPosition = new Vector3(0, -baseMapHeight / 2 + campaign.info.mapHeight * EDITOR_TO_GAME_UNITS + HEIGHT_OFFSET / 2 + 1000, 0);
                }
                curMissionStages = missionStages;
                _missionStagesManager.SetPrivateField("_missionStages", (from stage in missionStages orderby stage.minimumMissionsToUnlock select stage).ToArray());
                for (int i = 0; i < missionNodes.Length; i++)
                {
                    CampainMapPosition mapPosition = campaign.info.mapPositions[i];
                    missionNodes[i] = Instantiate(baseNodes[0], _missionNodesManager.GetPrivateField <GameObject>("_missionNodesParentObject").transform);
                    missionNodes[i].gameObject.SetActive(true);
                    missionNodes[i].SetPrivateField("_missionDataSO", campaign.challenges[i].GetMissionData(campaign));
                    missionNodes[i].GetPrivateField <RectTransform>("_rectTransform").localPosition = new Vector3(mapPosition.x * EDITOR_TO_GAME_UNITS, -baseMapHeight / 2 + campaign.info.mapHeight * EDITOR_TO_GAME_UNITS + HEIGHT_OFFSET / 2 - mapPosition.y * EDITOR_TO_GAME_UNITS, 0);
                    missionNodes[i].GetPrivateField <RectTransform>("_rectTransform").sizeDelta     = new Vector2(12 * mapPosition.scale, 12 * mapPosition.scale);
                    missionNodes[i].SetPrivateField("_letterPartName", mapPosition.letterPortion);
                    missionNodes[i].SetPrivateField("_numberPartName", mapPosition.numberPortion);
                }
                for (int i = 0; i < missionNodes.Length; i++)
                {
                    MissionNode[] children = new MissionNode[campaign.info.mapPositions[i].childNodes.Length];
                    for (int j = 0; j < children.Length; j++)
                    {
                        children[j] = missionNodes[campaign.info.mapPositions[i].childNodes[j]];
                    }
                    missionNodes[i].SetPrivateField("_childNodes", children);
                }
                _missionNodesManager.SetPrivateField("_rootMissionNode", missionNodes[0]);
                _mapScrollView.GetPrivateField <RectTransform>("_contentRectTransform").SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, campaign.info.mapHeight * EDITOR_TO_GAME_UNITS + HEIGHT_OFFSET);
                CampaignInit();
                PresentFlowCoordinator(_campaignFlowCoordinator, delegate()
                {
                    _campaignFlowCoordinator.InvokePrivateMethod("SetTitle", new object[] { campaign.info.name, ViewController.AnimationType.In });
                    _missionNodeSelectionManager.didSelectMissionNodeEvent    -= _missionSelectionMapViewController.HandleMissionNodeSelectionManagerDidSelectMissionNode;
                    _missionLevelDetailViewController.didPressPlayButtonEvent -= _missionSelectionNavigationController.HandleMissionLevelDetailViewControllerDidPressPlayButton;
                    _missionResultsViewController.retryButtonPressedEvent     += HandleMissionResultsViewControllerRetryButtonPressed;
                    _missionResultsViewController.retryButtonPressedEvent     -= _campaignFlowCoordinator.HandleMissionResultsViewControllerRetryButtonPressed;
                    _campaignFlowCoordinator.didFinishEvent -= BeatSaberUI.MainFlowCoordinator.HandleCampaignFlowCoordinatorDidFinish;
                    _campaignFlowCoordinator.didFinishEvent += CloseCampaign;
                    _missionSelectionMapViewController.didSelectMissionLevelEvent += HandleMissionSelectionMapViewControllerDidSelectMissionLevel;
                    _missionResultsViewController.continueButtonPressedEvent      += HandleMissionResultsViewControllerContinueButtonPressed;
                    _missionMapAnimationController.ScrollToTopMostNotClearedMission();
                    _playButton.interactable = true;
                });
                _missionNodeSelectionManager.didSelectMissionNodeEvent += HandleMissionNodeSelectionManagerDidSelectMissionNode;
                (_campaignChallengeLeaderbaordViewController.table.transform.GetChild(1).GetChild(0).transform as RectTransform).localScale = new Vector3(1, 0.9f, 1);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
            }
        }
示例#2
0
        private static void SetStage(MissionStage newStage)
        {
            if (IsActive)
            {
                switch (newStage)
                {
                case MissionStage.LoseCops:
                    _missionStage  = newStage;
                    _objectiveText = "Lose the cops.";

                    foreach (Blip blip in _missionBlips.Values)
                    {
                        if (blip != null)
                        {
                            blip.ShowRoute = false;
                            blip.Alpha     = 0;
                        }
                    }

                    break;

                case MissionStage.GetInVehicle:
                    if (Game.Player.WantedLevel > 0)
                    {
                        _missionStage  = MissionStage.LoseCops;
                        _objectiveText = "Lose the cops.";

                        foreach (Blip blip in _missionBlips.Values)
                        {
                            if (blip != null)
                            {
                                blip.Alpha     = 0;
                                blip.ShowRoute = false;
                            }
                        }
                    }
                    else
                    {
                        if (_missionBlips["vehicle"] != null)
                        {
                            _missionBlips["vehicle"].Alpha = 255;
                        }

                        _missionStage  = MissionStage.GetInVehicle;
                        _objectiveText = _missionType == MissionType.Setup ? "Steal the ~b~supply truck." : "Get in the ~b~delivery vehicle.";

                        if (_missionBlips["deliveryPoint"] != null)
                        {
                            _missionBlips["deliveryPoint"].ShowRoute = false;
                            _missionBlips["deliveryPoint"].Alpha     = 0;
                        }
                    }

                    break;

                case MissionStage.DeliverVehicle:
                    if (_missionBlips["vehicle"] != null)
                    {
                        _missionBlips["vehicle"].Alpha = 0;
                    }

                    if (Game.Player.WantedLevel > 0)
                    {
                        _missionStage  = MissionStage.LoseCops;
                        _objectiveText = "Lose the cops.";

                        foreach (Blip blip in _missionBlips.Values)
                        {
                            if (blip != null)
                            {
                                blip.ShowRoute = false;
                                blip.Alpha     = 0;
                            }
                        }
                    }
                    else
                    {
                        if (_missionBlips["deliveryPoint"] != null)
                        {
                            _missionBlips["deliveryPoint"].ShowRoute = true;
                            _missionBlips["deliveryPoint"].Alpha     = 255;
                        }

                        _missionStage  = MissionStage.DeliverVehicle;
                        _objectiveText = _missionType == MissionType.Setup ? "Deliver the truck to the ~y~meth lab." : "Go to the ~y~delivery point.";
                    }

                    break;
                }
            }
        }
示例#3
0
        public void StateChanged(MissionStage state, Int32 inSpeed, Int32 outSpeed)
        {

        }
示例#4
0
        public static void Stop(MissionFailReason failReason = MissionFailReason.None)
        {
            if (IsActive)
            {
                switch (failReason)
                {
                case MissionFailReason.MissionFlag:
                    Util.NotifyWithPicture("LJT", $"{Util.GetCharacterFromModel(_missionModel)}, try focusing on your task at hand next time!", "CHAR_LJT", 1);
                    break;

                case MissionFailReason.Arrested:
                    Util.NotifyWithPicture("LJT", $"{Util.GetCharacterFromModel(_missionModel)}, be more careful with the cops next time!", "CHAR_LJT", 1);
                    break;

                case MissionFailReason.Wasted:
                    Util.NotifyWithPicture("LJT", $"{Util.GetCharacterFromModel(_missionModel)}, that was really... unprofessional.", "CHAR_LJT", 1);
                    break;

                case MissionFailReason.CharacterChange:
                    Util.NotifyWithPicture("LJT", $"{Util.GetCharacterFromModel(_missionModel)}, that was not a good time to have a personality change...", "CHAR_LJT", 1);
                    break;

                case MissionFailReason.OutOfTime:
                    Util.NotifyWithPicture("LJT", $"{Util.GetCharacterFromModel(_missionModel)}, I've seen slow, but this? This is something new...", "CHAR_LJT", 1);
                    break;

                case MissionFailReason.VehicleDead:
                    Util.NotifyWithPicture("LJT", $"{Util.GetCharacterFromModel(_missionModel)}, be more careful with the vehicle next time!", "CHAR_LJT", 1);
                    break;
                }

                if (_missionVehicle != null)
                {
                    if (failReason == MissionFailReason.ScriptExit)
                    {
                        _missionVehicle.Delete();
                    }
                    else
                    {
                        Function.Call((Hash)0x260BE8F09E326A20, _missionVehicle.Handle, 3.0, 1);
                        Function.Call(Hash.SET_VEHICLE_IS_CONSIDERED_BY_PLAYER, _missionVehicle.Handle, false);
                        if (Game.Player.Character.IsInVehicle(_missionVehicle))
                        {
                            Game.Player.Character.Task.LeaveVehicle();
                        }

                        _missionVehicle.IsPersistent = false;
                        _missionVehicle.MarkAsNoLongerNeeded();
                    }

                    _missionVehicle = null;
                }

                if (_missionType == MissionType.Delivery && failReason != MissionFailReason.ScriptExit)
                {
                    Main.MethLabs[_missionLabIdx].Product -= _productAmount;
                    Main.Save();
                }

                foreach (Blip blip in _missionBlips.Values)
                {
                    blip.Remove();
                }
                foreach (Lab lab in Main.MethLabs)
                {
                    lab.SetBlipVisible(true);
                }

                _missionType    = MissionType.None;
                _missionStage   = MissionStage.None;
                _missionEndTime = -1;
                _missionModel   = -1;
                _missionLabIdx  = -1;
                _productAmount  = 0;

                _objectiveCoords.Clear();
                _missionBlips.Clear();

                IsActive = false;
            }
        }
示例#5
0
 public void StateChanged(MissionStage state, Int32 inSpeed, Int32 outSpeed)
 {
 }