void Awake() { singleton = this; }
private static GameObject SetupSubPanel(Transform parent) { GameObject subPanelToInstantiate = parent.Find("SettingsSubPanel, Controls (Gamepad)").gameObject; GameObject subPanelInstance = GameObject.Instantiate(subPanelToInstantiate, parent); Transform instanceLayout = subPanelInstance.transform.Find("Scroll View/Viewport/VerticalLayout"); foreach (Transform child in instanceLayout) { GameObject.Destroy(child.gameObject); } GameObject sliderSetting = subPanelToInstantiate.transform.Find("Scroll View/Viewport/VerticalLayout/SettingsEntryButton, Slider (Look Scale X)").gameObject; GameObject boolSetting = subPanelToInstantiate.transform.Find("Scroll View/Viewport/VerticalLayout/SettingsEntryButton, Bool (Invert X)").gameObject; GameObject carouselSetting = parent.transform.Find("SettingsSubPanel, Video/Scroll View/Viewport/VerticalLayout/SettingsEntryButton, Carousel (Vsync)").gameObject; LanguageTextMeshController descriptionText = parent.transform.Find("GenericDescriptionPanel/ContentSizeFitter/DescriptionText").GetComponent <LanguageTextMeshController>(); bool first = true; foreach (KeyValuePair <string, ModConfig.ConfigSetting> keyValuePair in ModConfig.settings) { ModConfig.ConfigSetting setting = keyValuePair.Value; BaseSettingsControl settingInstance; if (setting.entry.SettingType == typeof(float) || setting.entry.SettingType == typeof(int)) { settingInstance = GameObject.Instantiate(sliderSetting, instanceLayout).GetComponent <BaseSettingsControl>(); SettingsSlider slider = settingInstance as SettingsSlider; slider.minValue = setting.minValue; slider.maxValue = setting.maxValue; slider.formatString = setting.entry.SettingType == typeof(float) ? "{0:0.00}" : "{0:N0}"; } else if (setting.entry.SettingType == typeof(bool)) { settingInstance = GameObject.Instantiate(boolSetting, instanceLayout).GetComponent <BaseSettingsControl>(); } else { settingInstance = GameObject.Instantiate(carouselSetting, instanceLayout).GetComponent <BaseSettingsControl>(); CarouselController carousel = settingInstance as CarouselController; List <CarouselController.Choice> choices = new List <CarouselController.Choice>(); if (keyValuePair.Key == "vr_ray_color") { string[] choiceStrings = new string[] { "White", "Green", "Red", "Blue", "Yellow", "Magenta", "Cyan", "Lime", "Black" }; string[] hexStrings = new string[] { "#FFFFFF", "#008000", "#FF0000", "#0000FF", "#FFFF00", "#FF00FF", "#00FFFF", "#00FF00", "#000000" }; for (int i = 0; i < choiceStrings.Length; i++) { CarouselController.Choice choice = new CarouselController.Choice(); choice.convarValue = hexStrings[i]; choice.suboptionDisplayToken = choiceStrings[i]; choices.Add(choice); } } carousel.choices = choices.ToArray(); } settingInstance.settingSource = BaseSettingsControl.SettingSource.ConVar; settingInstance.nameToken = setting.entry.Definition.Key; settingInstance.settingName = keyValuePair.Key; settingInstance.gameObject.name = "VRModSetting, " + settingInstance.nameToken; HGButton button = settingInstance.GetComponent <HGButton>(); if (button) { string prefixString = ""; if (setting.settingUpdate == ModConfig.ConfigSetting.SettingUpdate.NextStage) { prefixString = "[WILL APPLY NEXT STAGE] "; } else if (setting.settingUpdate == ModConfig.ConfigSetting.SettingUpdate.AfterRestart) { prefixString = "[RESTART REQUIRED] "; } button.updateTextOnHover = true; button.hoverToken = prefixString + setting.entry.Description.Description; button.hoverLanguageTextMeshController = descriptionText; button.defaultFallbackButton = first; first = false; } } GameObject controllerBindingSetting = subPanelToInstantiate.transform.Find("Scroll View/Viewport/VerticalLayout/SettingsEntryButton, Binding (Jump)").gameObject; GameObject keyboardBindingSetting = parent.Find("SettingsSubPanel, Controls (M&KB)/Scroll View/Viewport/VerticalLayout/SettingsEntryButton, Binding (Jump)").gameObject; ActionAddons.ActionDef[] actionDefs = ActionAddons.actionDefs; foreach (var actionDef in actionDefs) { if (actionDef.keyboardMap != KeyboardKeyCode.None) { AddBindingSetting(actionDef, keyboardBindingSetting, instanceLayout); } if (actionDef.joystickMap != ActionAddons.ControllerInput.None) { AddBindingSetting(actionDef, controllerBindingSetting, instanceLayout); } } subPanelInstance.transform.Find("Scroll View").gameObject.AddComponent <ScrollToSelection>(); return(subPanelInstance); }