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); }
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); }
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); }
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>()); }); }
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); } }