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);
            }
        }
示例#2
0
        public void Initialize()
        {
            defaultMenuLights = _menuLightsManager.GetField <MenuLightsPresetSO, MenuLightsManager>("_defaultPreset");
            var playersPlace = GameObject.Find("PlayersPlace");

            feetSprite = playersPlace.GetComponentInChildren <SpriteRenderer>();
            UpdateColors(_menuConfig);
        }
示例#3
0
        public static void Postfix(MenuLightsManager __instance, ref MenuLightsPresetSO preset)
        {
            MenuLightsPreset = preset;
            if (preset.lightIdColorPairs.Length > 0)
            {
                BaseColor = preset.lightIdColorPairs[0].baseColor;
            }

            LightManager = __instance;
        }
示例#4
0
 public MenuLightsManager MenuLightsSO()
 {
     if (_mLSO == null)
     {
         _mLSO         = Resources.FindObjectsOfTypeAll <MenuLightsManager>().First();
         defaultPreset = Resources.FindObjectsOfTypeAll <MenuLightsPresetSO>().First();
         return(_mLSO);
     }
     else
     {
         return(_mLSO);
     }
 }
 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 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);
            }
        }
示例#7
0
        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);
        }
示例#8
0
        public void UpdateColors(Config.Menu menuConfig)
        {
            var defaultColor = CachedColor(Color);

            defaultMenuLights = CreateMenuLights(defaultColor);
            if (menuConfig.ColorPairs.TryGetValue("PlayersPlaceFeet", out Config.ColorPair playersFeetColorPair))
            {
                feetSprite.color = playersFeetColorPair.Enabled ? playersFeetColorPair.Color : defaultColor.color;
            }
            if (menuConfig.ColorPairs.TryGetValue("Freeplay", out Config.ColorPair freeplay))
            {
                if (freeplay.Enabled)
                {
                    var lights = CreateMenuLights(freeplay.Color);
                    _soloFreePlayFlowCoordinator.SetField("_defaultLightsPreset", lights);
                    _partyFreePlayFlowCoordinator.SetField("_defaultLightsPreset", lights);
                }
                else
                {
                    _soloFreePlayFlowCoordinator.SetField("_defaultLightsPreset", defaultMenuLights);
                    _partyFreePlayFlowCoordinator.SetField("_defaultLightsPreset", defaultMenuLights);
                }
            }
            if (menuConfig.ColorPairs.TryGetValue("Results", out Config.ColorPair results))
            {
                if (results.Enabled)
                {
                    var lights = CreateMenuLights(results.Color);
                    _soloFreePlayFlowCoordinator.SetField("_resultsClearedLightsPreset", lights);
                    _partyFreePlayFlowCoordinator.SetField("_resultsClearedLightsPreset", lights);
                }
                else
                {
                    _soloFreePlayFlowCoordinator.SetField("_resultsClearedLightsPreset", defaultMenuLights);
                    _partyFreePlayFlowCoordinator.SetField("_resultsClearedLightsPreset", defaultMenuLights);
                }
            }
            if (menuConfig.ColorPairs.TryGetValue("Campaigns", out Config.ColorPair campaigns))
            {
                if (campaigns.Enabled)
                {
                    var lights = CreateMenuLights(campaigns.Color);
                    _campaignFlowCoordinator.SetField("_defaultLightsPreset", lights);
                }
                else
                {
                    _campaignFlowCoordinator.SetField("_defaultLightsPreset", defaultMenuLights);
                }
            }
            _centerStageScreenController.SetField("_defaultMenuLightsPreset", defaultMenuLights);
            if (menuConfig.ColorPairs.TryGetValue("Multiplayer", out Config.ColorPair multiplayer))
            {
                if (multiplayer.Enabled)
                {
                    var lights = CreateMenuLights(multiplayer.Color);
                    _centerStageScreenController.SetField("_lobbyLightsPreset", lights);
                }
            }
            if (menuConfig.ColorPairs.TryGetValue("MultiplayerCountdown", out Config.ColorPair multiplayerCountdown))
            {
                if (multiplayerCountdown.Enabled)
                {
                    var lights = CreateMenuLights(multiplayerCountdown.Color);
                    _centerStageScreenController.SetField("_countdownMenuLightsPreset", lights);
                }
            }
            _mainFlowCoordinator.SetField("_defaultLightsPreset", defaultMenuLights);
        }
示例#9
0
 public void SetColor(Color color)
 {
     defaultMenuLights = _menuLightsManager.GetField <MenuLightsPresetSO, MenuLightsManager>("_defaultPreset");
     _menuLightsManager?.SetColorPreset(CreateMenuLights(color), true);
     _menuLightsManager?.RefreshColors();
 }