예제 #1
0
        void CreateOptions(ScrollRect parent, ModInfo modinfo)
        {
            for (int i = 0; i < modinfo.settings.Count; i++)
            {
                var option = UIUtility.CreatePanel("Option" + i, parent.content.transform);
                option.color = i % 2 != 0 ? listColor1 : listColor2;
                option.gameObject.AddComponent <LayoutElement>().preferredHeight = elementSize;

                var setting = modinfo.settings[i];
                switch (setting.Type)
                {
                case "hotkey":
                {
                    var text = UIUtility.CreateText(setting.Setting, option.transform, setting.Text);
                    text.alignment = TextAnchor.MiddleCenter;
                    text.transform.SetRect(0.01f, 0f, 0.55f, 1f);
                    text.resizeTextMinSize = 10;
                    text.resizeTextMaxSize = 18;
                    text.color             = textColor;

                    var button = UIUtility.CreateButton(setting.Setting, option.transform, ModPrefs.GetString(modinfo.IniName, setting.Setting, "None"));
                    button.transform.SetRect(0.66f, 0f, 0.86f, 1f);
                    var listener = button.gameObject.AddComponent <KeyListener>();
                    listener.RegisterKeyDownCallback((x, y) =>
                        {
                            button.GetComponentInChildren <Text>().text = x.ToString();
                            changes[modinfo.IniName][setting.Setting]   = x.ToString();
                        });

                    var reset = UIUtility.CreateButton("ResetButton", option.transform, "");
                    reset.transform.SetRect(0.89f, 0.5f, 0.89f, 0.5f, -buttonSize, -buttonSize, buttonSize, buttonSize);
                    AddCloseSymbol(reset);
                    reset.onClick.AddListener(() =>
                        {
                            button.GetComponentInChildren <Text>().text = "None";
                            changes[modinfo.IniName][setting.Setting]   = "None";
                        });
                    break;
                }

                case "toggle":
                {
                    var text = UIUtility.CreateText(setting.Setting, option.transform, setting.Text);
                    text.alignment = TextAnchor.MiddleCenter;
                    text.transform.SetRect(0.01f, 0f, 0.55f, 0.94f);
                    text.resizeTextMinSize = 10;
                    text.resizeTextMaxSize = 18;
                    text.color             = textColor;

                    var container = UIUtility.CreateNewUIObject(option.transform);
                    var toggle    = UIUtility.AddCheckboxToObject(container);
                    toggle.transform.SetRect(0.75f, 0.5f, 0.75f, 0.5f, -buttonSize, -buttonSize, buttonSize, buttonSize);
                    toggle.isOn = ModPrefs.GetBool(modinfo.IniName, setting.Setting);
                    toggle.onValueChanged.AddListener((x) => changes[modinfo.IniName][setting.Setting] = Convert.ToInt32(x).ToString());
                    break;
                }

                case "slider":
                {
                    bool wholenumbers = (bool)setting.Int;

                    var text = UIUtility.CreateText(setting.Setting, option.transform, setting.Text);
                    text.alignment = TextAnchor.MiddleCenter;
                    text.transform.SetRect(0.01f, 0f, 0.55f, 0.94f);
                    text.resizeTextMinSize = 10;
                    text.resizeTextMaxSize = 18;
                    text.color             = textColor;

                    var field = UIUtility.CreateInputField(setting.Setting, option.transform, "");
                    field.transform.SetRect(0.9f, 0f, 1f, 1f);
                    field.interactable = false;
                    float value = ModPrefs.GetFloat(modinfo.IniName, setting.Setting);
                    field.text = value.ToString("F" + (wholenumbers ? "0" : ""));
                    field.textComponent.alignment = TextAnchor.MiddleCenter;
                    var colors = field.colors;
                    colors.disabledColor = sliderFieldColor;
                    field.colors         = colors;

                    var slider = UIUtility.CreateSlider(setting.Setting, option.transform);
                    slider.transform.SetRect(0.58f, 0.1f, 0.89f, 0.9f);
                    slider.minValue     = (float)setting.Min;
                    slider.maxValue     = (float)setting.Max;
                    slider.wholeNumbers = wholenumbers;
                    slider.value        = value;
                    slider.onValueChanged.AddListener((x) =>
                        {
                            field.text = x.ToString("F" + (wholenumbers ? "0" : ""));
                            changes[modinfo.IniName][setting.Setting] = x.ToString();
                        });
                    break;
                }

                case "title":
                {
                    var separator = UIUtility.CreatePanel("Separator", option.transform);
                    separator.transform.SetRect(0f, 0f, 1f, 1f);
                    separator.color = separatorColor;

                    var text = UIUtility.CreateText("Title", option.transform, setting.Text);
                    text.alignment = TextAnchor.MiddleCenter;
                    text.fontStyle = FontStyle.Bold;
                    text.transform.SetRect(0f, 0f, 1f, 1f);
                    text.resizeTextMinSize = 10;
                    text.resizeTextMaxSize = 18;
                    break;
                }

                case "fullinputfield":
                {
                    var input = UIUtility.CreateInputField(setting.Setting, option.transform, setting.Setting);
                    input.transform.SetRect(0f, 0f, 1f, 1f);
                    input.text = ModPrefs.GetString(modinfo.IniName, setting.Setting);
                    input.textComponent.alignment = TextAnchor.MiddleCenter;
                    input.onValueChanged.AddListener((x) => changes[modinfo.IniName][setting.Setting] = x);
                    break;
                }

                case "inputfield":
                {
                    var text = UIUtility.CreateText(setting.Setting, option.transform, setting.Text);
                    text.alignment = TextAnchor.MiddleCenter;
                    text.transform.SetRect(0.01f, 0f, 0.55f, 1f);
                    text.resizeTextMinSize = 10;
                    text.resizeTextMaxSize = 18;
                    text.color             = textColor;

                    var input = UIUtility.CreateInputField(setting.Setting, option.transform, setting.Setting);
                    input.transform.SetRect(0.56f, 0f, 1f, 1f);
                    input.text = ModPrefs.GetString(modinfo.IniName, setting.Setting);
                    input.textComponent.alignment = TextAnchor.MiddleCenter;
                    input.onValueChanged.AddListener((x) => changes[modinfo.IniName][setting.Setting] = x);
                    break;
                }
                }
            }
        }