diff --git a/AmmoCountIcon.cs b/AmmoCountIcon.cs index a86b7d5..a3edeac 100644 --- a/AmmoCountIcon.cs +++ b/AmmoCountIcon.cs @@ -125,7 +125,7 @@ public static void UpdateVisibility() rtBait.anchorMin = new Vector2(0.5f, 0f); rtBait.anchorMax = new Vector2(1f, 0.5f); - foreach (HotkeyBar bar in isDirty.Keys.ToList()) + foreach (HotkeyBar bar in isDirty.Keys) isDirty[bar] = true; } diff --git a/ItemIcon.cs b/ItemIcon.cs index 5aa00b7..36904fe 100644 --- a/ItemIcon.cs +++ b/ItemIcon.cs @@ -7,28 +7,46 @@ using UnityEngine; using static MyLittleUI.MyLittleUI; using BepInEx; +using System.Linq; namespace MyLittleUI { internal static class ItemIcon { private static Vector3 itemIconScaleOriginal = Vector3.zero; + private static Color itemEquippedColorOriginal = Color.clear; - private static void UpdateItemIcon(GuiBar durability, Image icon) + private static void UpdateItemIcon(GuiBar durability, Image icon, Image equiped) { if (itemIconScaleOriginal == Vector3.zero) itemIconScaleOriginal = icon.transform.localScale; icon.transform.localScale = itemIconScaleOriginal * Mathf.Clamp(itemIconScale.Value, 0.2f, 2f); - if (durabilityEnabled.Value && durability.isActiveAndEnabled) + if (equiped != null) { + if (itemEquippedColorOriginal == Color.clear) + itemEquippedColorOriginal = equiped.color; + + if (itemEquippedColor.Value != Color.clear) + equiped.color = itemEquippedColor.Value; + else if (itemEquippedColorOriginal != Color.clear) + equiped.color = itemEquippedColorOriginal; + } + + if (durabilityEnabled.Value && durability != null) + { + if (!durability.m_barImage && durability.m_bar) + durability.m_barImage = durability.m_bar.GetComponent(); + float percentage = durability.GetSmoothValue(); if (percentage >= 1f) { if (durability.GetColor() == Color.red) durability.SetColor(durabilityBroken.Value); + else if (durability.GetColor() != Color.clear) + durability.gameObject.SetActive(false); } else { @@ -137,13 +155,24 @@ private static void UpdateItemQuality(TMP_Text quality, int m_quality) private class InventoryGrid_UpdateGui_DurabilityAndScale { private static readonly HashSet filterItemQuality = new HashSet(); + private static readonly HashSet hideItemQuality = new HashSet(); + + private static IEnumerable GetEqupmentSlotsItems() + { + return AzuExtendedPlayerInventory.API.GetSlots().GetItemFuncs.Where(func => func != null).Select(func => func.Invoke(Player.m_localPlayer)); + } + + private static IEnumerable GetQuickSlotsItems() + { + return AzuExtendedPlayerInventory.API.GetQuickSlotsItems(); + } private static void FillItemsToFilter() { - AzuExtendedPlayerInventory.API.GetSlots().GetItemFuncs.DoIf(func => func != null, func => filterItemQuality.Add(func.Invoke(Player.m_localPlayer))); - + GetEqupmentSlotsItems().Do(item => filterItemQuality.Add(item)); + if (itemQualityIgnoreCustomSlots.Value) - AzuExtendedPlayerInventory.API.GetQuickSlotsItems().Do(item => filterItemQuality.Add(item)); + GetQuickSlotsItems().Do(item => filterItemQuality.Add(item)); } private static bool IgnoreItemQuality(InventoryGrid grid, ItemDrop.ItemData item) @@ -154,6 +183,11 @@ private static bool IgnoreItemQuality(InventoryGrid grid, ItemDrop.ItemData item (itemQualityIgnoreCustomSlots.Value && (item.m_gridPos.y >= grid.m_height || item.m_gridPos.x >= grid.m_width)); } + private static bool HideEquipmentSlotsQuality(InventoryGrid grid, ItemDrop.ItemData item) + { + return grid.name == "EquipmentSlotGrid" || hideItemQuality.Contains(item); + } + private static void Postfix(InventoryGrid __instance, Inventory ___m_inventory, List ___m_elements) { if (!modEnabled.Value) @@ -163,6 +197,10 @@ private static void Postfix(InventoryGrid __instance, Inventory ___m_inventory, if ((itemQualityIgnoreCustomEquipmentSlots.Value || itemQualityIgnoreCustomSlots.Value) && AzuExtendedPlayerInventory.API.IsLoaded()) FillItemsToFilter(); + hideItemQuality.Clear(); + if (itemQualityHideCustomEquipmentSlots.Value && AzuExtendedPlayerInventory.API.IsLoaded()) + GetEqupmentSlotsItems().Do(item => hideItemQuality.Add(item)); + int width = ___m_inventory.GetWidth(); foreach (ItemDrop.ItemData item in ___m_inventory.GetAllItems()) { @@ -170,9 +208,11 @@ private static void Postfix(InventoryGrid __instance, Inventory ___m_inventory, if (0 <= index && index < ___m_elements.Count) { InventoryGrid.Element element = ___m_elements[index]; - UpdateItemIcon(element.m_durability, element.m_icon); + UpdateItemIcon(element.m_durability, element.m_icon, element.m_equiped); - if (!IgnoreItemQuality(__instance, item)) + if (HideEquipmentSlotsQuality(__instance, item) || (itemQualityHideLvl1.Value && item.m_quality < 2)) + element.m_quality.SetText(""); + else if (!IgnoreItemQuality(__instance, item)) UpdateItemQuality(element.m_quality, item.m_quality); } } @@ -193,7 +233,7 @@ private static void Postfix(HotkeyBar __instance, Player player) return; foreach(HotkeyBar.ElementData element in __instance.m_elements) - UpdateItemIcon(element.m_durability, element.m_icon); + UpdateItemIcon(element.m_durability, element.m_icon, itemEquippedColor.Value != Color.clear ? element.m_equiped.GetComponent() : null); } } } diff --git a/MyLittleUI.cs b/MyLittleUI.cs index a95f444..8448fea 100644 --- a/MyLittleUI.cs +++ b/MyLittleUI.cs @@ -21,7 +21,7 @@ public class MyLittleUI : BaseUnityPlugin { const string pluginID = "shudnal.MyLittleUI"; const string pluginName = "My Little UI"; - const string pluginVersion = "1.1.6"; + const string pluginVersion = "1.1.7"; private readonly Harmony harmony = new Harmony(pluginID); @@ -107,6 +107,7 @@ public class MyLittleUI : BaseUnityPlugin public static ConfigEntry durabilityBroken; public static ConfigEntry itemIconScale; + public static ConfigEntry itemEquippedColor; public static ConfigEntry itemTooltip; public static ConfigEntry itemTooltipColored; @@ -122,6 +123,9 @@ public class MyLittleUI : BaseUnityPlugin public static ConfigEntry itemQualityCharacterSpacing; public static ConfigEntry itemQualityIgnoreCustomEquipmentSlots; public static ConfigEntry itemQualityIgnoreCustomSlots; + + public static ConfigEntry itemQualityHideLvl1; + public static ConfigEntry itemQualityHideCustomEquipmentSlots; private static ConfigEntry inventoryOpenCloseAnimationSpeed; @@ -435,6 +439,7 @@ private void ConfigInit() durabilityBroken = config("Item - Durability", "4 - Broken", defaultValue: new Color(0.72941f, 0.03529f, 0.03529f, 1f), "Color of durability >= 0%."); itemIconScale = config("Item - Icon", "Icon scale", defaultValue: 1.0f, "Relative scale size of item icons."); + itemEquippedColor = config("Item - Icon", "Equipped color", defaultValue: Color.clear, "Override for color of equipped items."); itemTooltip = config("Item - Tooltip", "Enabled", defaultValue: true, "Updated item tooltip. Hold Alt to see original tooltip"); itemTooltipColored = config("Item - Tooltip", "Colored numbers", defaultValue: true, "Orange and yellow value numbers in tooltip, light blue if disabled"); @@ -450,7 +455,7 @@ private void ConfigInit() itemQualityCharacterSpacing = config("Item - Quality", "Space between characters", defaultValue: 8f, "Character spacing."); itemQualityIgnoreCustomEquipmentSlots = config("Item - Quality", "Ignore equipment slots", defaultValue: false, "Ignore custom equipment slots added by AzuEPI or EaQS. Quick slot items will remain."); itemQualityIgnoreCustomSlots = config("Item - Quality", "Ignore any custom slot", defaultValue: false, "Ignore every custom slot outside of shown inventory rows."); - + itemQualitySymbol.SettingChanged += (sender, args) => itemQualitySymbol.Value = itemQualitySymbol.Value[0].ToString(); itemQualitySymbol.SettingChanged += (sender, args) => ItemIcon.FillItemQualityCache(); @@ -460,6 +465,11 @@ private void ConfigInit() ItemIcon.FillItemQualityCache(); + itemQualityHideLvl1 = config("Item - Quality - Display", "Hide quality on lvl 1 items", defaultValue: false, "Hide lvl 1 quality if item lvl is 1."); + itemQualityHideCustomEquipmentSlots = config("Item - Quality - Display", "Hide quality on equipment slots", defaultValue: false, "Hide quality if item is in equipment slots."); + + itemQualityHideLvl1.SettingChanged += (sender, args) => AmmoCountIcon.UpdateVisibility(); + inventoryOpenCloseAnimationSpeed = config("Inventory", "Animation speed", defaultValue: 1f, "Inventory show/close animation speed"); inventoryOpenCloseAnimationSpeed.SettingChanged += (sender, args) => SetInventoryAnimationSpeed(); diff --git a/package/thunderstore/MyLittleUI/CHANGELOG.md b/package/thunderstore/MyLittleUI/CHANGELOG.md index 919a081..d79d86b 100644 --- a/package/thunderstore/MyLittleUI/CHANGELOG.md +++ b/package/thunderstore/MyLittleUI/CHANGELOG.md @@ -1,3 +1,8 @@ +# 1.1.7 +* option to hide quality on lvl 1 items +* option to hide quality on items at equipment slots (AzuEPI & EaQS) +* option to recolor equipped item hover + # 1.1.6 * minimap info blocks will be properly hidden when map is open diff --git a/package/thunderstore/MyLittleUI/manifest.json b/package/thunderstore/MyLittleUI/manifest.json index 5ad4181..16da796 100644 --- a/package/thunderstore/MyLittleUI/manifest.json +++ b/package/thunderstore/MyLittleUI/manifest.json @@ -1,6 +1,6 @@ { "name": "MyLittleUI", - "version_number": "1.1.6", + "version_number": "1.1.7", "website_url": "https://github.com/shudnal/MyLittleUI", "description": "Bunch of little UI tweaks. Tooltips for production timers, player status, items. Custom chest names, buff list, multicraft, weather forecast and so on.", "dependencies": ["denikson-BepInExPack_Valheim-5.4.2202"]