Exemple #1
0
 private void UpdateModButton()
 {
     if (ModButton != null)
     {
         ModButton.SetText(_Mod.PlusFormat());
     }
 }
Exemple #2
0
        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;
            }
        }
Exemple #3
0
        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);
     }
 }
Exemple #6
0
 public void AddButton(ModButton button)
 {
     buttons.Add(button);
     entryType.Add(EntryType.Button);
 }
Exemple #7
0
        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);
            };
        }