Skip to content

Commit

Permalink
1.1.7 hide quality, equipped recolor
Browse files Browse the repository at this point in the history
  • Loading branch information
shudnal committed Oct 8, 2024
1 parent f3605d7 commit 28cbe52
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 12 deletions.
2 changes: 1 addition & 1 deletion AmmoCountIcon.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down
56 changes: 48 additions & 8 deletions ItemIcon.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<Image>();

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
{
Expand Down Expand Up @@ -137,13 +155,24 @@ private static void UpdateItemQuality(TMP_Text quality, int m_quality)
private class InventoryGrid_UpdateGui_DurabilityAndScale
{
private static readonly HashSet<ItemDrop.ItemData> filterItemQuality = new HashSet<ItemDrop.ItemData>();
private static readonly HashSet<ItemDrop.ItemData> hideItemQuality = new HashSet<ItemDrop.ItemData>();

private static IEnumerable<ItemDrop.ItemData> GetEqupmentSlotsItems()
{
return AzuExtendedPlayerInventory.API.GetSlots().GetItemFuncs.Where(func => func != null).Select(func => func.Invoke(Player.m_localPlayer));
}

private static IEnumerable<ItemDrop.ItemData> 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)
Expand All @@ -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<InventoryGrid.Element> ___m_elements)
{
if (!modEnabled.Value)
Expand All @@ -163,16 +197,22 @@ 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())
{
int index = item.m_gridPos.y * width + item.m_gridPos.x;
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);
}
}
Expand All @@ -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<Image>() : null);
}
}
}
Expand Down
14 changes: 12 additions & 2 deletions MyLittleUI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -107,6 +107,7 @@ public class MyLittleUI : BaseUnityPlugin
public static ConfigEntry<Color> durabilityBroken;

public static ConfigEntry<float> itemIconScale;
public static ConfigEntry<Color> itemEquippedColor;

public static ConfigEntry<bool> itemTooltip;
public static ConfigEntry<bool> itemTooltipColored;
Expand All @@ -122,6 +123,9 @@ public class MyLittleUI : BaseUnityPlugin
public static ConfigEntry<float> itemQualityCharacterSpacing;
public static ConfigEntry<bool> itemQualityIgnoreCustomEquipmentSlots;
public static ConfigEntry<bool> itemQualityIgnoreCustomSlots;

public static ConfigEntry<bool> itemQualityHideLvl1;
public static ConfigEntry<bool> itemQualityHideCustomEquipmentSlots;

private static ConfigEntry<float> inventoryOpenCloseAnimationSpeed;

Expand Down Expand Up @@ -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");
Expand All @@ -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();
Expand All @@ -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();
Expand Down
5 changes: 5 additions & 0 deletions package/thunderstore/MyLittleUI/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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

Expand Down
2 changes: 1 addition & 1 deletion package/thunderstore/MyLittleUI/manifest.json
Original file line number Diff line number Diff line change
@@ -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"]
Expand Down

0 comments on commit 28cbe52

Please sign in to comment.