/// <summary> /// Get color from user settings or, as fallback, from default settings. /// </summary> /// <param name="section">Name of section inside .ini</param> /// <param name="name">Name of key inside .ini</param> public Color GetColor(string section, string name) { string colorString = GetValue(section, name); int hexColor = 0; if (int.TryParse(colorString, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out hexColor)) { return(ModSettingsReader.ColorFromString(colorString)); } Debug.LogError(colorString + " from " + Mod.FileName + ".ini is not a valid color. Using default color."); return(ModSettingsReader.ColorFromString(defaultSettings[section][name])); }
private void AddColorPicker(string hexColor, ModSettingsKey key = null) { Button colorPicker = new Button() { Position = new Vector2(x + 95, y), AutoSize = AutoSizeModes.None, Size = new Vector2(40, 6), }; colorPicker.Outline.Enabled = true; if (!ModSettingsReader.IsHexColor(hexColor)) { hexColor = key != null ? key.color.HexColor : "FFFFFFFF"; } colorPicker.BackgroundColor = ModSettingsReader.ColorFromString(hexColor); colorPicker.OnMouseClick += ColorPicker_OnMouseClick; modColorPickers.Add(colorPicker); currentPanel.Components.Add(colorPicker); }
/// <summary> /// Load settings from IniData. /// This will be read from the ini file on disk the first time. /// </summary> private void LoadSettings() { // Read file if (data == null) { data = parser.ReadFile(path); ModSettingsReader.UpdateSettings(ref data, defaultSettings, Mod); config = ModSettingsReader.GetConfig(Mod); } // Read settings foreach (SectionData section in data.Sections.Where(x => x.SectionName != ModSettingsReader.internalSection)) { // Section label TextLabel textLabel = new TextLabel(); textLabel.Text = section.SectionName; textLabel.TextColor = sectionTitleColor; textLabel.Position = new Vector2(x, y); textLabel.HorizontalAlignment = HorizontalAlignment.None; currentPanel.Components.Add(textLabel); MovePosition(spacing + 4); List <string> comments = section.Comments; int comment = 0; foreach (KeyData key in section.Keys) { // Setting label TextLabel settingName = new TextLabel(); settingName.Text = key.KeyName; settingName.Position = new Vector2(x, y); settingName.HorizontalAlignment = HorizontalAlignment.None; if (comment < comments.Count) { settingName.ToolTip = defaultToolTip; settingName.ToolTipText = comments[comment]; comment++; } currentPanel.Components.Add(settingName); // Setting field ModSettingsKey configKey; if (config && config.Key(section.SectionName, key.KeyName, out configKey)) { settingName.ToolTipText = configKey.description; // Use config file switch (configKey.type) { case ModSettingsKey.KeyType.Toggle: AddCheckBox(key.Value == "True"); break; case ModSettingsKey.KeyType.Slider: var slider = configKey.slider; int startValue; if (!int.TryParse(key.Value, out startValue)) { startValue = 0; } AddSlider(slider.min, slider.max, startValue, key.KeyName); break; case ModSettingsKey.KeyType.FloatSlider: var floatSlider = configKey.floatSlider; float floatStartValue; if (!float.TryParse(key.Value, out floatStartValue)) { floatStartValue = 0; } AddSlider(floatSlider.min, floatSlider.max, floatStartValue, key.KeyName); break; case ModSettingsKey.KeyType.Tuple: case ModSettingsKey.KeyType.FloatTuple: int index = key.Value.IndexOf(ModSettingsReader.tupleDelimiterChar); var first = GetTextbox(95, 19.6f, key.Value.Substring(0, index)); var second = GetTextbox(116, 19.6f, key.Value.Substring(index + ModSettingsReader.tupleDelimiterChar.Length)); modTuples.Add(new Tuple <TextBox, TextBox>(first, second)); break; case ModSettingsKey.KeyType.Text: case ModSettingsKey.KeyType.MultipleChoice: //TODO TextBox textBox = GetTextbox(95, 40, key.Value); modTextBoxes.Add(textBox); break; case ModSettingsKey.KeyType.Color: TextBox colorBox = GetTextbox(95, 40, key.Value); modTextBoxes.Add(colorBox); int hexColor; if (colorBox.DefaultText.Length != 8 || !int.TryParse(colorBox.DefaultText, System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out hexColor)) { colorBox.DefaultText = "FFFFFFFF"; } // Use box background as a preview of the color Color32 color = ModSettingsReader.ColorFromString(colorBox.DefaultText); colorBox.BackgroundColor = color; colorBox.ToolTip = defaultToolTip; colorBox.ToolTipText = color.ToString(); break; } } else { // Legacy support if (key.Value == "True") { AddCheckBox(true); } else if (key.Value == "False") { AddCheckBox(false); } else if (key.Value.Contains(ModSettingsReader.tupleDelimiterChar)) // Tuple { int index = key.Value.IndexOf(ModSettingsReader.tupleDelimiterChar); var first = GetTextbox(95, 19.6f, key.Value.Substring(0, index)); var second = GetTextbox(116, 19.6f, key.Value.Substring(index + ModSettingsReader.tupleDelimiterChar.Length)); modTuples.Add(new Tuple <TextBox, TextBox>(first, second)); } else { TextBox textBox = GetTextbox(95, 40, key.Value); modTextBoxes.Add(textBox); // Color if (textBox.DefaultText.Length == 8) { // Check if is a hex number or just a string with lenght eight int hexColor; if (int.TryParse(textBox.DefaultText, System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out hexColor)) { // Use box background as a preview of the color Color32 color = ModSettingsReader.ColorFromString(textBox.DefaultText); textBox.BackgroundColor = color; textBox.ToolTip = defaultToolTip; textBox.ToolTipText = color.ToString(); } } } } MovePosition(spacing); } } }
/// <summary> /// Load settings from IniData. /// This will be read from the ini file on disk the first time. /// </summary> private void LoadSettings() { // Read file if (data == null) { data = parser.ReadFile(path); ModSettingsReader.UpdateSettings(ref data, defaultSettings, Mod); } // Read settings int numberOfElements = 0; foreach (SectionData section in data.Sections.Where(x => x.SectionName != ModSettingsReader.internalSection)) { // Section label y += spacing; TextLabel textLabel = new TextLabel(); textLabel.Text = section.SectionName; textLabel.TextColor = sectionTitleColor; textLabel.Position = new Vector2(x, y); textLabel.HorizontalAlignment = HorizontalAlignment.None; currentPanel.Components.Add(textLabel); UpdateItemsCount(ref numberOfElements); List <string> comments = section.Comments; int comment = 0; foreach (KeyData key in section.Keys) { y += spacing; // Setting label TextLabel settingName = new TextLabel(); settingName.Text = key.KeyName; settingName.Position = new Vector2(x, y); settingName.HorizontalAlignment = HorizontalAlignment.None; if (comment < comments.Count) { settingName.ToolTip = defaultToolTip; settingName.ToolTipText = comments[comment]; comment++; } currentPanel.Components.Add(settingName); // Setting field if (key.Value == "True") { AddCheckBox(true); } else if (key.Value == "False") { AddCheckBox(false); } else if (key.Value.Contains(ModSettingsReader.tupleDelimiterChar)) // Tuple { int index = key.Value.IndexOf(ModSettingsReader.tupleDelimiterChar); var first = GetTextbox(95, 19.6f, key.Value.Substring(0, index)); var second = GetTextbox(116, 19.6f, key.Value.Substring(index + ModSettingsReader.tupleDelimiterChar.Length)); modTuples.Add(new Tuple <TextBox, TextBox>(first, second)); } else { TextBox textBox = GetTextbox(95, 40, key.Value); modTextBoxes.Add(textBox); // Color if (textBox.DefaultText.Length == 8) { // Check if is a hex number or just a string with lenght eight int hexColor; if (int.TryParse(textBox.DefaultText, System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, out hexColor)) { // Use box background as a preview of the color Color32 color = ModSettingsReader.ColorFromString(textBox.DefaultText); textBox.BackgroundColor = color; textBox.ToolTip = defaultToolTip; textBox.ToolTipText = color.ToString(); } } } UpdateItemsCount(ref numberOfElements); } } }