Пример #1
0
        public void EnableButton(Rect rect)
        {
            if (VehicleMod.selectedDef is null)
            {
                Log.Error($"SelectedDef is null while trying to create Enable button for VehicleDef.");
                return;
            }
            var gameFont = Text.Font;

            Text.Font = GameFont.Medium;
            FieldInfo     enabledField      = AccessTools.Field(typeof(VehicleDef), nameof(VehicleDef.enabled));
            SaveableField saveableField     = new SaveableField(VehicleMod.selectedDef, enabledField);
            bool          enabled           = (bool)fieldSettings[VehicleMod.selectedDef.defName][saveableField].First;
            string        text              = enabled ? "VehicleEnabled".Translate() : "VehicleDisabled".Translate();
            Vector2       size              = Text.CalcSize(text);
            Color         textColor         = enabled ? Color.green : Color.red;
            Rect          enabledButtonRect = new Rect(rect.x, rect.y, size.x, size.y);

            TooltipHandler.TipRegion(enabledButtonRect, "VehicleEnableButtonTooltip".Translate());
            if (UIElements.ClickableLabel(enabledButtonRect, text, Color.yellow, textColor, GameFont.Medium))
            {
                fieldSettings[VehicleMod.selectedDef.defName][saveableField] = new SavedField <object>(!enabled);
            }
            Text.Font = gameFont;
        }
Пример #2
0
        public override void DrawStatLister(VehicleDef def, Listing_Settings lister, SaveableField field, float value)
        {
            FloatRange?range = settingListerRange;

            if (range is null)
            {
                range = new FloatRange(-value, value);
            }
            lister.SliderLabeled(def, field, "VehicleMaxArmor".Translate(), "VehicleMaxArmorTooltip".Translate(), string.Empty, string.Empty, value + range.Value.min, value + range.Value.max, 1);
        }
Пример #3
0
        public override void DrawStatLister(VehicleDef def, Listing_Settings lister, SaveableField field, float value)
        {
            FloatRange?range = settingListerRange;

            if (range is null)
            {
                range = new FloatRange(-value, value);
            }
            lister.FloatBox(def, field, "VehicleCargoCapacity".Translate(), "VehicleCargoCapacityTooltip".Translate(), string.Empty, value + range.Value.min, value + range.Value.max);
        }
Пример #4
0
 public object GetSettingsValue(VehicleDef def, SaveableField field)
 {
     try
     {
         return(settings switch
         {
             SettingsPage.Vehicles => VehicleMod.settings.vehicles.fieldSettings[def.defName][field].First,
             SettingsPage.Upgrades => VehicleMod.settings.upgrades.upgradeSettings[def.defName][field].First,
             _ => throw new NotSupportedException($"Cannot use Listing_Settings with settings set to {settings}")
         });
     }
 public static void IterateTypeFields(VehicleDef def, Type type, object obj, ref Dictionary <SaveableField, SavedField <object> > currentDict)
 {
     if (VehicleMod.cachedFields.TryGetValue(type, out var fields))
     {
         var dict = VehicleMod.settings.vehicles.fieldSettings[def.defName];
         foreach (FieldInfo field in fields)
         {
             if (field.TryGetAttribute <PostToSettingsAttribute>(out var settings) && settings.ParentHolder)
             {
                 object value = field.GetValue(obj);
                 if (field.FieldType.IsGenericType)
                 {
                     MethodInfo method = field.DeclaringType.GetMethod("ResolvePostToSettings", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
                     if (method != null)
                     {
                         object[] arguments = new object[] { def, currentDict };
                         method.Invoke(obj, arguments);
                         currentDict = (Dictionary <SaveableField, SavedField <object> >)arguments[1];
                     }
                     else
                     {
                         SmashLog.Error($"Unable to generate customizable setting <field>{field.Name}</field> for <text>{def.defName}</text>. Fields of type <type>Dictionary<T></type> must implement ResolvePostToSettings method to be manually resolved.");
                     }
                 }
                 else
                 {
                     IterateTypeFields(def, field.FieldType, value, ref currentDict);
                 }
             }
             else
             {
                 SaveableField saveField = new SaveableField(def, field);
                 if (!dict.TryGetValue(saveField, out var _))
                 {
                     dict.Add(saveField, new SavedField <object>(field.GetValue(obj)));
                 }
             }
         }
Пример #6
0
 public static bool Equals(SaveableField source, SaveableField target)
 {
     return(source.GetHashCode() == target.GetHashCode());
 }
Пример #7
0
        /// <summary>
        /// Draws UI element for lister in ModSettings
        /// </summary>
        /// <param name="lister"></param>
        /// <param name="def"></param>
        /// <param name="field"></param>
        public void DrawLister(Listing_Settings lister, VehicleDef def, FieldInfo field)
        {
            string        label           = Translate ? Label.Translate().ToString() : Label;
            string        tooltip         = Translate ? Tooltip.Translate().ToString() : Tooltip;
            SaveableField saveable        = new SaveableField(def, field);
            string        disabledTooltip = string.Empty;

            if (VehicleType != VehicleType.Undefined && VehicleType != def.vehicleType)
            {
                disabledTooltip = "VehicleSaveableFieldDisabledTooltip".Translate();
            }
            bool locked = false;

            if (ParsingHelper.lockedFields.TryGetValue(def.defName, out HashSet <FieldInfo> lockedFields))
            {
                if (lockedFields.Contains(field))
                {
                    locked          = true;
                    disabledTooltip = "VehicleSaveableFieldLockedTooltip".Translate();
                }
            }
            if (field.HasAttribute <DisableSettingAttribute>())
            {
                disabledTooltip = "VehicleDebugDisabledTooltip".Translate();
            }

            switch (UISettingsType)
            {
            case UISettingsType.None:
                return;

            case UISettingsType.Checkbox:
                lister.CheckboxLabeled(def, saveable, label, tooltip, disabledTooltip, locked);
                break;

            case UISettingsType.IntegerBox:
            {
                if (field.TryGetAttribute <NumericBoxValuesAttribute>(out var inputBox))
                {
                    lister.IntegerBox(def, saveable, label, tooltip, disabledTooltip, Mathf.RoundToInt(inputBox.MinValue), Mathf.RoundToInt(inputBox.MaxValue));
                }
                else
                {
                    lister.IntegerBox(def, saveable, label, tooltip, disabledTooltip, 0, int.MaxValue);
                }
                break;
            }

            case UISettingsType.FloatBox:
            {
                if (field.TryGetAttribute <NumericBoxValuesAttribute>(out var inputBox))
                {
                    lister.FloatBox(def, saveable, label, tooltip, disabledTooltip, inputBox.MinValue, inputBox.MaxValue);
                }
                else
                {
                    lister.FloatBox(def, saveable, label, tooltip, disabledTooltip, 0, float.MaxValue);
                }
                break;
            }

            case UISettingsType.ToggleLabel:
                break;

            case UISettingsType.SliderEnum:
                lister.EnumSliderLabeled(def, saveable, label, tooltip, disabledTooltip, field.FieldType, Translate);
                break;

            case UISettingsType.SliderInt:
            {
                if (field.TryGetAttribute <SliderValuesAttribute>(out var slider))
                {
                    lister.SliderLabeled(def, saveable, label, tooltip, disabledTooltip, slider.EndSymbol, (int)slider.MinValue, (int)slider.MaxValue, (int)slider.EndValue, slider.MaxValueDisplay, slider.MinValueDisplay, Translate);
                }
                else
                {
                    SmashLog.WarningOnce($"Slider declared for SaveableField {field.Name} in {field.DeclaringType} with no SliderValues attribute. Slider will use default values instead.", field.GetHashCode());
                    lister.SliderLabeled(def, saveable, label, tooltip, disabledTooltip, string.Empty, 0, 100, -1, string.Empty, string.Empty, Translate);
                }
            }
            break;

            case UISettingsType.SliderFloat:
            {
                if (field.TryGetAttribute <SliderValuesAttribute>(out var slider))
                {
                    lister.SliderLabeled(def, saveable, label, tooltip, disabledTooltip, slider.EndSymbol, slider.MinValue, slider.MaxValue, slider.RoundDecimalPlaces, slider.EndValue, slider.Increment, slider.MaxValueDisplay, Translate);
                }
                else
                {
                    SmashLog.WarningOnce($"Slider declared for SaveableField {field.Name} in {field.DeclaringType} with no SliderValues attribute. Slider will use default values instead.", field.GetHashCode());
                    lister.SliderLabeled(def, saveable, label, tooltip, disabledTooltip, string.Empty, 0f, 100f, 0, -1, -1, string.Empty, Translate);
                }
            }
            break;

            case UISettingsType.SliderPercent:
            {
                if (field.TryGetAttribute <SliderValuesAttribute>(out var slider))
                {
                    lister.SliderPercentLabeled(def, saveable, label, tooltip, disabledTooltip, slider.EndSymbol, slider.MinValue, slider.MaxValue, slider.RoundDecimalPlaces, slider.EndValue, slider.MaxValueDisplay, Translate);
                }
                else
                {
                    SmashLog.WarningOnce($"Slider declared for SaveableField {field.Name} in {field.DeclaringType} with no SliderValues attribute. Slider will use default values instead.", field.GetHashCode());
                    lister.SliderPercentLabeled(def, saveable, label, tooltip, disabledTooltip, string.Empty, 0f, 100f, 0, -1, string.Empty, Translate);
                }
            }
            break;

            default:
                Log.ErrorOnce($"{VehicleHarmony.LogLabel} {UISettingsType} has not yet been implemented for PostToSettings.DrawLister. Please notify mod author.", UISettingsType.ToString().GetHashCode());
                break;
            }
        }
Пример #8
0
 public override void DrawStatLister(VehicleDef def, Listing_Settings lister, SaveableField field, float value)
 {
     throw new NotImplementedException();
 }
 public override void DrawStatLister(VehicleDef def, Listing_Settings lister, SaveableField field, float value)
 {
 }
Пример #10
0
 public abstract void DrawStatLister(VehicleDef def, Listing_Settings lister, SaveableField field, float value);