Пример #1
0
 internal LanguageSettingCreator(DiContainer container, GameplaySetupViewController gameplaySetupViewController, SettingsNavigationController settingsNavigationController, StandardLevelDetailViewController standardLevelDetailViewController)
 {
     _container = container;
     _gameplaySetupViewController       = gameplaySetupViewController;
     _settingsNavigationController      = settingsNavigationController;
     _standardLevelDetailViewController = standardLevelDetailViewController;
 }
        protected override void DidActivate(bool firstActivation, bool addedToHierarchy, bool screenSystemEnabling)
        {
            if (addedToHierarchy)
            {
                _didAttemptConnectionYet = false;

                _ongoingGameList             = BeatSaberUI.CreateViewController <OngoingGameList>();
                _gameplaySetupViewController = Resources.FindObjectsOfTypeAll <GameplaySetupViewController>().First();
            }
        }
Пример #3
0
 public DisoMusicPlayer(Config config, SiraLog siraLog, DisoPlayerPanel disoPlayerPanel, DisoPreviewPlayer disoPreviewPlayer, IAudioContainerService audioContainerService, GameplaySetupViewController gameplaySetupViewController)
 {
     _config                      = config;
     _siraLog                     = siraLog;
     _disoPlayerPanel             = disoPlayerPanel;
     _disoPreviewPlayer           = disoPreviewPlayer;
     _playFuture                  = new Stack <AudioContainer>();
     _playHistory                 = new Stack <AudioContainer>();
     _audioContainerService       = audioContainerService;
     _gameplaySetupViewController = gameplaySetupViewController;
 }
 private void Inject(ILoggerProvider loggerProvider, PlayerAvatarManager avatarManager, Settings settings, CalibrationData calibrationData, ShaderLoader shaderLoader, VRPlayerInput playerInput, PlayerDataModel playerDataModel, GameplaySetupViewController gameplaySetupViewController)
 {
     _logger                      = loggerProvider.CreateLogger <SettingsViewController>();
     _avatarManager               = avatarManager;
     _settings                    = settings;
     _calibrationData             = calibrationData;
     _shaderLoader                = shaderLoader;
     _playerInput                 = playerInput;
     _playerDataModel             = playerDataModel;
     _gameplaySetupViewController = gameplaySetupViewController;
 }
Пример #5
0
        private void SetupPreMap()
        {
            SoloFreePlayFlowCoordinator coord = UnityEngine.Object.FindObjectOfType <SoloFreePlayFlowCoordinator>();

            Practice = ((PlayerDataModelSO)typeof(SoloFreePlayFlowCoordinator).GetField("_playerDataModel", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(coord)).sharedPracticeSettings;
            GameplaySetupViewController gameplayViewController = (GameplaySetupViewController)typeof(SoloFreePlayFlowCoordinator).GetField("_gameplaySetupViewController", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(coord);

            Modifiers      = new GameplayModifiers(gameplayViewController.gameplayModifiers);
            PlayerSettings = gameplayViewController.playerSettings;
            Difficulty     = ((StandardLevelDetailViewController)typeof(SoloFreePlayFlowCoordinator).GetField("_levelDetailViewController", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(coord)).selectedDifficultyBeatmap;
        }
        public MockPartyViewController()
        {
            _partyFlowCoordinator = Resources.FindObjectsOfTypeAll <PartyFreePlayFlowCoordinator>().FirstOrDefault();
            LevelListViewController level = ReflectionUtil.GetPrivateField <LevelListViewController>(_partyFlowCoordinator, "_levelListViewController");

            detail = ReflectionUtil.GetPrivateField <StandardLevelDetailViewController>(_partyFlowCoordinator, "_levelDetailViewController");
            BeatmapDifficultyViewController beatmap = ReflectionUtil.GetPrivateField <BeatmapDifficultyViewController>(_partyFlowCoordinator, "_beatmapDifficultyViewController");

            _gameplaySetupViewController = ReflectionUtil.GetPrivateField <GameplaySetupViewController>(_partyFlowCoordinator, "_gameplaySetupViewController");

            level.didActivateEvent += (first, type) => {
                if (Data.Steam.SteamAPI.GetConnectionState() != SteamAPI.ConnectionState.CONNECTED || !_partyFlowCoordinator || !_partyFlowCoordinator.isActivated)
                {
                    return;
                }
                _partyFlowCoordinator.InvokePrivateMethod("SetRightScreenViewController", new object[] { MultiplayerLobby.Instance.rightViewController, true });
            };
            level.didSelectLevelEvent += didSelectLevel;

            beatmap.didSelectDifficultyEvent += didSelectBeatmap;
            mPlay = BeatSaberUI.CreateUIButton(detail.rectTransform, "CreditsButton", new Vector2(0f, -24f), new Vector2(40, 9f));

            mPlay.SetButtonText("Play with Lobby");
            mPlay.SetButtonTextSize(5f);
            mPlay.gameObject.SetActive(false);
            mPlay.ToggleWordWrapping(false);

            mPlay.onClick.AddListener(didSelectPlay);

            _mainMenuController = Resources.FindObjectsOfTypeAll <MainMenuViewController>().FirstOrDefault();
            Button    partyButton = ReflectionUtil.GetPrivateField <Button>(_mainMenuController, "_partyButton");
            HoverHint hint        = Resources.FindObjectsOfTypeAll <HoverHint>().Where(x => x.text == "Play with your friends locally!").First();

            _mainMenuController.didActivateEvent += (first, type) =>
            {
                if (Data.Steam.SteamAPI.GetConnectionState() != SteamAPI.ConnectionState.CONNECTED)
                {
                    partyButton.SetButtonText("Party");
                    if (hint)
                    {
                        hint.text = "Play with your friends locally!";
                    }
                }
                else
                {
                    partyButton.SetButtonText("Online Lobby");
                    if (hint)
                    {
                        hint.text = "Play with your friends in your steam lobby!";
                    }
                }
            };
        }
Пример #7
0
        public override void Instantiate()
        {
            if (initialized)
            {
                return;
            }

            //We have to find our own target
            //TODO: Clean up time complexity issue. This is called for each new option
            SoloFreePlayFlowCoordinator sfpfc = Resources.FindObjectsOfTypeAll <SoloFreePlayFlowCoordinator>().First();
            GameplaySetupViewController gsvc  = sfpfc.GetField <GameplaySetupViewController>("_gameplaySetupViewController");
            RectTransform container           = (RectTransform)gsvc.transform.Find("GameplayModifiers").Find("RightColumn");

            var volumeSettings = Resources.FindObjectsOfTypeAll <VolumeSettingsController>().FirstOrDefault();

            gameObject      = UnityEngine.Object.Instantiate(volumeSettings.gameObject, container);
            gameObject.name = optionName;
            gameObject.GetComponentInChildren <TMP_Text>().text = optionName;

            //Slim down the toggle option so it fits in the space we have before the divider
            (gameObject.transform as RectTransform).sizeDelta = new Vector2(50, (gameObject.transform as RectTransform).sizeDelta.y);

            //This magical nonsense is courtesy of Taz and his SettingsUI class
            VolumeSettingsController volume = gameObject.GetComponent <VolumeSettingsController>();
            ListViewController       newListSettingsController = (ListViewController)ReflectionUtil.CopyComponent(volume, typeof(ListSettingsController), typeof(ListViewController), gameObject);

            UnityEngine.Object.DestroyImmediate(volume);

            newListSettingsController.values   = _options.Keys.ToList();
            newListSettingsController.SetValue = OnChange;
            newListSettingsController.GetValue = () =>
            {
                if (GetValue != null)
                {
                    return(GetValue.Invoke());
                }
                return(_options.Keys.ElementAt(0));
            };
            newListSettingsController.GetTextForValue = (v) =>
            {
                if (_options.ContainsKey(v))
                {
                    return(_options[v]);
                }
                return("UNKNOWN");
            };

            //Initialize the controller, as if we had just opened the settings menu
            newListSettingsController.Init();
            gameObject.SetActive(false);
            initialized = true;
        }
Пример #8
0
        public override void Instantiate()
        {
            if (initialized)
            {
                return;
            }

            //We have to find our own target
            //TODO: Clean up time complexity issue. This is called for each new option
            SoloFreePlayFlowCoordinator sfpfc = Resources.FindObjectsOfTypeAll <SoloFreePlayFlowCoordinator>().First();
            GameplaySetupViewController gsvc  = sfpfc.GetField <GameplaySetupViewController>("_gameplaySetupViewController");
            RectTransform container           = (RectTransform)gsvc.transform.Find("GameplayModifiers").Find("RightColumn");

            gameObject                         = UnityEngine.Object.Instantiate(container.Find("NoFail").gameObject, container);
            gameObject.name                    = optionName;
            gameObject.layer                   = container.gameObject.layer;
            gameObject.transform.parent        = container;
            gameObject.transform.localPosition = Vector3.zero;
            gameObject.transform.localScale    = Vector3.one;
            gameObject.transform.rotation      = Quaternion.identity;
            gameObject.SetActive(false);

            var gmt = gameObject.GetComponent <GameplayModifierToggle>();

            if (gmt != null)
            {
                gmt.toggle.isOn = GetValue;
                gmt.toggle.onValueChanged.RemoveAllListeners();
                gmt.toggle.onValueChanged.AddListener((bool e) => { OnToggle?.Invoke(e); });

                GameplayModifierParamsSO _gameplayModifier = new GameplayModifierParamsSO();
                _gameplayModifier.SetPrivateField("_modifierName", optionName);
                _gameplayModifier.SetPrivateField("_hintText", hintText);
                _gameplayModifier.SetPrivateField("_multiplier", 0.0f);
                _gameplayModifier.SetPrivateField("_icon", optionIcon == null ? gmt.GetPrivateField <GameplayModifierParamsSO>("_gameplayModifier").icon : optionIcon);
                gmt.SetPrivateField("_gameplayModifier", _gameplayModifier);

                if (hintText != String.Empty)
                {
                    var hoverHint = gmt.GetPrivateField <HoverHint>("_hoverHint");
                    hoverHint.text    = hintText;
                    hoverHint.name    = optionName;
                    hoverHint.enabled = true;
                    var hoverHintController = Resources.FindObjectsOfTypeAll <HoverHintController>().First();
                    hoverHint.SetPrivateField("_hoverHintController", hoverHintController);
                }
            }



            initialized = true;
        }
 public ControllerOffsetModifierViewController(GameplaySetupViewController gameplaySetupViewController, MainSettingsMenuViewController mainSettingsMenuViewController, ControllerOffsetPresetsModalController controllerOffsetPresetsModalController, ControllerOffsetSettingsModalController controllerOffsetSettingsModalController) : base(controllerOffsetPresetsModalController, controllerOffsetSettingsModalController)
 {
     this.gameplaySetupViewController = gameplaySetupViewController;
     SettingsSubMenuInfo[] settingsSubMenuInfos = Accessors.SettingsSubMenuInfoAccessor(ref mainSettingsMenuViewController);
     foreach (var settingSubMenuInfo in settingsSubMenuInfos)
     {
         if (settingSubMenuInfo.viewController is ControllersTransformSettingsViewController controllersTransformSettingsViewController)
         {
             positionOffset = Accessors.ControllerPositionAccessor(ref controllersTransformSettingsViewController);
             rotationOffset = Accessors.ControllerRotationAccessor(ref controllersTransformSettingsViewController);
             break;
         }
     }
 }
        public MockPartyViewController()
        {
            Instance = this;
            _partyFlowCoordinator = Resources.FindObjectsOfTypeAll <PartyFreePlayFlowCoordinator>().FirstOrDefault();
            LevelPackLevelsViewController     levels          = ReflectionUtil.GetPrivateField <LevelPackLevelsViewController>(_partyFlowCoordinator, "_levelPackLevelsViewController");
            LevelPacksViewController          levelPacks      = ReflectionUtil.GetPrivateField <LevelPacksViewController>(_partyFlowCoordinator, "_levelPacksViewController");
            LevelPackDetailViewController     levelPackDetail = ReflectionUtil.GetPrivateField <LevelPackDetailViewController>(_partyFlowCoordinator, "_levelPackDetailViewController");
            StandardLevelDetailViewController detail          = ReflectionUtil.GetPrivateField <StandardLevelDetailViewController>(_partyFlowCoordinator, "_levelDetailViewController");

            detailView = ReflectionUtil.GetPrivateField <StandardLevelDetailView>(detail, "_standardLevelDetailView");
            _gameplaySetupViewController = ReflectionUtil.GetPrivateField <GameplaySetupViewController>(_partyFlowCoordinator, "_gameplaySetupViewController");
            LocalLeaderboardViewController leaderboard = ReflectionUtil.GetPrivateField <LocalLeaderboardViewController>(_partyFlowCoordinator, "_localLeaderboardViewController");

            detail.didPresentContentEvent += (controller, type) =>
            {
                if (type == StandardLevelDetailViewController.ContentType.OwnedAndReady)
                {
                    didSelectLevel(detail.selectedDifficultyBeatmap);
                }
            };
            detail.didChangeDifficultyBeatmapEvent += didSelectDifficultyBeatmap;
            detail.didPressPlayButtonEvent         += didPressPlay;

            levelPackDetail.didActivateEvent += (firstActivation, type) => showLeaderboard();
            leaderboard.didActivateEvent     += (firstActivation, type) => showLeaderboard();

            _mainMenuController = Resources.FindObjectsOfTypeAll <MainMenuViewController>().FirstOrDefault();
            Button    partyButton = ReflectionUtil.GetPrivateField <Button>(_mainMenuController, "_partyButton");
            HoverHint hint        = Resources.FindObjectsOfTypeAll <HoverHint>().Where(x => x.text == "Play with your friends locally!").First();

            _mainMenuController.didActivateEvent += (first, type) =>
            {
                if (Data.Steam.SteamAPI.GetConnectionState() != SteamAPI.ConnectionState.CONNECTED)
                {
                    partyButton.SetButtonText("Party");
                    if (hint)
                    {
                        hint.text = "Play with your friends locally!";
                    }
                }
                else
                {
                    partyButton.SetButtonText("Online Lobby");
                    if (hint)
                    {
                        hint.text = "Play with your friends in your steam lobby!";
                    }
                }
            };
        }
Пример #11
0
 internal void Setup()
 {
     if (menus.Count == 0)
     {
         return;
     }
     gameplaySetupViewController = Resources.FindObjectsOfTypeAll <GameplaySetupViewController>().First();
     gameplaySetupViewController.transform.Find("HeaderPanel").GetComponentInChildren <TextMeshProUGUI>().fontSize = 4;
     foreach (Transform transform in gameplaySetupViewController.transform)
     {
         if (transform.name != "HeaderPanel")
         {
             vanillaItems.Add(transform);
         }
     }
     (gameplaySetupViewController.transform.Find("HeaderPanel") as RectTransform).sizeDelta = new Vector2(90, 6);
     BSMLParser.instance.Parse(Utilities.GetResourceContent(Assembly.GetExecutingAssembly(), "BeatSaberMarkupLanguage.Views.gameplay-setup.bsml"), gameplaySetupViewController.gameObject, this);
 }
Пример #12
0
        void Constractor(GameplaySetupViewController container, PlayerDataModel model, StandardLevelDetailViewController standard)
        {
            this.CreateParams();
            this.gameplaySetupViewController = container;
            this.playerDataModel             = model;
            var detailview = standard.GetField <StandardLevelDetailView, StandardLevelDetailViewController>("_standardLevelDetailView");

            this._actionButton = detailview.actionButton;
            if (this._actionButton is NoTransitionsButton noTransitionsButton)
            {
                foreach (var bg in noTransitionsButton.gameObject.GetComponentsInChildren <ImageView>())
                {
                    if (bg.name == "BG")
                    {
                        bg.SetField("_gradient", false);
                        this._defaultColor = bg.color;
                    }
                }
            }
            this.playerSettingsPanelController = this.gameplaySetupViewController.GetField <PlayerSettingsPanelController, GameplaySetupViewController>("_playerSettingsPanelController");
        }
Пример #13
0
        public void SceneManagerOnActiveSceneChanged(Scene arg0, Scene scene)
        {
            if (isMenuScene(scene))
            {
                try
                {
                    flowCoordinator = Resources.FindObjectsOfTypeAll <MainFlowCoordinator>().FirstOrDefault();

                    mainMenuViewController = flowCoordinator.GetPrivateField <MainMenuViewController>("_mainMenuViewController");
                    //soloModeSelectionViewController =   flowCoordinator.GetPrivateField<SoloModeSelectionViewController>("_soloFreePlayFlowCoordinator");


                    soloFreePlayFlowCoordinator     = flowCoordinator.GetPrivateField <SoloFreePlayFlowCoordinator>("_soloFreePlayFlowCoordinator");
                    detailViewController            = soloFreePlayFlowCoordinator.GetPrivateField <StandardLevelDetailViewController>("_levelDetailViewController");
                    gameplaySetupViewController     = soloFreePlayFlowCoordinator.GetPrivateField <GameplaySetupViewController>("_gameplaySetupViewController");
                    practiceController              = soloFreePlayFlowCoordinator.GetPrivateField <PracticeViewController>("_practiceViewController");
                    beatmapDifficultyViewController = soloFreePlayFlowCoordinator.GetPrivateField <BeatmapDifficultyViewController>("_beatmapDifficultyViewControllerViewController");
                    listViewController              = soloFreePlayFlowCoordinator.GetPrivateField <LevelListViewController>("_levelListViewController");

                    levelListView = listViewController.GetPrivateField <LevelListTableView>("_levelListTableView");
                    tableView     = levelListView.GetPrivateField <TableView>("_tableView");

                    gameScenesManager = Resources.FindObjectsOfTypeAll <GameScenesManager>().FirstOrDefault();

                    standardLevelReturnToMenu = Resources.FindObjectsOfTypeAll <StandardLevelReturnToMenuController>().FirstOrDefault();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }
            if (isGameScene(scene))
            {
                if (autoPlay)
                {
                }
            }

            Console.WriteLine(scene.name);
        }
        internal void Setup()
        {
            if (menus.Count == 0)
            {
                return;
            }
            gameplaySetupViewController = Resources.FindObjectsOfTypeAll <GameplaySetupViewController>().First();
            vanillaItems.Clear();
            foreach (Transform transform in gameplaySetupViewController.transform)
            {
                if (transform.name != "HeaderPanel")
                {
                    vanillaItems.Add(transform);
                }
            }
            RectTransform textSegmentedControl = gameplaySetupViewController.transform.Find("TextSegmentedControl") as RectTransform;

            textSegmentedControl.sizeDelta = new Vector2(0, 6);
            layoutGroup = textSegmentedControl.GetComponent <LayoutGroup>();
            BSMLParser.instance.Parse(Utilities.GetResourceContent(Assembly.GetExecutingAssembly(), "BeatSaberMarkupLanguage.Views.gameplay-setup.bsml"), gameplaySetupViewController.gameObject, this);

            gameplaySetupViewController.didActivateEvent += GameplaySetupDidActivate;
        }
        public override void Instantiate()
        {
            //We have to find our own target
            //TODO: Clean up time complexity issue. This is called for each new option
            SoloFreePlayFlowCoordinator sfpfc = Resources.FindObjectsOfTypeAll <SoloFreePlayFlowCoordinator>().First();
            GameplaySetupViewController gsvc  = sfpfc.GetField <GameplaySetupViewController>("_gameplaySetupViewController");
            RectTransform container           = (RectTransform)gsvc.transform.Find(pageName).Find(panelName);

            gameObject       = UnityEngine.Object.Instantiate(Resources.FindObjectsOfTypeAll <GameplayModifierToggle>().Where(g => g.transform.Find("BG"))?.Last().gameObject, container);
            gameObject.name  = optionName;
            gameObject.layer = container.gameObject.layer;
            gameObject.transform.SetParent(container);
            gameObject.transform.localPosition = Vector3.zero;
            gameObject.transform.localScale    = Vector3.one;
            gameObject.transform.rotation      = Quaternion.identity;
            gameObject.SetActive(false);

            foreach (Transform t in container)
            {
                if (t.name.StartsWith("Separator"))
                {
                    separator      = UnityEngine.Object.Instantiate(t.gameObject, container);
                    separator.name = "ExtraSeparator";
                    separator.SetActive(false);
                    break;
                }
            }

            string ConflictText  = "\r\n\r\n<size=60%><color=#ff0000ff><b>Conflicts </b></color>";
            var    currentToggle = gameObject.GetComponent <GameplayModifierToggle>();

            if (currentToggle != null)
            {
                currentToggle.toggle.isOn = GetValue;
                currentToggle.toggle.onValueChanged.RemoveAllListeners();
                currentToggle.toggle.onValueChanged.AddListener((bool e) => OnToggle?.Invoke(e));
                currentToggle.name = optionName.Replace(" ", "");

                GameplayModifierToggle[] gameplayModifierToggles = Resources.FindObjectsOfTypeAll <GameplayModifierToggle>();

                if (conflicts.Count > 0)
                {
                    hintText += ConflictText;
                    foreach (string conflict in conflicts)
                    {
                        var conflictingModifier = gameplayModifierToggles.Where(t => t?.gameplayModifier?.modifierName == conflict).FirstOrDefault();
                        if (conflictingModifier)
                        {
                            if (!hintText.Contains(ConflictText))
                            {
                                hintText += ConflictText;
                            }

                            hintText += Char.ConvertFromUtf32((char)0xE069) + conflict + Char.ConvertFromUtf32((char)0xE069);
                        }
                    }
                }

                GameplayModifierParamsSO _gameplayModifier = new GameplayModifierParamsSO();
                _gameplayModifier.SetPrivateField("_modifierName", optionName);
                _gameplayModifier.SetPrivateField("_hintText", hintText);
                _gameplayModifier.SetPrivateField("_multiplier", multiplier);
                _gameplayModifier.SetPrivateField("_icon", optionIcon == null ? UIUtilities.BlankSprite : optionIcon);
                currentToggle.SetPrivateField("_gameplayModifier", _gameplayModifier);

                string currentDisplayName = Char.ConvertFromUtf32((char)0xE069) + optionName + Char.ConvertFromUtf32((char)0xE069);
                foreach (string conflictingModifierName in conflicts)
                {
                    GameplayModifierToggle conflictToggle = gameplayModifierToggles.Where(t => t?.gameplayModifier?.modifierName == conflictingModifierName).FirstOrDefault();
                    if (conflictToggle)
                    {
                        if (!conflictToggle.gameplayModifier.hintText.Contains(ConflictText))
                        {
                            conflictToggle.gameplayModifier.SetPrivateField("_hintText", conflictToggle.gameplayModifier.hintText + ConflictText);
                        }

                        if (!conflictToggle.gameplayModifier.hintText.Contains(currentDisplayName))
                        {
                            conflictToggle.gameplayModifier.SetPrivateField("_hintText", conflictToggle.gameplayModifier.hintText + currentDisplayName);
                        }

                        conflictToggle.toggle.onValueChanged.AddListener((e) => { if (e)
                                                                                  {
                                                                                      currentToggle.toggle.isOn = false;
                                                                                  }
                                                                         });
                        currentToggle.toggle.onValueChanged.AddListener((e) => { if (e)
                                                                                 {
                                                                                     conflictToggle.toggle.isOn = false;
                                                                                 }
                                                                        });
                    }
                }

                if (hintText != String.Empty)
                {
                    HoverHint hoverHint = currentToggle.GetPrivateField <HoverHint>("_hoverHint");
                    hoverHint.text = hintText;
                    hoverHint.name = optionName;
                    HoverHintController hoverHintController = Resources.FindObjectsOfTypeAll <HoverHintController>().First();
                    hoverHint.SetPrivateField("_hoverHintController", hoverHintController);
                }
            }
            initialized = true;
        }
        public override void Instantiate()
        {
            try
            {
                //We have to find our own target
                //TODO: Clean up time complexity issue. This is called for each new option
                SoloFreePlayFlowCoordinator sfpfc = Resources.FindObjectsOfTypeAll <SoloFreePlayFlowCoordinator>().First();
                GameplaySetupViewController gsvc  = sfpfc.GetField <GameplaySetupViewController>("_gameplaySetupViewController");
                RectTransform container           = (RectTransform)gsvc.transform.Find(pageName).Find(panelName);

                var volumeSettings = Resources.FindObjectsOfTypeAll <VolumeSettingsController>().FirstOrDefault();
                gameObject      = UnityEngine.Object.Instantiate(volumeSettings.gameObject, container);
                gameObject.name = optionName;
                gameObject.GetComponentInChildren <TMP_Text>().text = optionName;

                foreach (Transform t in container)
                {
                    if (t.name.StartsWith("Separator"))
                    {
                        separator      = UnityEngine.Object.Instantiate(t.gameObject, container);
                        separator.name = "ExtraSeparator";
                        separator.SetActive(false);
                        break;
                    }
                }

                //Slim down the toggle option so it fits in the space we have before the divider
                (gameObject.transform as RectTransform).sizeDelta = new Vector2(50, (gameObject.transform as RectTransform).sizeDelta.y);

                //This magical nonsense is courtesy of Taz and his SettingsUI class
                VolumeSettingsController volume = gameObject.GetComponent <VolumeSettingsController>();
                ListViewController       newListSettingsController = (ListViewController)ReflectionUtil.CopyComponent(volume, typeof(ListSettingsController), typeof(ListViewController), gameObject);
                UnityEngine.Object.DestroyImmediate(volume);

                newListSettingsController.values   = _options.Keys.ToList();
                newListSettingsController.SetValue = OnChange;
                newListSettingsController.GetValue = () =>
                {
                    if (GetValue != null)
                    {
                        return(GetValue.Invoke());
                    }
                    return(_options.Keys.ElementAt(0));
                };
                newListSettingsController.GetTextForValue = (v) =>
                {
                    if (_options.ContainsKey(v))
                    {
                        return(_options[v] != null ? _options[v] : v.ToString());
                    }
                    return("UNKNOWN");
                };

                //Initialize the controller, as if we had just opened the settings menu
                newListSettingsController.Init();
                var      value           = newListSettingsController.gameObject.transform.Find("Value");
                var      valueText       = value.Find("ValueText");
                TMP_Text valueTextObject = valueText.GetComponent <TMP_Text>();
                valueTextObject.lineSpacing = -50;
                valueTextObject.alignment   = TextAlignmentOptions.CenterGeoAligned;

                var nameText = newListSettingsController.gameObject.transform.Find("NameText");
                nameText.localScale = new Vector3(0.85f, 0.85f, 0.85f);
                value.localScale    = new Vector3(0.7f, 0.7f, 0.7f);
                if (hintText != String.Empty)
                {
                    BeatSaberUI.AddHintText(nameText as RectTransform, hintText);
                }

                var dec = value.Find("DecButton");
                dec.transform.localScale = new Vector3(0.7f, 0.7f, 0.7f);
                var inc = value.Find("IncButton");
                inc.transform.localScale = new Vector3(0.7f, 0.7f, 0.7f);
                value.localPosition     -= new Vector3(8, 0.3f);

                gameObject.SetActive(false);
                initialized = true;
            }
            catch (Exception e)
            {
                Console.WriteLine($"Exception when trying to instantiate list option {e.ToString()}");
            }
        }
        public void Build()
        {
            //Grab necessary references
            SoloFreePlayFlowCoordinator sfpfc = Resources.FindObjectsOfTypeAll <SoloFreePlayFlowCoordinator>().First();
            GameplaySetupViewController gsvc  = sfpfc.GetField <GameplaySetupViewController>("_gameplaySetupViewController");

            //Get reference to the switch container
            RectTransform container = (RectTransform)gsvc.transform.Find("GameplayModifiers").Find("RightColumn");

            if (!initialized)
            {
                //container.sizeDelta = new Vector2(container.sizeDelta.x, container.sizeDelta.y + 7f); //Grow container so it aligns properly with text

                //Get references to the original switches, so we can later duplicate then destroy them
                Transform noFail      = container.Find("NoFail");
                Transform noObstacles = container.Find("NoObstacles");
                Transform noBombs     = container.Find("NoBombs");
                Transform slowerSong  = container.Find("SlowerSong");

                //Get references to other UI elements we need to hide
                //Transform divider = (RectTransform)_govc.transform.Find("Switches").Find("Separator");
                //Transform defaults = (RectTransform)_govc.transform.Find("Switches").Find("DefaultsButton");

                //Create up button
                _pageUpButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => (x.name == "PageUpButton")), container);
                _pageUpButton.transform.parent         = container.parent;
                _pageUpButton.transform.localScale     = Vector3.one / 2;
                _pageUpButton.transform.localPosition -= new Vector3(0, 2f);
                _pageUpButton.interactable             = true;
                //(_pageUpButton.transform as RectTransform).sizeDelta = new Vector2((_pageUpButton.transform.parent as RectTransform).sizeDelta.x, 3.5f);
                _pageUpButton.onClick.RemoveAllListeners();
                _pageUpButton.onClick.AddListener(delegate()
                {
                    Instance.ChangePage(--Instance._listIndex, container, noFail, noObstacles, noBombs, slowerSong);

                    //Nice responsive scroll buttons
                    if (Instance._listIndex <= 0)
                    {
                        _pageUpButton.gameObject.SetActive(false);
                    }
                    if (Instance.customOptions.Count > 0)
                    {
                        _pageDownButton.gameObject.SetActive(true);
                    }
                });

                //Create down button
                _pageDownButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => (x.name == "PageDownButton")), container);
                _pageDownButton.transform.parent         = container.parent;
                _pageDownButton.transform.localScale     = Vector3.one / 2;
                _pageDownButton.transform.localPosition -= new Vector3(0, 7f);
                _pageDownButton.interactable             = true;
                //(_pageDownButton.transform as RectTransform).sizeDelta = new Vector2((_pageDownButton.transform.parent as RectTransform).sizeDelta.x, (_pageDownButton.transform as RectTransform).sizeDelta.y);
                _pageDownButton.onClick.RemoveAllListeners();
                _pageDownButton.onClick.AddListener(delegate()
                {
                    Instance.ChangePage(++Instance._listIndex, container, noFail, noObstacles, noBombs, slowerSong);

                    //Nice responsive scroll buttons
                    if (Instance._listIndex >= 0)
                    {
                        _pageUpButton.gameObject.SetActive(true);
                    }
                    if (((Instance.customOptions.Count + 4 - 1) / 4) - Instance._listIndex <= 0)
                    {
                        _pageDownButton.gameObject.SetActive(false);
                    }
                });

                _pageUpButton.gameObject.SetActive(false);
                _pageDownButton.gameObject.SetActive(Instance.customOptions.Count > 0);

                //Unfortunately, due to weird object creation for versioning, this doesn't always
                //happen when the scene changes
                Instance._listIndex = 0;

                initialized = true;
            }

            //Create custom options
            foreach (GameOption option in Instance.customOptions)
            {
                option.Instantiate();
            }
        }
        public void Build()
        {
            string pageName = String.Empty, panelName = String.Empty;

            GameOption.GetPanelNames(panel, ref pageName, ref panelName);

            //Grab necessary references
            SoloFreePlayFlowCoordinator sfpfc = Resources.FindObjectsOfTypeAll <SoloFreePlayFlowCoordinator>().First();
            GameplaySetupViewController gsvc  = sfpfc.GetField <GameplaySetupViewController>("_gameplaySetupViewController");

            //Get reference to the switch container
            RectTransform page = (RectTransform)gsvc.transform.Find(pageName);

            Destroy(page.gameObject.GetComponent <HorizontalLayoutGroup>());
            Destroy(page.gameObject.GetComponent <ContentSizeFitter>());
            _panelContainer = (RectTransform)page.Find(panelName);

            if (!_panelContainer.gameObject.GetComponent <ContentSizeFitter>())
            {
                var fitter = _panelContainer.gameObject.AddComponent <ContentSizeFitter>();
                fitter.horizontalFit = ContentSizeFitter.FitMode.Unconstrained;
                fitter.verticalFit   = ContentSizeFitter.FitMode.PreferredSize;
            }

            // Make the player height option the same height as other options
            var height = _panelContainer.Find("PlayerHeight");

            if (height)
            {
                var staticLights = _panelContainer.Find("StaticLights");
                (height as RectTransform).sizeDelta = (staticLights as RectTransform).sizeDelta;
                var title = height.Find("Title");
                if (title)
                {
                    (title as RectTransform).sizeDelta = new Vector2((title as RectTransform).sizeDelta.x, 1);
                    title.localPosition += new Vector3(0, 0.5f);
                    var text = title.gameObject.GetComponentInChildren <TextMeshProUGUI>();
                    text.alignment          = TextAlignmentOptions.MidlineLeft;
                    text.enableWordWrapping = false;
                }

                var measure = height.Find("MeassureButton");
                measure.localScale    *= 0.6f;
                measure.localPosition += new Vector3(5f, 0);
                var reset = height.Find("ResetButton");
                reset.localScale *= 0.6f;
            }

            if (!initialized)
            {
                //Get references to the original switches, so we can later duplicate then destroy them
                GameOption.GetOptionTransforms(panel, _panelContainer, ref _defaultOptions[0], ref _defaultOptions[1], ref _defaultOptions[2], ref _defaultOptions[3]);

                foreach (Transform t in _panelContainer)
                {
                    if (t.name.StartsWith("Separator"))
                    {
                        _defaultSeparators.Add(t);
                    }
                }
                _defaultSeparators.Reverse();

                //Create up button
                _pageUpButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => (x.name == "PageUpButton")), _panelContainer);
                _pageUpButton.transform.SetParent(_panelContainer.parent);
                _pageUpButton.transform.localScale    = Vector3.one / 2;
                _pageUpButton.transform.localPosition = new Vector3(_pageUpButton.transform.localPosition.x, -2.2f, _pageUpButton.transform.localPosition.z);
                _pageUpButton.interactable            = true;
                //(_pageUpButton.transform as RectTransform).sizeDelta = new Vector2((_pageUpButton.transform.parent as RectTransform).sizeDelta.x, 3.5f);
                _pageUpButton.onClick.RemoveAllListeners();
                _pageUpButton.onClick.AddListener(delegate()
                {
                    Instance[panel].ChangePage(--Instance[panel]._pageIndex, _panelContainer, Instance[panel]._defaultOptions[0], Instance[panel]._defaultOptions[1], Instance[panel]._defaultOptions[2], Instance[panel]._defaultOptions[3]);
                });

                //Create down button
                _pageDownButton = Instantiate(Resources.FindObjectsOfTypeAll <Button>().First(x => (x.name == "PageDownButton")), _panelContainer);
                _pageDownButton.transform.SetParent(_panelContainer.parent);
                _pageDownButton.transform.localScale    = Vector3.one / 2;
                _pageDownButton.transform.localPosition = new Vector3(_pageDownButton.transform.localPosition.x, -34.3f, _pageDownButton.transform.localPosition.z);
                _pageDownButton.interactable            = true;
                //(_pageDownButton.transform as RectTransform).sizeDelta = new Vector2((_pageDownButton.transform.parent as RectTransform).sizeDelta.x, (_pageDownButton.transform as RectTransform).sizeDelta.y);
                _pageDownButton.onClick.RemoveAllListeners();
                _pageDownButton.onClick.AddListener(delegate()
                {
                    Instance[panel].ChangePage(++Instance[panel]._pageIndex, _panelContainer, Instance[panel]._defaultOptions[0], Instance[panel]._defaultOptions[1], Instance[panel]._defaultOptions[2], Instance[panel]._defaultOptions[3]);
                });

                RefreshScrollButtons();
                Instance[panel]._pageIndex = 0;
                initialized = true;
            }

            //Create custom options
            foreach (MenuInfo menu in Instance[panel]._customMenus.Values)
            {
                foreach (GameOption option in menu.options)
                {
                    if (!option.initialized)
                    {
                        option.Instantiate();
                    }
                }
            }

            // Then add conflict text
            foreach (MenuInfo menu in Instance[panel]._customMenus.Values)
            {
                foreach (GameOption option in menu.options)
                {
                    if (option is ToggleOption && option.initialized)
                    {
                        (option as ToggleOption).SetupConflictText();
                    }
                }
            }
        }
Пример #19
0
 public SettingsModalController(GameplaySetupViewController gameplaySetupViewController)
 {
     this.gameplaySetupViewController = gameplaySetupViewController;
     parsed = false;
 }
Пример #20
0
 public HitscoreModal(GameplaySetupViewController gameplaySetupViewController)
 {
     this.gameplaySetupViewController = gameplaySetupViewController;
 }
 public void Construct(PluginConfig pluginConfig, NoteAssetLoader noteAssetLoader, GameplaySetupViewController gameplaySetupViewController)
 {
     _pluginConfig                = pluginConfig;
     _noteAssetLoader             = noteAssetLoader;
     _gameplaySetupViewController = gameplaySetupViewController;
 }
Пример #22
0
        public static async void PlaySong(IPreviewBeatmapLevel level, BeatmapCharacteristicSO characteristic, BeatmapDifficulty difficulty, PlaySong packet)
        {
            flow = (SoloFreePlayFlowCoordinator)Resources.FindObjectsOfTypeAll <MainFlowCoordinator>().First().GetField("_soloFreePlayFlowCoordinator");
            Action <IBeatmapLevel> SongLoaded = (loadedLevel) =>
            {
                Logger.Debug("G");
                MenuTransitionsHelper _menuSceneSetupData = Resources.FindObjectsOfTypeAll <MenuTransitionsHelper>().First();
                IDifficultyBeatmap    diffbeatmap         = loadedLevel.beatmapLevelData.GetDifficultyBeatmap(characteristic, difficulty);
                Logger.Debug("L");
                GameplaySetupViewController gameplaySetupViewController = (GameplaySetupViewController)typeof(SinglePlayerLevelSelectionFlowCoordinator).GetField("_gameplaySetupViewController", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(flow);
                Logger.Debug("D");
                OverrideEnvironmentSettings environmentSettings = gameplaySetupViewController.environmentOverrideSettings;
                ColorScheme scheme = gameplaySetupViewController.colorSchemesSettings.GetSelectedColorScheme();
                //GameplayModifiers modifiers = gameplaySetupViewController.gameplayModifiers;
                PlayerSpecificSettings settings = gameplaySetupViewController.playerSettings;
                //TODO: re add modifier customizability

                PracticeSettings  practiceSettings = ConvertPractice(packet.practiceSettings);
                GameplayModifiers modifiers        = ConvertModifiers(packet.gameplayModifiers, gameplaySetupViewController.gameplayModifiers);
                Logger.Debug(diffbeatmap.level.levelID + " " + scheme.colorSchemeId);
                _menuSceneSetupData.StartStandardLevel(
                    "Solo",
                    diffbeatmap,
                    diffbeatmap.level,
                    environmentSettings,
                    scheme,
                    modifiers,
                    settings,
                    practiceSettings,
                    "Menu",
                    false,
                    null,
                    new Action <StandardLevelScenesTransitionSetupDataSO, LevelCompletionResults>((StandardLevelScenesTransitionSetupDataSO q, LevelCompletionResults r) => { })
                    );
            };

            if (flow == null || flow.gameObject == null || !flow.gameObject.activeInHierarchy)
            {
                Button button = Resources.FindObjectsOfTypeAll <Button>().Where(x => x != null && x.name == "SoloButton").First();
                button.onClick.Invoke();
            }
            if ((level is PreviewBeatmapLevelSO && await HasDLCLevel(level.levelID)) ||
                level is CustomPreviewBeatmapLevel)
            {
                Logger.Debug("Loading DLC/Custom level...");
                var result = await GetLevelFromPreview(level);

                if (!(result?.isError == true))
                {
                    SongLoaded(result?.beatmapLevel);
                    return;
                }
                Logger.Debug("You Suck Idiot");
            }
            else if (level is BeatmapLevelSO)
            {
                Logger.Debug("Reading OST data without songloader...");
                SongLoaded(level as IBeatmapLevel);
            }
            else
            {
                Logger.Debug($"Skipping unowned DLC ({level.songName})");
            }
        }
 public CustomNotesViewManager(NoteListViewController noteListViewController, NoteModifierViewController noteModifierViewController, GameplaySetupViewController gameplaySetupViewController)
 {
     _noteListViewController      = noteListViewController;
     _noteModifierViewController  = noteModifierViewController;
     _gameplaySetupViewController = gameplaySetupViewController;
 }
Пример #24
0
 public ModifierUI(GameplaySetupViewController gameplaySetupViewController, HitscoreModal hitscoreModal)
 {
     this.gameplaySetupViewController = gameplaySetupViewController;
     this.hitscoreModal = hitscoreModal;
 }