示例#1
0
                public Slider(string label, float x, float y, float min, float max, float initial, Transform parent, Action <float> OnChange)
                {
                    QuickMenu qm = QuickMenu.prop_QuickMenu_0;

                    this.OnChange = OnChange;

                    GameObject slider = UnityEngine.Object.Instantiate(BaseSlider, parent).gameObject;

                    slider.transform.localScale    = new Vector3(1.5f, 1.5f, 1.5f);
                    slider.transform.localPosition = new Vector3(ButtonSize * (x - 0.25f), ButtonSize * (y + 2.5f), 0.01f);
                    slider.transform.localRotation = Quaternion.Euler(0, 0, 0);

                    Action <float> OnValueChanged = new Action <float>(value => {
                        _SetValue(value);
                    });

                    uiSlider                = slider.GetComponentInChildren <UnityEngine.UI.Slider>();
                    uiSlider.minValue       = min;
                    uiSlider.maxValue       = max;
                    uiSlider.onValueChanged = new UnityEngine.UI.Slider.SliderEvent();
                    uiSlider.onValueChanged.AddListener(OnValueChanged);

                    slider.GetComponent <Image>().color = Colors.SliderInactive;
                    slider.transform.Find("Fill Area/Fill").GetComponent <Image>().color = Colors.SliderActive;

                    GameObject textGO = new GameObject("Text");

                    textGO.transform.SetParent(parent.transform, false);

                    Font font = Resources.GetBuiltinResource <Font>("Arial.ttf");

                    Text textText = textGO.AddComponent <Text>();

                    textText.supportRichText          = true;
                    textText.text                     = label;
                    textText.font                     = font;
                    textText.fontSize                 = 64;
                    textText.color                    = Colors.SliderText;
                    textText.alignment                = TextAnchor.MiddleCenter;
                    textText.transform.localPosition  = slider.transform.localPosition;
                    textText.transform.localPosition += new Vector3(0, 80, 0);
                    textText.GetComponent <RectTransform>().sizeDelta = new Vector2(textText.fontSize * label.Length, 100f);
                    textText.fontStyle = FontStyle.Bold;

                    UnityEngine.UI.Button textButton = textGO.AddComponent <UnityEngine.UI.Button>();
                    textButton.onClick.AddListener(new Action(() => {
                        HUDKeypad($"Set {label}", "Set", "Enter value...", new Action <string>(raw => {
                            if (float.TryParse(raw, out float val))
                            {
                                // this is not the best solution by far but given the amount of times
                                // on value changed is called its probably better than an if statement
                                uiSlider.onValueChanged.RemoveAllListeners();
                                SetValue(val);
                                uiSlider.onValueChanged.AddListener(OnValueChanged);
                            }
                        }));
                    }));

                    textGO.GetComponent <RectTransform>();

                    valueText           = slider.transform.Find("Fill Area/Label").GetComponent <Text>();
                    valueText.color     = Colors.SliderValueText;
                    valueText.fontStyle = FontStyle.Bold;

                    uiSlider.Set(initial, true);

                    self = slider.gameObject;
                }