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);
 }
        public void HandleMissionSelectionMapViewControllerDidSelectMissionLevel(MissionSelectionMapViewController viewController, MissionNode missionNode)
        {
            Challenge challenge = (missionNode.missionData as CustomMissionDataSO).challenge;

            _campaignChallengeLeaderbaordViewController.lastClicked = challenge;
            _campaignFlowCoordinator.InvokePrivateMethod("SetRightScreenViewController", new object[] { _campaignChallengeLeaderbaordViewController, false });
            _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);
        }