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); }; }
public ModButton(string text) { gameObject = new GameObject("Button"); GameObject hoverOutline = new GameObject("Hover Outline"); GameObject baseOutline = new GameObject("Base Outline"); GameObject textObject = new GameObject("Text"); rectTransform = gameObject.AddComponent <RectTransform>(); rectTransform.localScale = Vector3.one; RectTransform hoverRect = hoverOutline.AddComponent <RectTransform>(); RectTransform baseRect = baseOutline.AddComponent <RectTransform>(); RectTransform textRect = textObject.AddComponent <RectTransform>(); MPEventSystemLocator systemLocator = gameObject.AddComponent <MPEventSystemLocator>(); LayoutElement layoutElement = gameObject.AddComponent <LayoutElement>(); customButtonTransition = gameObject.AddComponent <CustomButtonTransition>(); buttonSkinController = gameObject.AddComponent <ButtonSkinController>(); image = gameObject.AddComponent <Image>(); customButtonTransition.targetGraphic = image; ColorBlock c = customButtonTransition.colors; hoverImage = hoverOutline.AddComponent <Image>(); baseImage = baseOutline.AddComponent <Image>(); hoverOutline.transform.SetParent(gameObject.transform); baseOutline.transform.SetParent(gameObject.transform); textObject.transform.SetParent(gameObject.transform); hoverRect.anchorMin = new Vector2(0, 0); hoverRect.anchorMax = new Vector2(1, 1); hoverRect.sizeDelta = new Vector2(0, 0); baseRect.anchorMin = new Vector2(0, 0); baseRect.anchorMax = new Vector2(1, 1); baseRect.sizeDelta = new Vector2(0, 0); tmpText = textObject.AddComponent <HGTextMeshProUGUI>(); tmpText.text = text; textRect.anchorMin = new Vector2(0, 0); textRect.anchorMax = new Vector2(1, 1); textRect.sizeDelta = new Vector2(0, 0); image.sprite = Generic.FindResource <Sprite>("texUICleanButton"); hoverImage.sprite = Generic.FindResource <Sprite>("texUIHighlightBoxOutline"); baseImage.sprite = Generic.FindResource <Sprite>("texUIOutlineOnly"); image.type = Image.Type.Sliced; hoverImage.type = Image.Type.Sliced; baseImage.type = Image.Type.Sliced; customButtonTransition.imageOnHover = hoverImage; customButtonTransition.imageOnInteractable = baseImage; customButtonTransition.scaleButtonOnHover = false; customButtonTransition.showImageOnHover = true; customButtonTransition.allowAllEventSystems = true; customButtonTransition.pointerClickOnly = true; buttonSkinController.skinData = Generic.FindResource <UISkinData>("skinMenu"); c.normalColor = new Color32(83, 102, 120, 255); c.highlightedColor = new Color32(251, 255, 176, 187); c.pressedColor = new Color32(188, 192, 113, 251); c.disabledColor = new Color32(64, 51, 51, 182); customButtonTransition.colors = c; }