private void UpdateModButton() { if (ModButton != null) { ModButton.SetText(_Mod.PlusFormat()); } }
void ReleaseDesignerOutlets() { if (AddDieButton != null) { AddDieButton.Dispose(); AddDieButton = null; } if (BackgroundView != null) { BackgroundView.Dispose(); BackgroundView = null; } if (CancelButton != null) { CancelButton.Dispose(); CancelButton = null; } if (DieTableView != null) { DieTableView.Dispose(); DieTableView = null; } if (HeaderLabel != null) { HeaderLabel.Dispose(); HeaderLabel = null; } if (HeaderView != null) { HeaderView.Dispose(); HeaderView = null; } if (ModButton != null) { ModButton.Dispose(); ModButton = null; } if (ModView != null) { ModView.Dispose(); ModView = null; } if (OKButton != null) { OKButton.Dispose(); OKButton = null; } }
public static void AddModPageToModMenu(ModPage modPage) { int buttonCol = 0; foreach (EntryType entryType in modPage.entryType) { switch (entryType) { case EntryType.Header: optionsMenu.AddHeader(0, modPage.headers[0]); modPage.headers.RemoveAt(0); buttonCol = 0; break; case EntryType.Button: ModButton b = modPage.buttons[0]; OptionsMenuButton omb = optionsMenu.AddButton(buttonCol, b.label, new System.Action(() => { b.onSelectedDelegate.Invoke(); }), null, b.helpText); omb.label.text = b.initialButtonText; modPage.buttons.RemoveAt(0); if (buttonCol == 0) { buttonCol = 1; } else { buttonCol = 0; } break; case EntryType.Slider: ModSlider s = modPage.sliders[0]; OptionsMenuSlider oms = optionsMenu.AddSlider(buttonCol, s.label, s.numberFormat, s.onAdjustAction, null); oms.label.text = s.initialSliderText; modPage.sliders.RemoveAt(0); if (buttonCol == 0) { buttonCol = 1; } else { buttonCol = 0; } break; default: break; } } }
public static string GetButtonAttributesPath(ModButton button) { try { return(Path.Combine(GenFilePaths.SaveDataFolderPath, UserDataFolder, ButtonFolder, $"{button.Name.SanitizeFileName()}.xml")); } catch (ArgumentException err) { Debug.Error($"Error getting path for {button.Name}:" + $"\n\tSystem: {Environment.OSVersion} :: {RuntimeInformation.OSDescription}" + // why is this not easier? $"\n\tException: {err}"); throw err; } }
public ButtonAttributes this[ModButton button] { get { if (ButtonAttributes.TryGetValue(button, out var attributes)) { return(attributes); } var path = GetButtonAttributesPath(button); if (File.Exists(path)) { attributes = Read <ButtonAttributes>(path); attributes.Button = button; } else { attributes = new ButtonAttributes(button); } ButtonAttributes.Add(button, attributes); return(attributes); } }
public void AddButton(ModButton button) { buttons.Add(button); entryType.Add(EntryType.Button); }
public void Awake() { Debug.Log("SavedGames - Original by morris1927"); //Singleton used for hacky crap :) if (instance == null) { instance = this; } else { Destroy(this); } loadKey = Config.Wrap <int>( "Keybinds", "LoadKey", null, (int)KeyCode.F5); saveKey = Config.Wrap <int>( "Keybinds", "SaveKey", null, (int)KeyCode.F8); //Register our Commands On.RoR2.Console.Awake += (orig, self) => { Generic.CommandHelper.RegisterCommands(self); orig(self); }; //Stop the scene loading objects so we can load our own On.RoR2.SceneDirector.PopulateScene += (orig, self) => { if (!loadingScene) { orig(self); } loadingScene = false; }; //Removing targetGraphic null error On.RoR2.UI.CustomButtonTransition.DoStateTransition += (orig, self, state, instant) => { if (self.targetGraphic != null) { orig(self, state, instant); } }; //Removing targetGraphic null error On.RoR2.UI.CustomScrollbar.DoStateTransition += (orig, self, state, instant) => { if (self.targetGraphic != null) { orig(self, state, instant); } }; //Setup "Load Game" Main Menu button and loading menu On.RoR2.UI.MainMenu.MainMenuController.Start += (orig, self) => { ModButton button = new ModButton("Load Game"); Transform buttonTransform = button.gameObject.transform; buttonTransform.SetParent(self.titleMenuScreen.transform.GetChild(2).transform); buttonTransform.SetSiblingIndex(1); Color32 c = button.baseImage.color; c.a = 73; button.baseImage.color = c; button.rectTransform.localScale = Vector3.one; button.rectTransform.sizeDelta = new Vector2(320, 48); button.buttonSkinController.useRecommendedAlignment = false; button.tmpText.alignment = TextAlignmentOptions.Left; button.tmpText.rectTransform.sizeDelta = new Vector2(-24, -8); GameObject submenuPrefab = new GameObject("Load Game"); GameObject scaledSpace = new GameObject("Scaled Space"); RectTransform scaledRect = scaledSpace.AddComponent <RectTransform>(); scaledRect.anchorMin = new Vector2(0.05f, 0.05f); scaledRect.anchorMax = new Vector2(0.95f, 0.95f); scaledRect.offsetMax = new Vector2(0, 0); scaledRect.offsetMin = new Vector2(0, 0); scaledSpace.transform.SetParent(submenuPrefab.transform); ModPanel topPanel = new ModPanel(); topPanel.gameObject.transform.SetParent(scaledSpace.transform); topPanel.rectTransform.anchorMin = new Vector2(0, 1); topPanel.rectTransform.anchorMax = new Vector2(1, 1); topPanel.rectTransform.sizeDelta = new Vector2(0, 96); topPanel.rectTransform.pivot = new Vector2(0.5f, 1); ModButton backButton = new ModButton("Back"); backButton.gameObject.transform.SetParent(scaledSpace.transform); backButton.customButtonTransition.onClick.AddListener(delegate() { self.SetDesiredMenuScreen(self.titleMenuScreen); }); //ModButton loadButton = new ModButton("Load"); //loadButton.gameObject.transform.SetParent(scaledSpace.transform); //loadButton.customButtonTransition.onClick.AddListener(delegate () { }); ModSubMenu saveMenu = new ModSubMenu("Load Menu", self, submenuPrefab); submenuPrefab.transform.SetParent(saveMenu.subMenuObject.transform); ModScrollBar sb = new ModScrollBar(); sb.gameObject.transform.SetParent(scaledSpace.transform); submenuPrefab.SetActive(false); GameObject contentObject = new GameObject("Content"); contentObject.transform.SetParent(sb.viewportObject.transform); contentObject.AddComponent <CanvasRenderer>(); instance.StartCoroutine(SetupUI(delegate() { backButton.rectTransform.anchoredPosition = new Vector2(0, 0); backButton.rectTransform.anchorMin = new Vector2(0, 0); backButton.rectTransform.anchorMax = new Vector2(0, 0); backButton.rectTransform.sizeDelta = new Vector2(200, 50); backButton.rectTransform.pivot = new Vector2(0, 0); //loadButton.rectTransform.anchorMin = new Vector2(1, 0); //loadButton.rectTransform.anchorMax = new Vector2(1, 0); //loadButton.rectTransform.sizeDelta = new Vector2(200, 50); //loadButton.rectTransform.pivot = new Vector2(1, 0); RectTransform contentRect = contentObject.AddComponent <RectTransform>(); contentRect.sizeDelta = new Vector2(100, 300); sb.scrollRect.content = contentRect; sb.customScrollbar.direction = Scrollbar.Direction.BottomToTop; sb.scrollRect.movementType = ScrollRect.MovementType.Clamped; sb.rectTransform.anchorMin = new Vector2(0, 0); sb.rectTransform.anchorMax = new Vector2(1, 1); sb.rectTransform.sizeDelta = new Vector2(-60, -200); sb.rectTransform.anchoredPosition = new Vector2(0, 0); sb.gameObject.GetComponent <Image>().color = new Color32(16, 16, 16, 150); sb.gameObject.GetComponent <Image>().sprite = Generic.FindResource <Sprite>("texUIHighlightHeader"); sb.gameObject.GetComponent <Image>().color = new Color32(14, 14, 14, 150); sb.gameObject.GetComponent <Image>().type = Image.Type.Sliced; sb.customScrollbar.GetComponent <RectTransform>().anchorMin = new Vector2(0, 0); sb.customScrollbar.GetComponent <RectTransform>().anchorMax = new Vector2(1, 1); sb.customScrollbar.GetComponent <RectTransform>().sizeDelta = new Vector2(20, 0); sb.handleAreaObject.GetComponent <RectTransform>().anchorMin = new Vector2(1, 0); sb.handleAreaObject.GetComponent <RectTransform>().anchorMax = new Vector2(1, 1); sb.handleAreaObject.GetComponent <RectTransform>().sizeDelta = new Vector2(10, 0); sb.handleAreaObject.GetComponent <RectTransform>().pivot = new Vector2(0, 1); sb.handleAreaObject.GetComponent <Image>().sprite = Generic.FindResource <Sprite>("texUICleanButton"); sb.handleAreaObject.GetComponent <Image>().color = new Color32(44, 44, 44, 150); sb.handleAreaObject.GetComponent <Image>().type = Image.Type.Sliced; sb.handleObject.GetComponent <RectTransform>().sizeDelta = new Vector2(20, 0); sb.handleObject.GetComponent <Image>().sprite = Generic.FindResource <Sprite>("texUICleanButton"); sb.handleObject.GetComponent <Image>().type = Image.Type.Sliced; sb.handleOutlineObject.GetComponent <Image>().enabled = false; sb.viewportObject.GetComponent <RectTransform>().anchorMin = new Vector2(0, 0); sb.viewportObject.GetComponent <RectTransform>().anchorMax = new Vector2(1, 1); sb.viewportObject.GetComponent <RectTransform>().sizeDelta = new Vector2(0, 0); contentObject.GetComponent <RectTransform>().anchorMin = new Vector2(0, 0); contentObject.GetComponent <RectTransform>().anchorMax = new Vector2(1, 1); contentObject.GetComponent <RectTransform>().pivot = new Vector2(1, 1); contentObject.GetComponent <RectTransform>().sizeDelta = new Vector2(0, 0); VerticalLayoutGroup contentLayoutGroup = contentObject.AddComponent <VerticalLayoutGroup>(); ContentSizeFitter contentSizeFitter = contentObject.AddComponent <ContentSizeFitter>(); contentSizeFitter.verticalFit = ContentSizeFitter.FitMode.MinSize; if (Directory.Exists(directory)) { foreach (var file in Directory.GetFiles(directory)) { FileStream saveFile = File.Open(file, FileMode.Open); string fileName = saveFile.Name.Replace(directory, "") .Replace(".json", ""); ModButton fileSelectButton = new ModButton(fileName); fileSelectButton.customButtonTransition.onClick.AddListener(delegate() { RoR2.Console.instance.SubmitCmd(null, $"load {fileName}"); }); fileSelectButton.gameObject.GetComponent <LayoutElement>().minHeight = 200; fileSelectButton.gameObject.transform.SetParent(contentObject.transform); saveFile.Close(); } } })); button.customButtonTransition.onClick.AddListener(delegate() { self.SetDesiredMenuScreen(saveMenu.submenuMainMenuScreen); submenuPrefab.SetActive(true); }); orig(self); }; //Add save button to pause screen On.RoR2.UI.PauseScreenController.Awake += (orig, self) => { ModButton button = new ModButton("Save"); GameObject buttonObject = button.gameObject; buttonObject.transform.SetParent(self.mainPanel.GetChild(0)); buttonObject.transform.SetSiblingIndex(1); buttonObject.GetComponent <RectTransform>().localScale = Vector3.one; buttonObject.GetComponent <RectTransform>().sizeDelta = new Vector2(320, 48); ModInputField inputField = new ModInputField(); GameObject inputObject = inputField.gameObject; inputObject.transform.SetParent(self.mainPanel.GetChild(0)); inputObject.transform.SetSiblingIndex(1); RectTransform inputRect = inputField.rectTransform; inputRect.sizeDelta = new Vector2(320, 48); inputRect.localScale = new Vector3(1, 1, 1); CustomButtonTransition buttonEvents = buttonObject.GetComponent <CustomButtonTransition>(); buttonEvents.onClick.AddListener(() => { RoR2.Console.instance.SubmitCmd(null, $"save {inputField.tmpInputField.text}"); }); orig(self); }; }