static bool Prefix(MissionLevelDetailViewController __instance, MissionNode ____missionNode, TextMeshProUGUI ____missionText, TextMeshProUGUI ____songNameText, TextMeshProUGUI ____difficultyText, TextMeshProUGUI ____characteristicsText, ObjectiveListItemsList ____objectiveListItems, GameplayModifiersModelSO ____gameplayModifiersModel, GameObject ____modifiersPanelGO, GameplayModifierInfoListItemsList ____gameplayModifierInfoListItemsList)
 {
     if (____missionNode.missionData is CustomMissionDataSO)
     {
         CustomMissionDataSO       missionData = (____missionNode.missionData as CustomMissionDataSO);
         CustomPreviewBeatmapLevel level       = missionData.customLevel;
         ____missionText.text = Localization.Get("CAMPAIGN_MISSION") + " " + ____missionNode.formattedMissionNodeName;
         if (level == null)
         {
             ____songNameText.text        = string.Format(Localization.Get("CAMPAIGN_SONG"), "SONG NOT FOUND");
             ____difficultyText.text      = string.Format(Localization.Get("CAMPAIGN_DIFFICULTY"), "NOT FOUND");
             ____characteristicsText.text = string.Format(Localization.Get("CAMPAIGN_TYPE"), "NOT FOUND");
         }
         else
         {
             ____songNameText.text        = string.Format(Localization.Get("CAMPAIGN_SONG"), level.songName);
             ____difficultyText.text      = string.Format(Localization.Get("CAMPAIGN_DIFFICULTY"), BeatmapDifficultyMethods.Name(missionData.beatmapDifficulty));
             ____characteristicsText.text = string.Format(Localization.Get("CAMPAIGN_TYPE"), Localization.Get(missionData.beatmapCharacteristic.characteristicNameLocalizationKey));
         }
         MissionObjective[] missionObjectives = missionData.missionObjectives;
         ____objectiveListItems.SetData((missionObjectives.Length == 0) ? 1 : missionObjectives.Length, delegate(int idx, ObjectiveListItem objectiveListItem)
         {
             if (idx == 0 && missionObjectives.Length == 0)
             {
                 objectiveListItem.title         = Localization.Get("CAMPAIGN_FINISH_LEVEL");
                 objectiveListItem.conditionText = "";
                 objectiveListItem.hideCondition = true;
             }
             else
             {
                 MissionObjective missionObjective = missionObjectives[idx];
                 if (missionObjective.type.noConditionValue)
                 {
                     objectiveListItem.title         = missionObjective.type.objectiveNameLocalized.Replace(" ", "\n");
                     objectiveListItem.hideCondition = true;
                 }
                 else
                 {
                     objectiveListItem.title         = missionObjective.type.objectiveNameLocalized;
                     objectiveListItem.hideCondition = false;
                     ObjectiveValueFormatterSO objectiveValueFormater = missionObjective.type.objectiveValueFormater;
                     objectiveListItem.conditionText = $"{MissionDataExtensions.Name(missionObjective.referenceValueComparisonType)} {objectiveValueFormater.FormatValue(missionObjective.referenceValue)}";
                 }
             }
         });
         List <GameplayModifierParamsSO> modifierParamsList = ____gameplayModifiersModel.GetModifierParams(missionData.gameplayModifiers);
         ____modifiersPanelGO.SetActive(modifierParamsList.Count > 0);
         ____gameplayModifierInfoListItemsList.SetData(modifierParamsList.Count, delegate(int idx, GameplayModifierInfoListItem gameplayModifierInfoListItem)
         {
             GameplayModifierParamsSO gameplayModifierParamsSO = modifierParamsList[idx];
             gameplayModifierInfoListItem.modifierIcon         = gameplayModifierParamsSO.icon;
             gameplayModifierInfoListItem.modifierName         = Localization.Get(gameplayModifierParamsSO.modifierNameLocalizationKey);
             gameplayModifierInfoListItem.modifierDescription  = Localization.Get(gameplayModifierParamsSO.descriptionLocalizationKey);
             gameplayModifierInfoListItem.showSeparator        = (idx != modifierParamsList.Count - 1);
         });
         return(false);
     }
     return(true);
 }
 static bool Prefix(MissionLevelDetailViewController __instance, MissionNode ____missionNode, LevelBar ____levelBar, ObjectiveListItemsList ____objectiveListItems, GameplayModifiersModelSO ____gameplayModifiersModel, GameObject ____modifiersPanelGO, GameplayModifierInfoListItemsList ____gameplayModifierInfoListItemsList)
 {
     if (____missionNode.missionData is CustomMissionDataSO)
     {
         CustomMissionDataSO       missionData = (____missionNode.missionData as CustomMissionDataSO);
         CustomPreviewBeatmapLevel level       = missionData.customLevel;
         if (level == null)
         {
             // TODO: Localization?
             ____levelBar.GetPrivateField <TextMeshProUGUI>("_songNameText").text   = "SONG NOT FOUND";
             ____levelBar.GetPrivateField <TextMeshProUGUI>("_difficultyText").text = "SONG NOT FOUND";
             ____levelBar.GetPrivateField <TextMeshProUGUI>("_authorNameText").text = "SONG NOT FOUND";
         }
         else
         {
             ____levelBar.Setup(level, missionData.beatmapCharacteristic, missionData.beatmapDifficulty);
         }
         MissionObjective[] missionObjectives = missionData.missionObjectives;
         ____objectiveListItems.SetData((missionObjectives.Length == 0) ? 1 : missionObjectives.Length, delegate(int idx, ObjectiveListItem objectiveListItem)
         {
             if (idx == 0 && missionObjectives.Length == 0)
             {
                 objectiveListItem.title         = Localization.Get("CAMPAIGN_FINISH_LEVEL");
                 objectiveListItem.conditionText = "";
                 objectiveListItem.hideCondition = true;
             }
             else
             {
                 MissionObjective missionObjective = missionObjectives[idx];
                 if (missionObjective.type.noConditionValue)
                 {
                     objectiveListItem.title         = missionObjective.type.objectiveNameLocalized.Replace(" ", "\n");
                     objectiveListItem.hideCondition = true;
                 }
                 else
                 {
                     objectiveListItem.title         = missionObjective.type.objectiveNameLocalized;
                     objectiveListItem.hideCondition = false;
                     ObjectiveValueFormatterSO objectiveValueFormater = missionObjective.type.objectiveValueFormater;
                     objectiveListItem.conditionText = $"{MissionDataExtensions.Name(missionObjective.referenceValueComparisonType)} {objectiveValueFormater.FormatValue(missionObjective.referenceValue)}";
                 }
             }
         });
         List <GameplayModifierParamsSO> modifierParamsList = ____gameplayModifiersModel.GetModifierParams(missionData.gameplayModifiers);
         ____modifiersPanelGO.SetActive(modifierParamsList.Count > 0);
         ____gameplayModifierInfoListItemsList.SetData(modifierParamsList.Count, delegate(int idx, GameplayModifierInfoListItem gameplayModifierInfoListItem)
         {
             GameplayModifierParamsSO gameplayModifierParamsSO = modifierParamsList[idx];
             gameplayModifierInfoListItem.modifierIcon         = gameplayModifierParamsSO.icon;
             gameplayModifierInfoListItem.hoverHintText        = Localization.Get(gameplayModifierParamsSO.modifierNameLocalizationKey) + " - " + Localization.Get(gameplayModifierParamsSO.descriptionLocalizationKey);
         });
         return(false);
     }
     return(true);
 }
Пример #3
0
 static bool Prefix(MissionCompletionResults missionCompletionResults, MissionNode missionNode, AchievementsEvaluationHandler __instance)
 {
     if (missionNode.missionData is CustomMissionDataSO)
     {
         __instance.ProcessMissionFinishData(missionNode, missionCompletionResults);
         IDifficultyBeatmap difficultyBeatmap = BeatmapLevelDataExtensions.GetDifficultyBeatmap(Loader.BeatmapLevelsModelSO.GetBeatmapLevelIfLoaded((missionNode.missionData as CustomMissionDataSO).customLevel.levelID).beatmapLevelData, missionNode.missionData.beatmapCharacteristic, missionNode.missionData.beatmapDifficulty);
         __instance.ProcessLevelFinishData(difficultyBeatmap, missionCompletionResults.levelCompletionResults);
         return(false);
     }
     return(true);
 }
Пример #4
0
 public static void SetActiveMission(MissionNode mission)
 {
     instance.activeMission         = mission;
     instance.missionObjectiveNodes = mission.GetObjectives();
     Debug.Log("objective nodes length: " + instance.missionObjectiveNodes.Count);
     Debug.Log("GetObjectives results: " + mission.GetObjectives().Count);
     HideMissionAcceptPanel();
     instance.StartCoroutine(instance.HandleMissionStart());
     instance.DisableOtherMissionNodes();
     instance.EnableAllMissionObjectives();
     instance.indicator.SwitchIndicator(IndicatorManager.signState.Arrow);
 }
Пример #5
0
    public static void ShowMissionPopupScreen(MissionNode mission)
    {
        var popup = Instantiate(instance.m_selectMissionScreen, FindObjectOfType <Canvas>().transform);

        popup.transform.Find("MissionName").GetComponent <Text>().text        = mission.Name;
        popup.transform.Find("MissionDescription").GetComponent <Text>().text = mission.Description;

        for (int i = 0; i < MissionController.ENEMIES_PER_SCENE; i++)
        {
            popup.transform.Find("Enemy" + i).GetComponentInChildren <Text>().text = "Enemy";
        }

        popup.transform.Find("Play").GetComponent <Button>().onClick.AddListener(delegate { LoadMission(mission.SceneName, mission.GetComponent <Testing_MissionEnemyList>()?.enemies, new List <ICard>()); });
    }
Пример #6
0
        public static void Show(MissionNode mission)
        {
            var popup = FindObjectOfType <MissionPopup>() ?? Instantiate(Resources.Load <MissionPopup>("UI/MissionPopup"), FindObjectOfType <Canvas>().transform);

            popup.transform.Find("MissionName").GetComponent <Text>().text        = mission.Name;
            popup.transform.Find("MissionDescription").GetComponent <Text>().text = mission.Description;

            for (int i = 0; i < MissionController.ENEMIES_PER_SCENE; i++)
            {
                popup.transform.Find("Enemy" + i).GetComponentInChildren <Text>().text = "Enemy";
            }

            popup.transform.Find("Play").GetComponent <Button>().onClick.AddListener(delegate { GameManager.LoadMission(mission.SceneName, mission.GetComponent <Testing_MissionEnemyList>()?.enemies, FindObjectOfType <Testing_PlayerCardDeck>().playerDeck); });
        }
 public void SetBaseCampaignEnabled(bool enabled)
 {
     try
     {
         if (!enabled)
         {
             _mapScrollView.OnDestroy();
             _mapScrollView.Awake();
             if (!_missionNodesManager.IsInitialized)
             {
                 _missionNodesManager.Awake();
             }
             baseNodes         = _missionNodesManager.GetPrivateField <MissionNode[]>("_allMissionNodes");
             baseRoot          = _missionNodesManager.GetPrivateField <MissionNode>("_rootMissionNode");
             baseFinal         = _missionNodesManager.GetPrivateField <MissionNode>("_finalMissionNode");
             baseMissionStages = _missionStagesManager.GetPrivateField <MissionStage[]>("_missionStages");
             baseBackground    = _backgroundImage.sprite;
             baseBackAlpha     = _backgroundImage.color.a;
             baseMapHeight     = _mapScrollView.GetPrivateField <RectTransform>("_contentRectTransform").sizeDelta.y;
             baseDefaultLights = _campaignFlowCoordinator.GetPrivateField <MenuLightsPresetSO>("_defaultLightsPreset");
         }
         foreach (MissionNode node in baseNodes)
         {
             node.transform.localPosition += new Vector3(0, enabled ? 10000 : -10000, 0);
             node.gameObject.SetActive(true);
         }
         if (enabled)
         {
             _missionNodesManager.SetPrivateField("_rootMissionNode", baseRoot);
             _missionNodesManager.SetPrivateField("_finalMissionNode", baseFinal);
             _missionStagesManager.SetPrivateField("_missionStages", baseMissionStages);
             _backgroundImage.sprite = baseBackground;
             _backgroundImage.color  = new Color(1, 1, 1, baseBackAlpha);
             _campaignFlowCoordinator.SetPrivateField("_defaultLightsPreset", baseDefaultLights);
             _mapScrollView.GetPrivateField <RectTransform>("_contentRectTransform").SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, baseMapHeight);
             CampaignInit();
         }
         _pageUpModifiersButton.gameObject.SetActive(!enabled);
         _pageDownModifiersButton.gameObject.SetActive(!enabled);
         _challengeName.gameObject.SetActive(!enabled);
     } catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
         Console.WriteLine(ex.StackTrace);
     }
 }
        public void HandleMissionNodeSelectionManagerDidSelectMissionNode(MissionNodeVisualController missionNodeVisualController)
        {
            if (isDownloading)
            {
                return;
            }
            _missionLevelDetailViewController.didPressPlayButtonEvent -= _missionSelectionNavigationController.HandleMissionLevelDetailViewControllerDidPressPlayButton;
            _missionLevelDetailViewController.didPressPlayButtonEvent -= HandleMissionLevelDetailViewControllerDidPressPlayButtonPlay;
            _missionLevelDetailViewController.didPressPlayButtonEvent -= HandleMissionLevelDetailViewControllerDidPressPlayButtonDownload;
            CustomPreviewBeatmapLevel song = ((CustomMissionDataSO)missionNodeVisualController.missionNode.missionData).customLevel;

            if (song == null)
            {
                _missionSelectionMapViewController.HandleMissionNodeSelectionManagerDidSelectMissionNode(missionNodeVisualController);
                _playButton.SetButtonText("DOWNLOAD");
                _missionLevelDetailViewController.didPressPlayButtonEvent += HandleMissionLevelDetailViewControllerDidPressPlayButtonDownload;
                downloadingNode = missionNodeVisualController.missionNode;
            }
            else
            {
                _playButton.SetButtonText("PLAY");
                LoadBeatmap(missionNodeVisualController, (missionNodeVisualController.missionNode.missionData as CustomMissionDataSO).customLevel.levelID);
            }
        }
 static void Postfix(MissionResultsViewController __instance, TextMeshProUGUI ____songNameText, MissionNode ____missionNode)
 {
     if (____missionNode.missionData is CustomMissionDataSO)
     {
         ____songNameText.text = (____missionNode.missionData as CustomMissionDataSO).customLevel.songName;
     }
 }
        public void HandleMissionSelectionMapViewControllerDidSelectMissionLevel(MissionSelectionMapViewController viewController, MissionNode missionNode)
        {
            Challenge challenge = (missionNode.missionData as CustomMissionDataSO).challenge;

            _campaignChallengeLeaderbaordViewController.lastClicked = challenge;
            _campaignFlowCoordinator.InvokePrivateMethod("SetRightScreenViewController", new object[] { _campaignChallengeLeaderbaordViewController, ViewController.AnimationType.In });
            _campaignChallengeLeaderbaordViewController.UpdateLeaderboards();
            _challengeName.text      = challenge.name;
            _challengeName.alignment = TextAlignmentOptions.Bottom;
            List <GameplayModifierParamsSO> modParams = _gameplayModifiersModel.GetModifierParams(missionNode.missionData.gameplayModifiers);

            foreach (string modName in challenge.externalModifiers.Keys)
            {
                if (!ChallengeExternalModifiers.getInfo.ContainsKey(modName))
                {
                    continue;
                }
                foreach (ExternalModifierInfo modInfo in ChallengeExternalModifiers.getInfo[modName](challenge.externalModifiers[modName]))
                {
                    modParams.Add(APITools.CreateModifierParam(modInfo.icon, modInfo.name, modInfo.desc));
                }
            }
            foreach (UnlockableItem item in challenge.unlockableItems)
            {
                modParams.Add(item.GetModifierParam());
            }
            if (challenge.unlockMap)
            {
                modParams.Add(APITools.CreateModifierParam(Assets.UnlockableSongIcon, "Unlockable Song", "Unlock this song on completion"));
            }
            LoadModifiersPanel(modParams);
        }
        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);
            }
        }