public void OpenSongsList(string songToSelectWhenLoaded = null) { if (songListViewController == null) { songListViewController = BeatSaberUI.CreateViewController <SongListViewController>(); } if (_bottomViewController == null) { _bottomViewController = BeatSaberUI.CreateViewController <BottomViewController>(); } if (_resultsViewController == null) { _resultsViewController = Resources.FindObjectsOfTypeAll <ResultsViewController>().First(); } if (_playerDataModel == null) { _playerDataModel = Resources.FindObjectsOfTypeAll <PlayerDataModel>().First(); } if (_menuLightsManager == null) { _menuLightsManager = Resources.FindObjectsOfTypeAll <MenuLightsManager>().First(); } if (_soloFreePlayFlowCoordinator == null) { _soloFreePlayFlowCoordinator = Resources.FindObjectsOfTypeAll <SoloFreePlayFlowCoordinator>().First(); } if (_campaignFlowCoordinator == null) { _campaignFlowCoordinator = Resources.FindObjectsOfTypeAll <CampaignFlowCoordinator>().First(); } if (_alwaysOwnedContent == null) { _alwaysOwnedContent = Resources.FindObjectsOfTypeAll <AlwaysOwnedContentSO>().First(); } if (_primaryLevelCollection == null) { _primaryLevelCollection = _alwaysOwnedContent.alwaysOwnedPacks.First(x => x.packID == OstHelper.packs[0].PackID).beatmapLevelCollection as BeatmapLevelCollectionSO; } if (_secondaryLevelCollection == null) { _secondaryLevelCollection = _alwaysOwnedContent.alwaysOwnedPacks.First(x => x.packID == OstHelper.packs[1].PackID).beatmapLevelCollection as BeatmapLevelCollectionSO; } if (_tertiaryLevelCollection == null) { _tertiaryLevelCollection = _alwaysOwnedContent.alwaysOwnedPacks.First(x => x.packID == OstHelper.packs[2].PackID).beatmapLevelCollection as BeatmapLevelCollectionSO; } if (_extrasLevelCollection == null) { _extrasLevelCollection = _alwaysOwnedContent.alwaysOwnedPacks.First(x => x.packID == OstHelper.packs[3].PackID).beatmapLevelCollection as BeatmapLevelCollectionSO; } if (!songListViewController.isInViewControllerHierarchy || !songListViewController.isActiveAndEnabled) { SetViewControllersToNavigationController(_mainModNavigationController, new ViewController[] { songListViewController }); songListViewController.SelectWhenLoaded(songToSelectWhenLoaded); songListViewController.SongListRowSelected += SongListRowSelected; songListViewController.ReloadPressed += () => ReloadServerData(); ReloadServerData(); } }
public void CloseCampaign(CampaignFlowCoordinator campaignFlowCoordinator) { _campaignFlowCoordinator.InvokePrivateMethod("SetTitle", new object[] { "Campaign", ViewController.AnimationType.In }); _campaignFlowCoordinator.didFinishEvent += BeatSaberUI.MainFlowCoordinator.HandleCampaignFlowCoordinatorDidFinish; _campaignFlowCoordinator.didFinishEvent -= CloseCampaign; _missionNodeSelectionManager.didSelectMissionNodeEvent -= HandleMissionNodeSelectionManagerDidSelectMissionNode; _missionLevelDetailViewController.didPressPlayButtonEvent += _missionSelectionNavigationController.HandleMissionLevelDetailViewControllerDidPressPlayButton; _missionResultsViewController.retryButtonPressedEvent -= HandleMissionResultsViewControllerRetryButtonPressed; _missionSelectionMapViewController.didSelectMissionLevelEvent -= HandleMissionSelectionMapViewControllerDidSelectMissionLevel; _missionResultsViewController.continueButtonPressedEvent -= HandleMissionResultsViewControllerContinueButtonPressed; _missionLevelDetailViewController.didPressPlayButtonEvent -= HandleMissionLevelDetailViewControllerDidPressPlayButtonPlay; _missionLevelDetailViewController.didPressPlayButtonEvent -= HandleMissionLevelDetailViewControllerDidPressPlayButtonDownload; _mapScrollView.GetPrivateField <RectTransform>("_contentRectTransform").SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, baseMapHeight); unlockAllMissions = false; foreach (MissionNode node in curCampaignNodes) { Destroy(node.gameObject); } foreach (MissionStage stage in curMissionStages) { Destroy(stage.gameObject); } _campaignFlowCoordinator.GetPrivateField <MenuLightsManager>("_menuLightsManager").SetColorPreset(baseDefaultLights, animated: true); DismissFlowCoordinator(_campaignFlowCoordinator); }
internal MissionDisplay(Data data, SiraSubmissionView siraSubmissionView, CampaignFlowCoordinator campaignFlowCoordinator, MissionResultsViewController resultsViewController) { _data = data; _siraSubmissionView = siraSubmissionView; _resultsViewController = resultsViewController; _campaignFlowCoordinator = campaignFlowCoordinator; }
protected override void DidActivate(bool firstActivation, bool addedToHierarchy, bool screenSystemEnabling) { if (firstActivation) { SetTitle("Qualifier Room", ViewController.AnimationType.None); showBackButton = true; _playerDataModel = Resources.FindObjectsOfTypeAll <PlayerDataModel>().First(); _menuLightsManager = Resources.FindObjectsOfTypeAll <MenuLightsManager>().First(); _soloFreePlayFlowCoordinator = Resources.FindObjectsOfTypeAll <SoloFreePlayFlowCoordinator>().First(); _campaignFlowCoordinator = Resources.FindObjectsOfTypeAll <CampaignFlowCoordinator>().First(); _resultsViewController = Resources.FindObjectsOfTypeAll <ResultsViewController>().First(); _scoreLights = _soloFreePlayFlowCoordinator.GetField <MenuLightsPresetSO>("_resultsClearedLightsPreset"); _redLights = _soloFreePlayFlowCoordinator.GetField <MenuLightsPresetSO>("_resultsFailedLightsPreset"); _defaultLights = _soloFreePlayFlowCoordinator.GetField <MenuLightsPresetSO>("_defaultLightsPreset"); _songSelection = BeatSaberUI.CreateViewController <SongSelection>(); _songSelection.SongSelected += songSelection_SongSelected; _songDetail = BeatSaberUI.CreateViewController <SongDetail>(); _songDetail.PlayPressed += songDetail_didPressPlayButtonEvent; _songDetail.DisableCharacteristicControl = true; _songDetail.DisableDifficultyControl = true; _songDetail.DisablePlayButton = false; } if (addedToHierarchy) { _songSelection.SetSongs(Event.QualifierMaps.ToList()); ProvideInitialViewControllers(_songSelection); } }
internal Display(Data data, SiraSubmissionView siraSubmissionView, ResultsViewController resultsViewController, CampaignFlowCoordinator campaignFlowCoordinator, SoloFreePlayFlowCoordinator soloFreePlayFlowCoordinator) { _data = data; _siraSubmissionView = siraSubmissionView; _resultsViewController = resultsViewController; _campaignFlowCoordinator = campaignFlowCoordinator; _soloFreePlayFlowCoordinator = soloFreePlayFlowCoordinator; }
public MenuColorSwapper(Config.Menu menuConfig, MenuLightsManager menuLightsManager, MainFlowCoordinator mainFlowCoordinator, CampaignFlowCoordinator campaignFlowCoordinator, SoloFreePlayFlowCoordinator soloFreePlayFlowCoordinator, PartyFreePlayFlowCoordinator partyFreePlayFlowCoordinator, CenterStageScreenController centerStageScreenController) { _menuConfig = menuConfig; _menuLightsManager = menuLightsManager; _mainFlowCoordinator = mainFlowCoordinator; _campaignFlowCoordinator = campaignFlowCoordinator; _centerStageScreenController = centerStageScreenController; _soloFreePlayFlowCoordinator = soloFreePlayFlowCoordinator; _partyFreePlayFlowCoordinator = partyFreePlayFlowCoordinator; }
protected override void DidActivate(bool firstActivation, bool addedToHierarchy, bool screenSystemEnabling) { if (firstActivation) { SetTitle("Custom Campaigns"); showBackButton = true; _campaignFlowCoordinator = Resources.FindObjectsOfTypeAll <CampaignFlowCoordinator>().First(); _missionMapAnimationController = Resources.FindObjectsOfTypeAll <MissionMapAnimationController>().First(); _missionNodesManager = Resources.FindObjectsOfTypeAll <MissionNodesManager>().First(); _missionStagesManager = Resources.FindObjectsOfTypeAll <MissionStagesManager>().First(); _missionConnectionsGenerator = Resources.FindObjectsOfTypeAll <MissionConnectionsGenerator>().First(); _missionSelectionMapViewController = Resources.FindObjectsOfTypeAll <MissionSelectionMapViewController>().First(); _missionNodeSelectionManager = Resources.FindObjectsOfTypeAll <MissionNodeSelectionManager>().First(); _missionLevelDetailViewController = Resources.FindObjectsOfTypeAll <MissionLevelDetailViewController>().First(); _missionResultsViewController = Resources.FindObjectsOfTypeAll <MissionResultsViewController>().First(); _playButton = _missionLevelDetailViewController.GetPrivateField <Button>("_playButton"); _mapScrollView = _missionSelectionMapViewController.GetPrivateField <ScrollView>("_mapScrollView"); _mapScrollViewItemsVisibilityController = _mapScrollView.GetComponent <ScrollViewItemsVisibilityController>(); _backgroundImage = _mapScrollView.GetComponentsInChildren <Image>().First(x => x.name == "Map"); _missionSelectionNavigationController = _campaignFlowCoordinator.GetPrivateField <MissionSelectionNavigationController>("_missionSelectionNavigationController"); _gameplayModifierInfoListItemsList = _missionLevelDetailViewController.GetPrivateField <GameplayModifierInfoListItemsList>("_gameplayModifierInfoListItemsList"); _modifiersPanelGO = _missionLevelDetailViewController.GetPrivateField <GameObject>("_modifiersPanelGO"); _gameplayModifiersModel = _missionLevelDetailViewController.GetPrivateField <GameplayModifiersModelSO>("_gameplayModifiersModel"); BSMLParser.instance.Parse(Utilities.GetResourceContent(Assembly.GetExecutingAssembly(), "BeatSaberCustomCampaigns.Views.challenge-detail.bsml"), _missionLevelDetailViewController.gameObject, this); _campaignProgressModel = _campaignFlowCoordinator.GetPrivateField <CampaignProgressModel>("_campaignProgressModel"); _campaignListViewController = BeatSaberUI.CreateViewController <CampaignListViewController>(); _campaignDetailViewController = BeatSaberUI.CreateViewController <CampaignDetailViewController>(); _campaignTotalLeaderboardViewController = BeatSaberUI.CreateViewController <CampaignTotalLeaderboardViewController>(); _campaignListNavigationController = BeatSaberUI.CreateViewController <NavigationController>(); _campaignListViewController.clickedCampaign += ShowDetails; _campaignDetailViewController.clickedPlay += OpenCampaign; _campaignChallengeLeaderbaordViewController = BeatSaberUI.CreateViewController <CampaignChallengeLeaderboardViewController>(); _unlockedItemsViewController = BeatSaberUI.CreateViewController <UnlockedItemsViewController>(); } if (addedToHierarchy) { SetBaseCampaignEnabled(false); SetViewControllerToNavigationController(_campaignListNavigationController, _campaignListViewController); ProvideInitialViewControllers(_campaignListNavigationController); } }
static bool Prefix(Action beforeSceneSwitchCallback, CampaignFlowCoordinator __instance, MissionSelectionNavigationController ____missionSelectionNavigationController, MenuTransitionsHelper ____menuTransitionsHelper, PlayerDataModel ____playerDataModel) { if (____missionSelectionNavigationController.selectedMissionNode.missionData is CustomMissionDataSO) { CustomMissionDataSO missionData = ____missionSelectionNavigationController.selectedMissionNode.missionData as CustomMissionDataSO; IDifficultyBeatmap difficultyBeatmap = BeatmapLevelDataExtensions.GetDifficultyBeatmap(Loader.BeatmapLevelsModelSO.GetBeatmapLevelIfLoaded(missionData.customLevel.levelID).beatmapLevelData, missionData.beatmapCharacteristic, missionData.beatmapDifficulty); GameplayModifiers gameplayModifiers = missionData.gameplayModifiers; MissionObjective[] missionObjectives = missionData.missionObjectives; PlayerSpecificSettings playerSpecificSettings = ____playerDataModel.playerData.playerSpecificSettings; ColorSchemesSettings colorSchemesSettings = ____playerDataModel.playerData.colorSchemesSettings; ColorScheme overrideColorScheme = colorSchemesSettings.overrideDefaultColors ? colorSchemesSettings.GetSelectedColorScheme() : null; ____menuTransitionsHelper.StartMissionLevel("", difficultyBeatmap, overrideColorScheme, gameplayModifiers, missionObjectives, playerSpecificSettings, beforeSceneSwitchCallback, __instance.HandleMissionLevelSceneDidFinish); return(false); } return(true); }
protected override void DidActivate(bool firstActivation, ActivationType activationType) { if (firstActivation) { //Set up UI title = "Room Screen"; showBackButton = true; _playerDataModel = Resources.FindObjectsOfTypeAll <PlayerDataModel>().First(); _menuLightsManager = Resources.FindObjectsOfTypeAll <MenuLightsManager>().First(); _soloFreePlayFlowCoordinator = Resources.FindObjectsOfTypeAll <SoloFreePlayFlowCoordinator>().First(); _campaignFlowCoordinator = Resources.FindObjectsOfTypeAll <CampaignFlowCoordinator>().First(); _resultsViewController = Resources.FindObjectsOfTypeAll <ResultsViewController>().First(); _scoreLights = _soloFreePlayFlowCoordinator.GetField <MenuLightsPresetSO>("_resultsLightsPreset"); _redLights = _campaignFlowCoordinator.GetField <MenuLightsPresetSO>("_newObjectiveLightsPreset"); _defaultLights = _soloFreePlayFlowCoordinator.GetField <MenuLightsPresetSO>("_defaultLightsPreset"); _songSelection = BeatSaberUI.CreateViewController <SongSelection>(); _songSelection.SongSelected += songSelection_SongSelected; _splashScreen = BeatSaberUI.CreateViewController <SplashScreen>(); _songDetail = BeatSaberUI.CreateViewController <SongDetail>(); _songDetail.PlayPressed += songDetail_didPressPlayButtonEvent; _songDetail.DifficultyBeatmapChanged += songDetail_didChangeDifficultyBeatmapEvent; _playerList = BeatSaberUI.CreateViewController <PlayerList>(); } if (activationType == ActivationType.AddedToHierarchy) { tournamentMode = Match == null; if (tournamentMode) { _splashScreen.StatusText = $"Connecting to \"{Host.Name}\"..."; ProvideInitialViewControllers(_splashScreen); } else { //If we're not in tournament mode, then a client connection has already been made //by the room selection screen, so we can just assume Plugin.client isn't null //NOTE: This is *such* a hack. Oh my god. isHost = Match.Leader == Plugin.client.Self; _songSelection.SetSongs(SongUtils.masterLevelList); _playerList.Players = Match.Players; _splashScreen.StatusText = "Waiting for the host to select a song..."; if (isHost) { ProvideInitialViewControllers(_songSelection, _playerList); } else { ProvideInitialViewControllers(_splashScreen, _playerList); } } } //The ancestor sets up the server event listeners //It would be possible to recieve an event that does a ui update after this call //and before the rest of the ui is set up, if we did this at the top. //So, we do it last base.DidActivate(firstActivation, activationType); }
static bool Prefix(MissionLevelScenesTransitionSetupDataSO missionLevelScenesTransitionSetupData, MissionCompletionResults missionCompletionResults, CampaignFlowCoordinator __instance, MissionSelectionNavigationController ____missionSelectionNavigationController) { if (!(____missionSelectionNavigationController.selectedMissionNode.missionData is CustomMissionDataSO)) { return(true); } ChallengeExternalModifiers.onChallengeEnd?.Invoke(); if (missionCompletionResults.levelCompletionResults.levelEndAction == LevelCompletionResults.LevelEndAction.Restart) { ____missionSelectionNavigationController.GetPrivateField <Action <MissionSelectionNavigationController> >("didPressPlayButtonEvent")(____missionSelectionNavigationController); Resources.FindObjectsOfTypeAll <CustomCampaignFlowCoordinator>().First().LoadExternalModifiers((____missionSelectionNavigationController.selectedMissionNode.missionData as CustomMissionDataSO).challenge); return(false); } if (missionCompletionResults.levelCompletionResults.levelEndStateType == LevelCompletionResults.LevelEndStateType.Cleared && missionCompletionResults.IsMissionComplete) { CustomMissionDataSO customMissionData = ____missionSelectionNavigationController.selectedMissionNode.missionData as CustomMissionDataSO; Campaign campaign = customMissionData.campaign; Challenge challenge = customMissionData.challenge; foreach (UnlockableItem item in challenge.unlockableItems) { try { item.UnlockItem(campaign.path); } catch (Exception ex) { Console.WriteLine("Failed to unlock item: " + item.fileName + " - Exception: " + ex.Message); } } UnlockedItemsViewController unlockedItemsViewController = Resources.FindObjectsOfTypeAll <UnlockedItemsViewController>().First(); unlockedItemsViewController.items = challenge.unlockableItems; unlockedItemsViewController.index = 0; if (unlockedItemsViewController.items.Count > 0) { __instance.InvokeMethod("SetBottomScreenViewController", new object[] { unlockedItemsViewController, false }); } if (challenge.unlockMap) { UnlockedMaps.CompletedChallenge(challenge.name); } /* * //Score submission * if (customMissionData.gameplayModifiers.songSpeedMul==1f && customMissionData.gameplayModifiers.fastNotes == false && customMissionData.gameplayModifiers.failOnSaberClash == false) { * SoloFreePlayFlowCoordinator freePlayCoordinator = Resources.FindObjectsOfTypeAll<SoloFreePlayFlowCoordinator>().First(); * * PlayerDataModel dataModel = freePlayCoordinator.GetPrivateField<PlayerDataModel>("_playerDataModel"); * * PlayerData currentLocalPlayer = dataModel.playerData; * IDifficultyBeatmap difficultyBeatmap = Loader.BeatmapLevelsModelSO.GetBeatmapLevelIfLoaded(customMissionData.customLevel.levelID).beatmapLevelData.GetDifficultyBeatmap(customMissionData.beatmapCharacteristic, customMissionData.beatmapDifficulty); * PlayerLevelStatsData playerLevelStatsData = currentLocalPlayer.GetPlayerLevelStatsData(difficultyBeatmap.level.levelID, difficultyBeatmap.difficulty, difficultyBeatmap.parentDifficultyBeatmapSet.beatmapCharacteristic); * LevelCompletionResults levelCompletionResults = missionCompletionResults.levelCompletionResults; * playerLevelStatsData.UpdateScoreData(levelCompletionResults.modifiedScore, levelCompletionResults.maxCombo, levelCompletionResults.fullCombo, levelCompletionResults.rank); * //todo Need change??? * //freePlayCoordinator.GetPrivateField<PlatformLeaderboardsModel>("_platformLeaderboardsModel").AddScoreFromComletionResults(difficultyBeatmap, levelCompletionResults); * } */ if (!string.IsNullOrWhiteSpace(campaign.completionPost)) { CompleteSubmission submission = new CompleteSubmission(); submission.challengeHash = challenge.GetHash(); submission.score = missionCompletionResults.levelCompletionResults.rawScore; submission.userID = APITools.UserID; foreach (MissionObjectiveResult objective in missionCompletionResults.missionObjectiveResults) { Requirement requirement = new Requirement(); requirement.name = objective.missionObjective.type.objectiveName; requirement.value = objective.value; submission.requirements.Add(requirement); } __instance.StartCoroutine(submission.Submit(campaign.completionPost)); } __instance.StartCoroutine(CustomCampaignLeaderboard.SubmitScore(challenge, missionCompletionResults)); } return(true); }