public static void UpdateColor(InventoryGrid.Element element, float durability) { element.m_durability.SetValue(durability); // Might be to update items colorbar? This is from original code. element.m_durability.ResetColor(); // Between 1f - 0f switch (durability) { case float n when(n >= 0.75f): // Color green element.m_durability.SetColor(activeColor[0]); break; case float n when(n >= 0.50f): // Color yellow element.m_durability.SetColor(activeColor[1]); break; case float n when(n >= 0.25f): // Color Orange element.m_durability.SetColor(activeColor[2]); break; case float n when(n >= 0f): // Color Red element.m_durability.SetColor(activeColor[3]); break; } }
public static void Draw(InventoryGrid.Element element, int quality_lvl) { string stars; if (quality_lvl >= 5) // Fix for modded items... { stars = $"<color=white><size=10>{quality_lvl}</size>x </color>\u2605"; // Could be ★x5 or ★x99999 element.m_quality.alignment = TextAnchor.MiddleRight; element.m_quality.rectTransform.sizeDelta = new Vector2(60f, 20f); if (quality_lvl > 99998) { stars = $"<color=white><size=10>MODDED</size> </color>\u2605"; // For them wack guys } } else { stars = Helpers.Repeat("\u2605", quality_lvl); element.m_quality.rectTransform.sizeDelta = new Vector2(quality_lvl * 10f, 20f); } UnityEngine.Object.Destroy(element.m_quality.GetComponent <Outline>()); element.m_quality.text = $"<size=12>{stars}</size>"; element.m_quality.color = starColor; // Parent size = 64x64, quality size = 20x20, top-right (0,0) -> (-4f,-10f) element.m_quality.rectTransform.anchoredPosition = new Vector2(-4f, -6f); // TODO: Spawned items might brake this, as they could have 99 stars. // Possible fix, after x amount switch to: ★x[amount] = ★x99 }
public static void Postfix(InventoryGrid __instance) { foreach (ItemDrop.ItemData item in __instance.m_inventory.m_inventory) { InventoryGrid.Element element = __instance.GetElement(item.m_gridPos.x, item.m_gridPos.y, __instance.m_width); if (element != null && item.HasMagicEffect(MagicEffectType.Indestructible)) { element.m_durability.gameObject.SetActive(false); } } }
private static bool Prefix(InventoryGrid __instance, ref InventoryGrid.Element __result, int x, int y, int width) { var index = y * width + x; if (index < 0 || index >= __instance.m_elements.Count) { EquipmentAndQuickSlots.LogError($"Tried to get element for item ({x}, {y}) in inventory ({__instance.m_inventory.m_name}) but that element is outside the bounds!"); __result = null; } else { __result = __instance.m_elements[index]; } return(false); }
private static void PatchInventory(ref InventoryGrid __instance, ref Player player, ItemDrop.ItemData dragItem) { if (!Main.showDurabilityColor.Value && !Main.showItemStars.Value) { return; } foreach (ItemDrop.ItemData itemData in __instance.m_inventory.GetAllItems()) { InventoryGrid.Element element = __instance.GetElement(itemData.m_gridPos.x, itemData.m_gridPos.y, __instance.m_inventory.GetWidth()); if (element.m_icon.transform.localScale == Vector3.one) { element.m_icon.transform.localScale *= Mathf.Max(Main.iconScaleSize.Value, 0.1f); } if (itemData.m_shared.m_useDurability) { if (itemData.m_durability <= 0f) // Item has no durability, original code should do this { //element.m_durability.SetValue(1f); //element.m_durability.SetColor((Mathf.Sin(Time.time * 10f) > 0f) ? Color.red : new Color(0f, 0f, 0f, 0f)); } else // Item has durability left { if (Main.showDurabilityColor.Value) { Patches.DurabilityBar.UpdateColor(element, itemData.GetDurabilityPercentage()); } } } // Change item quality info if (itemData.m_shared.m_maxQuality > 1) { if (Main.showItemStars.Value) { Patches.Stars.Draw(element, itemData.m_quality); } } } }
// Token: 0x0600052C RID: 1324 RVA: 0x0002B704 File Offset: 0x00029904 private void UpdateGui(Player player, ItemDrop.ItemData dragItem) { RectTransform rectTransform = base.transform as RectTransform; int width = this.m_inventory.GetWidth(); int height = this.m_inventory.GetHeight(); if (this.m_selected.x >= width - 1) { this.m_selected.x = width - 1; } if (this.m_selected.y >= height - 1) { this.m_selected.y = height - 1; } if (this.m_width != width || this.m_height != height) { this.m_width = width; this.m_height = height; foreach (InventoryGrid.Element element in this.m_elements) { UnityEngine.Object.Destroy(element.m_go); } this.m_elements.Clear(); Vector2 widgetSize = this.GetWidgetSize(); Vector2 a = new Vector2(rectTransform.rect.width / 2f, 0f) - new Vector2(widgetSize.x, 0f) * 0.5f; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { Vector2 b = new Vector3((float)j * this.m_elementSpace, (float)i * -this.m_elementSpace); GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(this.m_elementPrefab, this.m_gridRoot); (gameObject.transform as RectTransform).anchoredPosition = a + b; UIInputHandler componentInChildren = gameObject.GetComponentInChildren <UIInputHandler>(); componentInChildren.m_onRightDown = (Action <UIInputHandler>)Delegate.Combine(componentInChildren.m_onRightDown, new Action <UIInputHandler>(this.OnRightClick)); componentInChildren.m_onLeftDown = (Action <UIInputHandler>)Delegate.Combine(componentInChildren.m_onLeftDown, new Action <UIInputHandler>(this.OnLeftClick)); Text component = gameObject.transform.Find("binding").GetComponent <Text>(); if (player && i == 0) { component.text = (j + 1).ToString(); } else { component.enabled = false; } InventoryGrid.Element element2 = new InventoryGrid.Element(); element2.m_pos = new Vector2i(j, i); element2.m_go = gameObject; element2.m_icon = gameObject.transform.Find("icon").GetComponent <Image>(); element2.m_amount = gameObject.transform.Find("amount").GetComponent <Text>(); element2.m_quality = gameObject.transform.Find("quality").GetComponent <Text>(); element2.m_equiped = gameObject.transform.Find("equiped").GetComponent <Image>(); element2.m_queued = gameObject.transform.Find("queued").GetComponent <Image>(); element2.m_noteleport = gameObject.transform.Find("noteleport").GetComponent <Image>(); element2.m_selected = gameObject.transform.Find("selected").gameObject; element2.m_tooltip = gameObject.GetComponent <UITooltip>(); element2.m_durability = gameObject.transform.Find("durability").GetComponent <GuiBar>(); this.m_elements.Add(element2); } } } foreach (InventoryGrid.Element element3 in this.m_elements) { element3.m_used = false; } bool flag = this.m_uiGroup.IsActive() && ZInput.IsGamepadActive(); foreach (ItemDrop.ItemData itemData in this.m_inventory.GetAllItems()) { InventoryGrid.Element element4 = this.GetElement(itemData.m_gridPos.x, itemData.m_gridPos.y, width); element4.m_used = true; element4.m_icon.enabled = true; element4.m_icon.sprite = itemData.GetIcon(); element4.m_icon.color = ((itemData == dragItem) ? Color.grey : Color.white); element4.m_durability.gameObject.SetActive(itemData.m_shared.m_useDurability); if (itemData.m_shared.m_useDurability) { if (itemData.m_durability <= 0f) { element4.m_durability.SetValue(1f); element4.m_durability.SetColor((Mathf.Sin(Time.time * 10f) > 0f) ? Color.red : new Color(0f, 0f, 0f, 0f)); } else { element4.m_durability.SetValue(itemData.GetDurabilityPercentage()); element4.m_durability.ResetColor(); } } element4.m_equiped.enabled = (player && itemData.m_equiped); element4.m_queued.enabled = (player && player.IsItemQueued(itemData)); element4.m_noteleport.enabled = !itemData.m_shared.m_teleportable; if (dragItem == null) { this.CreateItemTooltip(itemData, element4.m_tooltip); } element4.m_quality.enabled = (itemData.m_shared.m_maxQuality > 1); if (itemData.m_shared.m_maxQuality > 1) { element4.m_quality.text = itemData.m_quality.ToString(); } element4.m_amount.enabled = (itemData.m_shared.m_maxStackSize > 1); if (itemData.m_shared.m_maxStackSize > 1) { element4.m_amount.text = itemData.m_stack.ToString() + "/" + itemData.m_shared.m_maxStackSize.ToString(); } } foreach (InventoryGrid.Element element5 in this.m_elements) { element5.m_selected.SetActive(flag && element5.m_pos == this.m_selected); if (!element5.m_used) { element5.m_durability.gameObject.SetActive(false); element5.m_icon.enabled = false; element5.m_amount.enabled = false; element5.m_quality.enabled = false; element5.m_equiped.enabled = false; element5.m_queued.enabled = false; element5.m_noteleport.enabled = false; element5.m_tooltip.m_text = ""; element5.m_tooltip.m_topic = ""; } } float size = (float)height * this.m_elementSpace; this.m_gridRoot.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size); }