public static void Init() { Plugin.ApplyHarmonyPatches(); if (MainMenuViewController == null) { SoloFreePlayFlowCoordinator = Resources.FindObjectsOfTypeAll <SoloFreePlayFlowCoordinator>().FirstOrDefault(); PartyFreePlayFlowCoordinator = Resources.FindObjectsOfTypeAll <PartyFreePlayFlowCoordinator>().FirstOrDefault(); MainMenuViewController = Resources.FindObjectsOfTypeAll <MainMenuViewController>().FirstOrDefault(); if (MainMenuViewController == null) { return; } MainMenuViewController.didFinishEvent += MainMenuViewController_didFinishEvent; if (CharacteristicSelectionViewController == null) { CharacteristicSelectionViewController = Resources.FindObjectsOfTypeAll <BeatmapCharacteristicSegmentedControlController>().FirstOrDefault(); if (CharacteristicSelectionViewController != null) { CharacteristicSelectionViewController.didSelectBeatmapCharacteristicEvent += CharacteristicSelectionViewController_didSelectBeatmapCharacteristicEvent; } } } }
/// <summary> /// Constructor. Acquire all necessary BeatSaberUi elements. /// </summary> /// <param name="flowCoordinator"></param> public BeatSaberUIController(LevelSelectionFlowCoordinator flowCoordinator) { Logger.Debug("Collecting all BeatSaberUI Elements..."); LevelSelectionFlowCoordinator = flowCoordinator; // gather flow coordinator elements LevelSelectionNavigationController = LevelSelectionFlowCoordinator.GetField <LevelSelectionNavigationController, LevelSelectionFlowCoordinator>("levelSelectionNavigationController"); Logger.Debug("Acquired LevelSelectionNavigationController [{0}]", LevelSelectionNavigationController.GetInstanceID()); LevelFilteringNavigationController = LevelSelectionNavigationController.GetField <LevelFilteringNavigationController, LevelSelectionNavigationController>("_levelFilteringNavigationController"); Logger.Debug("Acquired LevelFilteringNavigationController [{0}]", LevelFilteringNavigationController.GetInstanceID()); LevelCollectionNavigationController = LevelSelectionNavigationController.GetField <LevelCollectionNavigationController, LevelSelectionNavigationController>("_levelCollectionNavigationController"); Logger.Debug("Acquired LevelCollectionNavigationController [{0}]", LevelCollectionNavigationController.GetInstanceID()); LevelCollectionViewController = LevelCollectionNavigationController.GetField <LevelCollectionViewController, LevelCollectionNavigationController>("_levelCollectionViewController"); Logger.Debug("Acquired LevelPackLevelsViewController [{0}]", LevelCollectionViewController.GetInstanceID()); LevelDetailViewController = LevelCollectionNavigationController.GetField <StandardLevelDetailViewController, LevelCollectionNavigationController>("_levelDetailViewController"); Logger.Debug("Acquired StandardLevelDetailViewController [{0}]", LevelDetailViewController.GetInstanceID()); LevelCollectionTableView = this.LevelCollectionViewController.GetField <LevelCollectionTableView, LevelCollectionViewController>("_levelCollectionTableView"); Logger.Debug("Acquired LevelPackLevelsTableView [{0}]", LevelCollectionTableView.GetInstanceID()); StandardLevelDetailView = LevelDetailViewController.GetField <StandardLevelDetailView, StandardLevelDetailViewController>("_standardLevelDetailView"); Logger.Debug("Acquired StandardLevelDetailView [{0}]", StandardLevelDetailView.GetInstanceID()); BeatmapCharacteristicSelectionViewController = StandardLevelDetailView.GetField <BeatmapCharacteristicSegmentedControlController, StandardLevelDetailView>("_beatmapCharacteristicSegmentedControlController"); Logger.Debug("Acquired BeatmapCharacteristicSegmentedControlController [{0}]", BeatmapCharacteristicSelectionViewController.GetInstanceID()); LevelDifficultyViewController = StandardLevelDetailView.GetField <BeatmapDifficultySegmentedControlController, StandardLevelDetailView>("_beatmapDifficultySegmentedControlController"); Logger.Debug("Acquired BeatmapDifficultySegmentedControlController [{0}]", LevelDifficultyViewController.GetInstanceID()); LevelCollectionTableViewTransform = LevelCollectionTableView.transform as RectTransform; Logger.Debug("Acquired TableViewRectTransform from LevelPackLevelsTableView [{0}]", LevelCollectionTableViewTransform.GetInstanceID()); AnnotatedBeatmapLevelCollectionsViewController = LevelFilteringNavigationController.GetField <AnnotatedBeatmapLevelCollectionsViewController, LevelFilteringNavigationController>("_annotatedBeatmapLevelCollectionsViewController"); Logger.Debug("Acquired AnnotatedBeatmapLevelCollectionsViewController from LevelFilteringNavigationController [{0}]", AnnotatedBeatmapLevelCollectionsViewController.GetInstanceID()); TableView tableView = LevelCollectionTableView.GetField <TableView, LevelCollectionTableView>("_tableView"); ScrollView scrollView = tableView.GetField <ScrollView, TableView>("_scrollView"); TableViewPageUpButton = scrollView.GetField <Button, ScrollView>("_pageUpButton"); TableViewPageDownButton = scrollView.GetField <Button, ScrollView>("_pageDownButton"); Logger.Debug("Acquired Page Up and Down buttons..."); ActionButtons = StandardLevelDetailView.GetComponentsInChildren <RectTransform>().First(x => x.name == "ActionButtons"); Logger.Debug("Acquired ActionButtons [{0}]", ActionButtons.GetInstanceID()); ScreenSystem = Resources.FindObjectsOfTypeAll <ScreenSystem>().Last(); Logger.Debug("Acquired ScreenSystem [{0}]", ScreenSystem.GetInstanceID()); SimpleDialogPromptViewControllerPrefab = Resources.FindObjectsOfTypeAll <SimpleDialogPromptViewController>().Last(); Logger.Debug("Acquired SimpleDialogPromptViewControllerPrefab [{0}]", SimpleDialogPromptViewControllerPrefab.GetInstanceID()); BeatmapLevelsModel = Resources.FindObjectsOfTypeAll <BeatmapLevelsModel>().Last(); Logger.Debug("Acquired BeatmapLevelsModel [{0}]", BeatmapLevelsModel); }
public LTUI(Config config, StandardLevelDetailViewController standardLevelDetailViewController) { Y2Pos = -100f; _config = config; _standardLevelDetailViewController = standardLevelDetailViewController; _detailView = standardLevelDetailViewController.GetField <StandardLevelDetailView, StandardLevelDetailViewController>("_standardLevelDetailView"); _beatmapCharacteristicSegmentedControlController = _detailView.GetField <BeatmapCharacteristicSegmentedControlController, StandardLevelDetailView>("_beatmapCharacteristicSegmentedControlController"); }
public DifficultyHighlighter(StandardLevelDetailViewController standardLevelDetailViewController) { StandardLevelDetailView standardLevelDetailView = Accessors.StandardLevelDetailViewAccessor(ref standardLevelDetailViewController); beatmapCharacteristicSegmentedControlController = Accessors.BeatmapCharacteristicSegmentedControlController(ref standardLevelDetailView); beatmapCharacteristicSegmentedControl = Accessors.BeatmapCharacteristicsSegmentedControlAccessor(ref beatmapCharacteristicSegmentedControlController); beatmapDifficultySegmentedControlController = Accessors.BeatmapDifficultySegmentedControlControllerAccessor(ref standardLevelDetailView); beatmapDifficultySegmentedControl = Accessors.BeatmapDifficultySegmentedControlAccessor(ref beatmapDifficultySegmentedControlController); }
public DiffdelController(Config config, PlatformLeaderboardViewController platformLeaderboardViewController, StandardLevelDetailViewController standardLevelDetailViewController) { _config = config; _platformLeaderboardViewController = platformLeaderboardViewController; _standardLevelDetailView = Accessors.LevelDetailView(ref standardLevelDetailViewController) !; _buttonText = (Accessors.NPSText(ref Accessors.ParamsPanel(ref _standardLevelDetailView)) as ButtonText) !; _beatmapCharacteristicSegmentedControlController = (Accessors.CharacteristicSegment(ref _standardLevelDetailView)) !; _diffdelDifficultyControlController = (Accessors.DifficultySegment(ref _standardLevelDetailView) as DiffdelDifficultyControlController) !; }
/// <summary> /// Constructor. Acquire all necessary BeatSaberUi elements. /// </summary> /// <param name="flowCoordinator"></param> public BeatSaberUIController(FlowCoordinator flowCoordinator) { Logger.Debug("Collecting all BeatSaberUI Elements..."); LevelSelectionFlowCoordinator = flowCoordinator; // gather flow coordinator elements LevelSelectionNavigationController = LevelSelectionFlowCoordinator.GetPrivateField <LevelSelectionNavigationController>("_levelSelectionNavigationController"); Logger.Debug("Acquired LevelSelectionNavigationController [{0}]", LevelSelectionNavigationController.GetInstanceID()); // this is loaded late but available early, grab globally. LevelFilteringNavigationController = Resources.FindObjectsOfTypeAll <LevelFilteringNavigationController>().First(); //LevelSelectionFlowCoordinator.GetPrivateField<LevelFilteringNavigationController>("_levelFilteringNavigationController"); Logger.Debug("Acquired LevelFilteringNavigationController [{0}]", LevelFilteringNavigationController.GetInstanceID()); // grab nav controller elements LevelCollectionViewController = LevelSelectionNavigationController.GetPrivateField <LevelCollectionViewController>("_levelCollectionViewController"); Logger.Debug("Acquired LevelPackLevelsViewController [{0}]", LevelCollectionViewController.GetInstanceID()); LevelDetailViewController = LevelSelectionNavigationController.GetPrivateField <StandardLevelDetailViewController>("_levelDetailViewController"); Logger.Debug("Acquired StandardLevelDetailViewController [{0}]", LevelDetailViewController.GetInstanceID()); // grab level collection view controller elements LevelCollectionTableView = this.LevelCollectionViewController.GetPrivateField <LevelCollectionTableView>("_levelCollectionTableView"); Logger.Debug("Acquired LevelPackLevelsTableView [{0}]", LevelCollectionTableView.GetInstanceID()); // grab letel detail view StandardLevelDetailView = LevelDetailViewController.GetPrivateField <StandardLevelDetailView>("_standardLevelDetailView"); Logger.Debug("Acquired StandardLevelDetailView [{0}]", StandardLevelDetailView.GetInstanceID()); BeatmapCharacteristicSelectionViewController = Resources.FindObjectsOfTypeAll <BeatmapCharacteristicSegmentedControlController>().First(); Logger.Debug("Acquired BeatmapCharacteristicSegmentedControlController [{0}]", BeatmapCharacteristicSelectionViewController.GetInstanceID()); LevelDifficultyViewController = StandardLevelDetailView.GetPrivateField <BeatmapDifficultySegmentedControlController>("_beatmapDifficultySegmentedControlController"); Logger.Debug("Acquired BeatmapDifficultySegmentedControlController [{0}]", LevelDifficultyViewController.GetInstanceID()); LevelCollectionTableViewTransform = LevelCollectionTableView.transform as RectTransform; Logger.Debug("Acquired TableViewRectTransform from LevelPackLevelsTableView [{0}]", LevelCollectionTableViewTransform.GetInstanceID()); TableView tableView = LevelCollectionTableView.GetPrivateField <TableView>("_tableView"); TableViewPageUpButton = tableView.GetPrivateField <Button>("_pageUpButton"); TableViewPageDownButton = tableView.GetPrivateField <Button>("_pageDownButton"); Logger.Debug("Acquired Page Up and Down buttons..."); PlayContainer = StandardLevelDetailView.GetComponentsInChildren <RectTransform>().First(x => x.name == "PlayContainer"); PlayButtons = PlayContainer.GetComponentsInChildren <RectTransform>().First(x => x.name == "PlayButtons"); PlayButton = Resources.FindObjectsOfTypeAll <Button>().First(x => x.name == "PlayButton"); PracticeButton = PlayButtons.GetComponentsInChildren <Button>().First(x => x.name == "PracticeButton"); SimpleDialogPromptViewControllerPrefab = Resources.FindObjectsOfTypeAll <SimpleDialogPromptViewController>().First(); BeatmapLevelsModel = Resources.FindObjectsOfTypeAll <BeatmapLevelsModel>().First(); }
/// <summary> /// Constructor. Acquire all necessary BeatSaberUi elements. /// </summary> /// <param name="flowCoordinator"></param> public BeatSaberUIController(FlowCoordinator flowCoordinator) { LevelSelectionFlowCoordinator = flowCoordinator; // gather controllers and ui elements. LevelPackViewController = LevelSelectionFlowCoordinator.GetPrivateField <LevelPacksViewController>("_levelPacksViewController"); Logger.Debug("Acquired LevelPacksViewController [{0}]", LevelPackViewController.GetInstanceID()); LevelPackDetailViewController = LevelSelectionFlowCoordinator.GetPrivateField <LevelPackDetailViewController>("_levelPackDetailViewController"); Logger.Debug("Acquired LevelPackDetailViewController [{0}]", LevelPackDetailViewController.GetInstanceID()); LevelPacksTableView = LevelPackViewController.GetPrivateField <LevelPacksTableView>("_levelPacksTableView"); Logger.Debug("Acquired LevelPacksTableView [{0}]", LevelPacksTableView.GetInstanceID()); LevelPackLevelsViewController = LevelSelectionFlowCoordinator.GetPrivateField <LevelPackLevelsViewController>("_levelPackLevelsViewController"); Logger.Debug("Acquired LevelPackLevelsViewController [{0}]", LevelPackLevelsViewController.GetInstanceID()); LevelPackLevelsTableView = this.LevelPackLevelsViewController.GetPrivateField <LevelPackLevelsTableView>("_levelPackLevelsTableView"); Logger.Debug("Acquired LevelPackLevelsTableView [{0}]", LevelPackLevelsTableView.GetInstanceID()); LevelDetailViewController = LevelSelectionFlowCoordinator.GetPrivateField <StandardLevelDetailViewController>("_levelDetailViewController"); Logger.Debug("Acquired StandardLevelDetailViewController [{0}]", LevelDetailViewController.GetInstanceID()); StandardLevelDetailView = LevelDetailViewController.GetPrivateField <StandardLevelDetailView>("_standardLevelDetailView"); Logger.Debug("Acquired StandardLevelDetailView [{0}]", StandardLevelDetailView.GetInstanceID()); BeatmapCharacteristicSelectionViewController = Resources.FindObjectsOfTypeAll <BeatmapCharacteristicSegmentedControlController>().First(); Logger.Debug("Acquired BeatmapCharacteristicSegmentedControlController [{0}]", BeatmapCharacteristicSelectionViewController.GetInstanceID()); LevelSelectionNavigationController = LevelSelectionFlowCoordinator.GetPrivateField <DismissableNavigationController>("_navigationController"); Logger.Debug("Acquired DismissableNavigationController [{0}]", LevelSelectionNavigationController.GetInstanceID()); LevelDifficultyViewController = StandardLevelDetailView.GetPrivateField <BeatmapDifficultySegmentedControlController>("_beatmapDifficultySegmentedControlController"); Logger.Debug("Acquired BeatmapDifficultySegmentedControlController [{0}]", LevelDifficultyViewController.GetInstanceID()); LevelPackLevelsTableViewRectTransform = LevelPackLevelsTableView.transform as RectTransform; Logger.Debug("Acquired TableViewRectTransform from LevelPackLevelsTableView [{0}]", LevelPackLevelsTableViewRectTransform.GetInstanceID()); TableView tableView = ReflectionUtil.GetPrivateField <TableView>(LevelPackLevelsTableView, "_tableView"); TableViewPageUpButton = tableView.GetPrivateField <Button>("_pageUpButton"); TableViewPageDownButton = tableView.GetPrivateField <Button>("_pageDownButton"); Logger.Debug("Acquired Page Up and Down buttons..."); PlayContainer = StandardLevelDetailView.GetComponentsInChildren <RectTransform>().First(x => x.name == "PlayContainer"); PlayButtons = PlayContainer.GetComponentsInChildren <RectTransform>().First(x => x.name == "PlayButtons"); PlayButton = Resources.FindObjectsOfTypeAll <Button>().First(x => x.name == "PlayButton"); PracticeButton = PlayButtons.GetComponentsInChildren <Button>().First(x => x.name == "PracticeButton"); SimpleDialogPromptViewControllerPrefab = Resources.FindObjectsOfTypeAll <SimpleDialogPromptViewController>().First(); }
private static void Postfix(StandardLevelDetailView __instance, ref IDifficultyBeatmap ____selectedDifficultyBeatmap, ref Button ____actionButton, ref Button ____practiceButton, ref BeatmapDifficultySegmentedControlController ____beatmapDifficultySegmentedControlController, ref BeatmapCharacteristicSegmentedControlController ____beatmapCharacteristicSegmentedControlController) { var firstSelection = false; var level = ____selectedDifficultyBeatmap.level is CustomBeatmapLevel ? ____selectedDifficultyBeatmap.level as CustomPreviewBeatmapLevel : null; if (level != lastLevel) { firstSelection = true; lastLevel = level; } ____actionButton.interactable = true; ____practiceButton.interactable = true; RequirementsUI.instance.ButtonGlowColor = false; RequirementsUI.instance.ButtonInteractable = false; if (level == null) { return; } var songData = Collections.RetrieveExtraSongData(Hashing.GetCustomLevelHash(level)); if (songData == null) { RequirementsUI.instance.ButtonGlowColor = false; RequirementsUI.instance.ButtonInteractable = false; return; } var wipFolderSong = false; var selectedDiff = ____selectedDifficultyBeatmap; var diffData = Collections.RetrieveDifficultyData(selectedDiff); if (diffData != null) { //If no additional information is present if (!diffData.additionalDifficultyData._requirements.Any() && !diffData.additionalDifficultyData._suggestions.Any() && !diffData.additionalDifficultyData._warnings.Any() && !diffData.additionalDifficultyData._information.Any() && !songData.contributors.Any() && !Utilities.Utils.DiffHasColors(diffData)) { RequirementsUI.instance.ButtonGlowColor = false; RequirementsUI.instance.ButtonInteractable = false; } else if (!diffData.additionalDifficultyData._warnings.Any()) { RequirementsUI.instance.ButtonGlowColor = true; RequirementsUI.instance.ButtonInteractable = true; RequirementsUI.instance.SetRainbowColors(Utilities.Utils.DiffHasColors(diffData)); } else if (diffData.additionalDifficultyData._warnings.Any()) { RequirementsUI.instance.ButtonGlowColor = true; RequirementsUI.instance.ButtonInteractable = true; if (diffData.additionalDifficultyData._warnings.Contains("WIP")) { ____actionButton.interactable = false; } RequirementsUI.instance.SetRainbowColors(Utilities.Utils.DiffHasColors(diffData)); } } if (level.levelID.EndsWith(" WIP")) { RequirementsUI.instance.ButtonGlowColor = true; RequirementsUI.instance.ButtonInteractable = true; ____actionButton.interactable = false; wipFolderSong = true; } if (diffData != null) { foreach (var requirement in diffData.additionalDifficultyData._requirements) { if (!Collections.capabilities.Contains(requirement)) { ____actionButton.interactable = false; ____practiceButton.interactable = false; RequirementsUI.instance.ButtonGlowColor = true; RequirementsUI.instance.ButtonInteractable = true; } } } if (selectedDiff.parentDifficultyBeatmapSet.beatmapCharacteristic.serializedName == "MissingCharacteristic") { ____actionButton.interactable = false; ____practiceButton.interactable = false; RequirementsUI.instance.ButtonGlowColor = true; RequirementsUI.instance.ButtonInteractable = true; } RequirementsUI.instance.level = level; RequirementsUI.instance.songData = songData; RequirementsUI.instance.diffData = diffData; RequirementsUI.instance.wipFolder = wipFolderSong; //Difficulty Label Handling LevelLabels.Clear(); string currentCharacteristic = string.Empty; foreach (Data.ExtraSongData.DifficultyData diffLevel in songData._difficulties) { var difficulty = diffLevel._difficulty; string characteristic = diffLevel._beatmapCharacteristicName; if (characteristic == selectedDiff.parentDifficultyBeatmapSet.beatmapCharacteristic.serializedName) { currentCharacteristic = characteristic; } if (!LevelLabels.ContainsKey(characteristic)) { LevelLabels.Add(characteristic, new OverrideLabels()); } var charLabels = LevelLabels[characteristic]; if (!string.IsNullOrWhiteSpace(diffLevel._difficultyLabel)) { switch (difficulty) { case BeatmapDifficulty.Easy: charLabels.EasyOverride = diffLevel._difficultyLabel; break; case BeatmapDifficulty.Normal: charLabels.NormalOverride = diffLevel._difficultyLabel; break; case BeatmapDifficulty.Hard: charLabels.HardOverride = diffLevel._difficultyLabel; break; case BeatmapDifficulty.Expert: charLabels.ExpertOverride = diffLevel._difficultyLabel; break; case BeatmapDifficulty.ExpertPlus: charLabels.ExpertPlusOverride = diffLevel._difficultyLabel; break; } } } if (!string.IsNullOrWhiteSpace(currentCharacteristic)) { SetCurrentLabels(LevelLabels[currentCharacteristic]); } else { ClearOverrideLabels(); } ____beatmapDifficultySegmentedControlController.SetData(____selectedDifficultyBeatmap.parentDifficultyBeatmapSet.difficultyBeatmaps, ____beatmapDifficultySegmentedControlController.selectedDifficulty); ClearOverrideLabels(); // TODO: Check if this whole if block is still needed if (songData._defaultCharacteristic != null && firstSelection) { if (____beatmapCharacteristicSegmentedControlController.selectedBeatmapCharacteristic.serializedName != songData._defaultCharacteristic) { var chars = ____beatmapCharacteristicSegmentedControlController.GetField <List <BeatmapCharacteristicSO>, BeatmapCharacteristicSegmentedControlController>("_beatmapCharacteristics"); var index = 0; foreach (var characteristic in chars) { if (songData._defaultCharacteristic == characteristic.serializedName) { break; } index++; } if (index != chars.Count) { ____beatmapCharacteristicSegmentedControlController.GetField <HMUI.IconSegmentedControl, BeatmapCharacteristicSegmentedControlController>("_segmentedControl") .SelectCellWithNumber(index); ____beatmapCharacteristicSegmentedControlController.HandleDifficultySegmentedControlDidSelectCell( ____beatmapCharacteristicSegmentedControlController.GetField <HMUI.IconSegmentedControl, BeatmapCharacteristicSegmentedControlController>("_segmentedControl"), index); } } } }
static void Postfix(ref LevelParamsPanel ____levelParamsPanel, ref IDifficultyBeatmap ____selectedDifficultyBeatmap, ref PlayerData ____playerData, ref TextMeshProUGUI ____songNameText, ref UnityEngine.UI.Button ____playButton, ref UnityEngine.UI.Button ____practiceButton, ref BeatmapDifficultySegmentedControlController ____beatmapDifficultySegmentedControlController, ref BeatmapCharacteristicSegmentedControlController ____beatmapCharacteristicSegmentedControlController) { bool firstSelection = false; var level = ____selectedDifficultyBeatmap.level is CustomBeatmapLevel ? ____selectedDifficultyBeatmap.level as CustomPreviewBeatmapLevel : null; if (level != lastLevel) { firstSelection = true; lastLevel = level; } ____playButton.interactable = true; ____practiceButton.interactable = true; ____playButton.gameObject.GetComponentInChildren <Image>().color = new Color(0, 0.706f, 1.000f, 0.784f); ____songNameText.text = "<size=78%>" + ____songNameText.text; // ____songNameText.overflowMode = TextOverflowModes.Overflow; // ____songNameText.enableWordWrapping = false; ____songNameText.richText = true; RequirementsUI.instance.ButtonGlowColor = "none"; RequirementsUI.instance.ButtonInteractable = false; if (level != null) { Data.ExtraSongData songData = Collections.RetrieveExtraSongData(Utilities.Hashing.GetCustomLevelHash(level), level.customLevelPath); if (songData == null) { RequirementsUI.instance.ButtonGlowColor = "none"; RequirementsUI.instance.ButtonInteractable = false; return; } bool wipFolderSong = false; IDifficultyBeatmap selectedDiff = ____selectedDifficultyBeatmap; Data.ExtraSongData.DifficultyData diffData = Collections.RetrieveDifficultyData(selectedDiff); //songData._difficulties?.FirstOrDefault(x => x._difficulty == selectedDiff.difficulty //&& (x._beatmapCharacteristicName == selectedDiff.parentDifficultyBeatmapSet.beatmapCharacteristic.characteristicName || x._beatmapCharacteristicName == selectedDiff.parentDifficultyBeatmapSet.beatmapCharacteristic.serializedName)); if (diffData != null) { //If no additional information is present if (diffData.additionalDifficultyData._requirements.Count() == 0 && diffData.additionalDifficultyData._suggestions.Count() == 0 && diffData.additionalDifficultyData._warnings.Count() == 0 && diffData.additionalDifficultyData._information.Count() == 0 && songData.contributors.Count() == 0) { RequirementsUI.instance.ButtonGlowColor = "none"; RequirementsUI.instance.ButtonInteractable = false; } else if (diffData.additionalDifficultyData._warnings.Count() == 0) { RequirementsUI.instance.ButtonGlowColor = "#0000FF"; RequirementsUI.instance.ButtonInteractable = true; } else if (diffData.additionalDifficultyData._warnings.Count() > 0) { RequirementsUI.instance.ButtonGlowColor = "#FFFF00"; RequirementsUI.instance.ButtonInteractable = true; if (diffData.additionalDifficultyData._warnings.Contains("WIP")) { ____playButton.interactable = false; ____playButton.gameObject.GetComponentInChildren <UnityEngine.UI.Image>().color = Color.yellow; } } } if (level.levelID.EndsWith(" WIP")) { RequirementsUI.instance.ButtonGlowColor = "#FFFF00"; RequirementsUI.instance.ButtonInteractable = true; ____playButton.interactable = false; ____playButton.gameObject.GetComponentInChildren <UnityEngine.UI.Image>().color = Color.yellow; wipFolderSong = true; } if (diffData != null) { for (int i = 0; i < diffData.additionalDifficultyData._requirements.Count(); i++) { if (!Collections.capabilities.Contains(diffData.additionalDifficultyData._requirements[i])) { ____playButton.interactable = false; ____practiceButton.interactable = false; ____playButton.gameObject.GetComponentInChildren <UnityEngine.UI.Image>().color = Color.red; RequirementsUI.instance.ButtonGlowColor = "#FF0000"; } } } if (selectedDiff.parentDifficultyBeatmapSet.beatmapCharacteristic.serializedName == "MissingCharacteristic") { ____playButton.interactable = false; ____practiceButton.interactable = false; ____playButton.gameObject.GetComponentInChildren <UnityEngine.UI.Image>().color = Color.red; RequirementsUI.instance.ButtonGlowColor = "#FF0000"; } RequirementsUI.instance.level = level; RequirementsUI.instance.songData = songData; RequirementsUI.instance.diffData = diffData; RequirementsUI.instance.wipFolder = wipFolderSong; //Difficulty Label Handling levelLabels.Clear(); string currentCharacteristic = ""; foreach (Data.ExtraSongData.DifficultyData diffLevel in songData._difficulties) { var difficulty = diffLevel._difficulty; string characteristic = diffLevel._beatmapCharacteristicName; if (characteristic == selectedDiff.parentDifficultyBeatmapSet.beatmapCharacteristic.serializedName) { currentCharacteristic = characteristic; } if (!levelLabels.ContainsKey(characteristic)) { levelLabels.Add(characteristic, new OverrideLabels()); } OverrideLabels charLabels = levelLabels[characteristic]; if (!string.IsNullOrWhiteSpace(diffLevel._difficultyLabel)) { switch (difficulty) { case BeatmapDifficulty.Easy: charLabels.EasyOverride = diffLevel._difficultyLabel; break; case BeatmapDifficulty.Normal: charLabels.NormalOverride = diffLevel._difficultyLabel; break; case BeatmapDifficulty.Hard: charLabels.HardOverride = diffLevel._difficultyLabel; break; case BeatmapDifficulty.Expert: charLabels.ExpertOverride = diffLevel._difficultyLabel; break; case BeatmapDifficulty.ExpertPlus: charLabels.ExpertPlusOverride = diffLevel._difficultyLabel; break; } } } if (!string.IsNullOrWhiteSpace(currentCharacteristic)) { SetCurrentLabels(levelLabels[currentCharacteristic]); } else { clearOverrideLabels(); } ____beatmapDifficultySegmentedControlController.SetData(____selectedDifficultyBeatmap.parentDifficultyBeatmapSet.difficultyBeatmaps, ____beatmapDifficultySegmentedControlController.selectedDifficulty); clearOverrideLabels(); if (songData._defaultCharacteristic != null && firstSelection) { if (____beatmapCharacteristicSegmentedControlController.selectedBeatmapCharacteristic.serializedName != songData._defaultCharacteristic) { var chars = ____beatmapCharacteristicSegmentedControlController.GetField <List <BeatmapCharacteristicSO> >("_beatmapCharacteristics"); int index = 0; foreach (var characteristic in chars) { if (songData._defaultCharacteristic == characteristic.serializedName) { break; } index++; } if (index != chars.Count) { ____beatmapCharacteristicSegmentedControlController.GetField <HMUI.IconSegmentedControl>("_segmentedControl").SelectCellWithNumber(index); } ____beatmapCharacteristicSegmentedControlController.HandleDifficultySegmentedControlDidSelectCell( ____beatmapCharacteristicSegmentedControlController.GetField <HMUI.IconSegmentedControl>("_segmentedControl"), index); } } } }
internal static void CharacteristicSelectionViewController_didSelectBeatmapCharacteristicEvent(BeatmapCharacteristicSegmentedControlController arg1, BeatmapCharacteristicSO arg2) { // Utilities.Logger.Log("Prev: " + GameMode + " New: " + arg2.serializedName); GameMode = arg2.serializedName; SelectedCharacteristic = arg2; }
static void Postfix(BeatmapCharacteristicSegmentedControlController __instance, IDifficultyBeatmapSet[] difficultyBeatmapSets, BeatmapCharacteristicSO selectedBeatmapCharacteristic) { Gamemode.CharacteristicSelectionViewController_didSelectBeatmapCharacteristicEvent(__instance, __instance.selectedBeatmapCharacteristic); }
//Time - Downloads //BPM - Plays //Notes - BPM //Obstacles - Upvotes //Bombs - Downvotes protected override void DidActivate(bool firstActivation, ActivationType type) { if (firstActivation) { gameObject.SetActive(true); _levelDetails = GetComponentsInChildren <StandardLevelDetailView>(true).First(x => x.name == "LevelDetail"); _levelDetails.gameObject.SetActive(true); (_levelDetails.transform as RectTransform).anchoredPosition = new Vector2(-40, 0); BeatmapDifficultySegmentedControlController beatmapDifficultySegmentedControl = GetComponentsInChildren <BeatmapDifficultySegmentedControlController>(true).First(x => x.name == "BeatmapDifficultySegmentedControl"); beatmapDifficultySegmentedControl.gameObject.SetActive(false); BeatmapCharacteristicSegmentedControlController beatmapCharacteristicSegmentedControl = GetComponentsInChildren <BeatmapCharacteristicSegmentedControlController>(true).First(x => x.name == "BeatmapCharacteristicSegmentedControl"); beatmapCharacteristicSegmentedControl.gameObject.SetActive(false); RemoveCustomUIElements(rectTransform); _levelParams = GetComponentsInChildren <LevelParamsPanel>().First(x => x.name == "LevelParamsPanel"); foreach (HoverHint hint in _levelParams.transform.GetComponentsInChildren <HoverHint>()) { switch (hint.name) { case "Time": { hint.GetComponentInChildren <UnityEngine.UI.Image>().sprite = Sprites.DownloadIcon; }; break; case "BPM": { hint.GetComponentInChildren <UnityEngine.UI.Image>().sprite = Sprites.PlayIcon; }; break; case "NotesCount": { hint.GetComponentInChildren <UnityEngine.UI.Image>().sprite = Resources.FindObjectsOfTypeAll <Sprite>().First(x => x.name == "MetronomeIcon"); }; break; case "ObstaclesCount": { hint.GetComponentInChildren <UnityEngine.UI.Image>().sprite = Sprites.ThumbUp; }; break; case "BombsCount": { hint.GetComponentInChildren <UnityEngine.UI.Image>().sprite = Sprites.ThumbDown; }; break; } Destroy(hint); } RectTransform yourStats = GetComponentsInChildren <RectTransform>().First(x => x.name == "Stats"); yourStats.gameObject.SetActive(true); TextMeshProUGUI[] _textComponents = GetComponentsInChildren <TextMeshProUGUI>(); try { songNameText = _textComponents.First(x => x.name == "SongNameText"); downloadsText = _textComponents.First(x => x.name == "ValueText" && x.transform.parent.name == "Time"); downloadsText.fontSize = 3f; playsText = _textComponents.First(x => x.name == "ValueText" && x.transform.parent.name == "BPM"); playsText.fontSize = 3f; // foreach (var x in _textComponents) // { // Console.WriteLine(x.name); // Console.WriteLine(x.transform.parent.name); // } difficulty1Title = _textComponents.First(x => x.name == "Title" && x.transform.parent.name == "MaxRank"); //.text = "Expert/+"; difficulty1Text = _textComponents.First(x => x.name == "Value" && x.transform.parent.name == "MaxRank"); difficulty2Title = _textComponents.First(x => x.name == "Title" && x.transform.parent.name == "Highscore");//.text = "Hard"; difficulty2Text = _textComponents.First(x => x.name == "Value" && x.transform.parent.name == "Highscore"); difficulty3Title = _textComponents.First(x => x.name == "Title" && x.transform.parent.name == "MaxCombo");//.text = "Easy/Normal"; difficulty3Text = _textComponents.First(x => x.name == "Value" && x.transform.parent.name == "MaxCombo"); } catch (Exception e) { Plugin.log.Critical("Unable to convert detail view controller! Exception: " + e); } _downloadButton = _levelDetails.playButton; _downloadButton.SetButtonText("DOWNLOAD"); _downloadButton.ToggleWordWrapping(false); _downloadButton.onClick.RemoveAllListeners(); _downloadButton.onClick.AddListener(() => { downloadButtonPressed?.Invoke(_currentSong); }); (_downloadButton.transform as RectTransform).sizeDelta = new Vector2(26f, 8.8f); _favoriteButton = _levelDetails.practiceButton; _favoriteButton.SetButtonIcon(Sprites.AddToFavorites); _favoriteButton.onClick.RemoveAllListeners(); _favoriteButton.onClick.AddListener(() => { favoriteButtonPressed?.Invoke(_currentSong); }); coverImage = _levelDetails.GetPrivateField <RawImage>("_coverImage"); _loadingIndicator = BeatSaberUI.CreateLoadingSpinner(rectTransform); (_loadingIndicator.transform as RectTransform).anchorMin = new Vector2(0.5f, 0.5f); (_loadingIndicator.transform as RectTransform).anchorMax = new Vector2(0.5f, 0.5f); (_loadingIndicator.transform as RectTransform).anchoredPosition = new Vector2(0f, 0f); (_loadingIndicator.transform as RectTransform).anchoredPosition = new Vector2(-40f, 0f); } }
internal static void Postfix(ref StandardLevelDetailView __instance, ref BeatmapCharacteristicSegmentedControlController ____beatmapDifficultySegmentedControlController) { SiraEvents.InvokeLevelSelectionChange(__instance.selectedDifficultyBeatmap, ____beatmapDifficultySegmentedControlController.selectedBeatmapCharacteristic); }