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); }
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); }
public Dialog_NodeSettings(VehicleDef def, UpgradeNode node, Vector2 origin) { VehicleDef = def; UpgradeNode = node; closeOnClickedOutside = true; closeOnAnyClickOutside = true; closeOnCancel = true; doCloseX = true; float width = 400; int rows = Mathf.Max(1, Mathf.FloorToInt(UpgradeNode.ListerCount / 2f)); float height = rows * 100 + 50; windowSize = new Vector2(width, height); drawLoc = origin; Lister = new Listing_Settings(SettingsPage.Upgrades); }
public override void SettingsWindow(VehicleDef def, Listing_Settings listing) { FieldInfo dictField = SettingsCache.GetCachedField(typeof(StatUpgrade), nameof(values)); Rect buttonRect = listing.GetRect(16); buttonRect.x = buttonRect.width - 24; buttonRect.width = 24; buttonRect.height = 24; listing.Header(label, GameFont.Medium, TextAnchor.MiddleCenter); if (Widgets.ButtonImage(buttonRect, VehicleTex.ResetPage)) { SettingsCustomizableFields.PopulateSaveableUpgrades(def, true); } listing.Gap(); foreach (var statUpgrade in values) { SaveableDefPair <StatUpgradeCategoryDef> saveable = new SaveableDefPair <StatUpgradeCategoryDef>(def, dictField, string.Concat(statUpgrade.Key.defName, "_", upgradeID), statUpgrade.Key, LookMode.Value); statUpgrade.Key.DrawStatLister(def, listing, saveable, statUpgrade.Value); } }
/// <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; } }
private void DrawVehicleOptions(Rect menuRect) { listingSplit = new Listing_Settings() { maxOneColumn = true, shiftRectScrollbar = true }; Rect vehicleIconContainer = menuRect.ContractedBy(10); vehicleIconContainer.width /= 4; vehicleIconContainer.height = vehicleIconContainer.width; vehicleIconContainer.x += vehicleIconContainer.width; Rect vehicleDetailsContainer = menuRect.ContractedBy(10); vehicleDetailsContainer.x += vehicleIconContainer.width - 1; vehicleDetailsContainer.width -= vehicleIconContainer.width; Widgets.DrawBoxSolid(vehicleDetailsContainer, Color.grey); Rect vehicleDetailsRect = vehicleDetailsContainer.ContractedBy(1); Widgets.DrawBoxSolid(vehicleDetailsRect, ListingExtension.MenuSectionBGFillColor); listingStandard = new Listing_Standard(); listingStandard.Begin(vehicleDetailsContainer.ContractedBy(1)); listingStandard.Header($"{VehicleMod.selectedDef?.LabelCap ?? string.Empty}", ListingExtension.BannerColor, GameFont.Medium, TextAnchor.MiddleCenter); listingStandard.End(); if (VehicleMod.selectedDef != null) { try { Rect iconRect = menuRect.ContractedBy(10); iconRect.width /= 5; iconRect.height = iconRect.width; iconRect.x += menuRect.width / 4; iconRect.y += 30; if (VehicleMod.selectedPatterns.Count > 1) { Rect paintBrushRect = new Rect(iconRect.x + iconRect.width, iconRect.y, 24, 24); Widgets.DrawTextureFitted(paintBrushRect, VehicleTex.Recolor, 1); if (Mouse.IsOver(paintBrushRect)) { TooltipHandler.TipRegion(paintBrushRect, "VehiclesRecolorDefaultMaskTooltip".Translate()); } if (Widgets.ButtonInvisible(paintBrushRect)) { List <FloatMenuOption> list = new List <FloatMenuOption>(); foreach (PatternDef pattern in VehicleMod.selectedPatterns) { list.Add(new FloatMenuOption(pattern.LabelCap, () => defaultMasks[VehicleMod.selectedDef.defName] = pattern.defName)); } FloatMenu floatMenu = new FloatMenu(list) { vanishIfMouseDistant = true }; //floatMenu.onCloseCallback... Find.WindowStack.Add(floatMenu); } } PatternDef curPattern = DefDatabase <PatternDef> .GetNamed(defaultMasks[VehicleMod.selectedDef.defName]); RenderHelper.DrawVehicleTexInSettings(iconRect, VehicleMod.selectedDef, VehicleMod.graphicInt, VehicleMod.selectedVehicleTex, curPattern, Rot8.North); Rect enableButtonRect = menuRect.ContractedBy(10); enableButtonRect.x += enableButtonRect.width / 4 + 5; EnableButton(enableButtonRect); Rect compVehicleRect = menuRect.ContractedBy(10); compVehicleRect.x += vehicleIconContainer.width * 2 - 10; compVehicleRect.y += 30; compVehicleRect.width -= vehicleIconContainer.width * 2; compVehicleRect.height -= (30 + menuRect.height * 0.45f); listingSplit.Begin(compVehicleRect, 2); listingSplit.Header("CompVehicleStats".Translate(), Color.clear, GameFont.Small, TextAnchor.MiddleCenter); foreach (FieldInfo field in VehicleMod.vehicleDefFields) { if (field.TryGetAttribute(out PostToSettingsAttribute post)) { post.DrawLister(listingSplit, VehicleMod.selectedDef, field); } } listingSplit.End(); float scrollableFieldY = menuRect.height * 0.4f; Rect scrollableFieldsRect = new Rect(vehicleDetailsContainer.x + 1, menuRect.y + scrollableFieldY, vehicleDetailsContainer.width - 2, menuRect.height - scrollableFieldY - 10); Rect scrollableFieldsViewRect = new Rect(scrollableFieldsRect.x, scrollableFieldsRect.y, scrollableFieldsRect.width - 20, VehicleMod.scrollableViewHeight); UIElements.DrawLineHorizontalGrey(scrollableFieldsRect.x, scrollableFieldsRect.y - 1, scrollableFieldsRect.width); listingSplit.BeginScrollView(scrollableFieldsRect, ref VehicleMod.saveableFieldsScrollPosition, ref scrollableFieldsViewRect, 3); foreach (var saveableObject in VehicleMod.VehicleCompFields) { if (saveableObject.Value.NullOrEmpty() || saveableObject.Value.All(f => f.TryGetAttribute <PostToSettingsAttribute>(out var settings) && settings.VehicleType != VehicleType.Undefined && settings.VehicleType != VehicleMod.selectedDef.vehicleType)) { continue; } string header = string.Empty; if (saveableObject.Key.TryGetAttribute(out HeaderTitleAttribute title)) { header = title.Translate ? title.Label.Translate().ToString() : title.Label; } listingSplit.Header(header, ListingExtension.BannerColor, GameFont.Small, TextAnchor.MiddleCenter); foreach (FieldInfo field in saveableObject.Value) { if (field.TryGetAttribute(out PostToSettingsAttribute post)) { post.DrawLister(listingSplit, VehicleMod.selectedDef, field); } } } listingSplit.EndScrollView(ref scrollableFieldsViewRect); } catch (Exception ex) { Log.Error($"Exception thrown while trying to select {VehicleMod.selectedDef.defName}. Disabling vehicle to preserve mod settings.\nException={ex.Message}"); VehicleMod.settingsDisabledFor.Add(VehicleMod.selectedDef.defName); VehicleMod.selectedDef = null; VehicleMod.selectedPatterns.Clear(); VehicleMod.selectedDefUpgradeComp = null; VehicleMod.selectedNode = null; VehicleMod.SetVehicleTex(null); } } }
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) { }
public abstract void DrawStatLister(VehicleDef def, Listing_Settings lister, SaveableField field, float value);
public virtual void SettingsWindow(VehicleDef def, Listing_Settings listing) { }