Ejemplo n.º 1
0
 /// <summary>
 /// Adds a <see cref="ModChoiceOption"/> to the <see cref="ModOptions"/> menu.
 /// </summary>
 /// <param name="id"></param>
 /// <param name="label"></param>
 /// <param name="memberInfoMetadata">The metadata of the corresponding member.</param>
 /// <param name="choiceAttribute">The defined or generated <see cref="ChoiceAttribute"/> of the member.</param>
 private void BuildModChoiceOption(string id, string label,
                                   MemberInfoMetadata <T> memberInfoMetadata, ChoiceAttribute choiceAttribute)
 {
     if (memberInfoMetadata.ValueType.IsEnum && (choiceAttribute.Options == null || !choiceAttribute.Options.Any()))
     {
         // Enum-based choice where the values are parsed from the enum type
         string[] options = Enum.GetNames(memberInfoMetadata.ValueType);
         string   value   = memberInfoMetadata.GetValue(ConfigFileMetadata.Config).ToString();
         AddChoiceOption(id, label, options, value);
     }
     else if (memberInfoMetadata.ValueType.IsEnum)
     {
         // Enum-based choice where the values are defined as custom strings
         string[] options = choiceAttribute.Options;
         string   name    = memberInfoMetadata.GetValue(ConfigFileMetadata.Config).ToString();
         int      index   = Math.Max(Array.IndexOf(Enum.GetNames(memberInfoMetadata.ValueType), name), 0);
         AddChoiceOption(id, label, options, index);
     }
     else if (memberInfoMetadata.ValueType == typeof(string))
     {
         // string-based choice value
         string[] options = choiceAttribute.Options;
         string   value   = memberInfoMetadata.GetValue <string>(ConfigFileMetadata.Config);
         AddChoiceOption(id, label, options, value);
     }
     else if (memberInfoMetadata.ValueType == typeof(int))
     {
         // index-based choice value
         string[] options = choiceAttribute.Options;
         int      index   = memberInfoMetadata.GetValue <int>(ConfigFileMetadata.Config);
         AddChoiceOption(id, label, options, index);
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Adds a <see cref="ModSliderOption"/> to the <see cref="ModOptions"/> menu.
        /// </summary>
        /// <param name="id"></param>
        /// <param name="label"></param>
        /// <param name="memberInfoMetadata">The metadata of the corresponding member.</param>
        /// <param name="sliderAttribute">The defined or generated <see cref="SliderAttribute"/> of the member.</param>
        private void BuildModSliderOption(string id, string label,
                                          MemberInfoMetadata <T> memberInfoMetadata, SliderAttribute sliderAttribute)
        {
            float value = Convert.ToSingle(memberInfoMetadata.GetValue(ConfigFileMetadata.Config));

            float step = sliderAttribute.Step;

            if (memberInfoMetadata.ValueType == typeof(int))
            {
                step = Mathf.CeilToInt(step);
            }

            AddSliderOption(id, label, sliderAttribute.Min, sliderAttribute.Max,
                            Convert.ToSingle(value), sliderAttribute.DefaultValue,
                            sliderAttribute.Format, step);
        }
        /// <summary>
        /// Invokes the relevant method(s) specified with the <see cref="OnChangeAttribute"/>(s)
        /// and passes parameters when a value is changed when loaded from disk.
        /// </summary>
        /// <param name="modOptionMetadata">The metadata for the mod option.</param>
        /// <param name="sender">The sender of the event.</param>
        private void InvokeOnChangeEvents(ModOptionAttributeMetadata <T> modOptionMetadata, object sender)
        {
            string id = modOptionMetadata.ModOptionAttribute.Id;
            MemberInfoMetadata <T> memberInfoMetadata = modOptionMetadata.MemberInfoMetadata;

            switch (modOptionMetadata.ModOptionAttribute)
            {
            case ChoiceAttribute choiceAttribute when memberInfoMetadata.ValueType.IsEnum &&
                (choiceAttribute.Options == null || !choiceAttribute.Options.Any()):
                // Enum-based choice where the values are parsed from the enum type
            {
                string[] options   = Enum.GetNames(memberInfoMetadata.ValueType);
                string   value     = memberInfoMetadata.GetValue(Config).ToString();
                var      eventArgs = new ChoiceChangedEventArgs(id, Array.IndexOf(options, value), value);
                InvokeOnChangeEvents(modOptionMetadata, sender, eventArgs);
            }
            break;

            case ChoiceAttribute _ when memberInfoMetadata.ValueType.IsEnum:
                // Enum-based choice where the values are defined as custom strings
            {
                string value     = memberInfoMetadata.GetValue(Config).ToString();
                int    index     = Math.Max(Array.IndexOf(Enum.GetValues(memberInfoMetadata.ValueType), value), 0);
                var    eventArgs = new ChoiceChangedEventArgs(id, index, value);
                InvokeOnChangeEvents(modOptionMetadata, sender, eventArgs);
            }
            break;

            case ChoiceAttribute choiceAttribute when memberInfoMetadata.ValueType == typeof(string):
                // string-based choice value
            {
                string[] options   = choiceAttribute.Options;
                string   value     = memberInfoMetadata.GetValue <string>(Config);
                var      eventArgs = new ChoiceChangedEventArgs(id, Array.IndexOf(options, value), value);
                InvokeOnChangeEvents(modOptionMetadata, sender, eventArgs);
            }
            break;

            case ChoiceAttribute choiceAttribute when memberInfoMetadata.ValueType == typeof(int):
                // index-based choice value
            {
                string[] options   = choiceAttribute.Options;
                int      index     = memberInfoMetadata.GetValue <int>(Config);
                var      eventArgs = new ChoiceChangedEventArgs(id, index, options[index]);
                InvokeOnChangeEvents(modOptionMetadata, sender, eventArgs);
            }
            break;

            case KeybindAttribute _:
            {
                var eventArgs = new KeybindChangedEventArgs(id, memberInfoMetadata.GetValue <KeyCode>(Config));
                InvokeOnChangeEvents(modOptionMetadata, sender, eventArgs);
            }
            break;

            case SliderAttribute _:
            {
                var eventArgs = new SliderChangedEventArgs(id, Convert.ToSingle(memberInfoMetadata.GetValue(Config)));
                InvokeOnChangeEvents(modOptionMetadata, sender, eventArgs);
            }
            break;

            case ToggleAttribute _:
            {
                var eventArgs = new ToggleChangedEventArgs(id, memberInfoMetadata.GetValue <bool>(Config));
                InvokeOnChangeEvents(modOptionMetadata, sender, eventArgs);
            }
            break;
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Adds a <see cref="ModToggleOption"/> to the <see cref="ModOptions"/> menu.
        /// </summary>
        /// <param name="id"></param>
        /// <param name="label"></param>
        /// <param name="memberInfoMetadata">The metadata of the corresponding member.</param>
        private void BuildModToggleOption(string id, string label, MemberInfoMetadata <T> memberInfoMetadata)
        {
            bool value = memberInfoMetadata.GetValue <bool>(ConfigFileMetadata.Config);

            AddToggleOption(id, label, value);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Adds a <see cref="ModKeybindOption"/> to the <see cref="ModOptions"/> menu.
        /// </summary>
        /// <param name="id"></param>
        /// <param name="label"></param>
        /// <param name="memberInfoMetadata">The metadata of the corresponding member.</param>
        private void BuildModKeybindOption(string id, string label, MemberInfoMetadata <T> memberInfoMetadata)
        {
            KeyCode value = memberInfoMetadata.GetValue <KeyCode>(ConfigFileMetadata.Config);

            AddKeybindOption(id, label, GameInput.Device.Keyboard, value);
        }