Esempio n. 1
0
        /// <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]));
        }
Esempio n. 2
0
        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);
                }
            }
        }
Esempio n. 4
0
        /// <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);
                }
            }
        }