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; } } } }