summaryrefslogtreecommitdiff
path: root/Valheim_v0.141.2_r202102/Valheim/assembly_valheim/HotkeyBar.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Valheim_v0.141.2_r202102/Valheim/assembly_valheim/HotkeyBar.cs')
-rw-r--r--Valheim_v0.141.2_r202102/Valheim/assembly_valheim/HotkeyBar.cs156
1 files changed, 156 insertions, 0 deletions
diff --git a/Valheim_v0.141.2_r202102/Valheim/assembly_valheim/HotkeyBar.cs b/Valheim_v0.141.2_r202102/Valheim/assembly_valheim/HotkeyBar.cs
new file mode 100644
index 0000000..c884d08
--- /dev/null
+++ b/Valheim_v0.141.2_r202102/Valheim/assembly_valheim/HotkeyBar.cs
@@ -0,0 +1,156 @@
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class HotkeyBar : MonoBehaviour
+{
+ private class ElementData
+ {
+ public bool m_used;
+
+ public GameObject m_go;
+
+ public Image m_icon;
+
+ public GuiBar m_durability;
+
+ public Text m_amount;
+
+ public GameObject m_equiped;
+
+ public GameObject m_queued;
+
+ public GameObject m_selection;
+ }
+
+ public GameObject m_elementPrefab;
+
+ public float m_elementSpace = 70f;
+
+ private int m_selected;
+
+ private List<ElementData> m_elements = new List<ElementData>();
+
+ private List<ItemDrop.ItemData> m_items = new List<ItemDrop.ItemData>();
+
+ private void Update()
+ {
+ Player localPlayer = Player.m_localPlayer;
+ if ((bool)localPlayer && !InventoryGui.IsVisible() && !Menu.IsVisible() && !GameCamera.InFreeFly())
+ {
+ if (ZInput.GetButtonDown("JoyDPadLeft"))
+ {
+ m_selected = Mathf.Max(0, m_selected - 1);
+ }
+ if (ZInput.GetButtonDown("JoyDPadRight"))
+ {
+ m_selected = Mathf.Min(m_elements.Count - 1, m_selected + 1);
+ }
+ if (ZInput.GetButtonDown("JoyDPadUp"))
+ {
+ localPlayer.UseHotbarItem(m_selected + 1);
+ }
+ }
+ if (m_selected > m_elements.Count - 1)
+ {
+ m_selected = Mathf.Max(0, m_elements.Count - 1);
+ }
+ UpdateIcons(localPlayer);
+ }
+
+ private void UpdateIcons(Player player)
+ {
+ if (!player || player.IsDead())
+ {
+ foreach (ElementData element in m_elements)
+ {
+ Object.Destroy(element.m_go);
+ }
+ m_elements.Clear();
+ return;
+ }
+ player.GetInventory().GetBoundItems(m_items);
+ m_items.Sort((ItemDrop.ItemData x, ItemDrop.ItemData y) => x.m_gridPos.x.CompareTo(y.m_gridPos.x));
+ int num = 0;
+ foreach (ItemDrop.ItemData item in m_items)
+ {
+ if (item.m_gridPos.x + 1 > num)
+ {
+ num = item.m_gridPos.x + 1;
+ }
+ }
+ if (m_elements.Count != num)
+ {
+ foreach (ElementData element2 in m_elements)
+ {
+ Object.Destroy(element2.m_go);
+ }
+ m_elements.Clear();
+ for (int i = 0; i < num; i++)
+ {
+ ElementData elementData = new ElementData();
+ elementData.m_go = Object.Instantiate(m_elementPrefab, base.transform);
+ elementData.m_go.transform.localPosition = new Vector3((float)i * m_elementSpace, 0f, 0f);
+ elementData.m_go.transform.Find("binding").GetComponent<Text>().text = (i + 1).ToString();
+ elementData.m_icon = elementData.m_go.transform.transform.Find("icon").GetComponent<Image>();
+ elementData.m_durability = elementData.m_go.transform.Find("durability").GetComponent<GuiBar>();
+ elementData.m_amount = elementData.m_go.transform.Find("amount").GetComponent<Text>();
+ elementData.m_equiped = elementData.m_go.transform.Find("equiped").gameObject;
+ elementData.m_queued = elementData.m_go.transform.Find("queued").gameObject;
+ elementData.m_selection = elementData.m_go.transform.Find("selected").gameObject;
+ m_elements.Add(elementData);
+ }
+ }
+ foreach (ElementData element3 in m_elements)
+ {
+ element3.m_used = false;
+ }
+ bool flag = ZInput.IsGamepadActive();
+ for (int j = 0; j < m_items.Count; j++)
+ {
+ ItemDrop.ItemData itemData = m_items[j];
+ ElementData elementData2 = m_elements[itemData.m_gridPos.x];
+ elementData2.m_used = true;
+ elementData2.m_icon.gameObject.SetActive(value: true);
+ elementData2.m_icon.sprite = itemData.GetIcon();
+ elementData2.m_durability.gameObject.SetActive(itemData.m_shared.m_useDurability);
+ if (itemData.m_shared.m_useDurability)
+ {
+ if (itemData.m_durability <= 0f)
+ {
+ elementData2.m_durability.SetValue(1f);
+ elementData2.m_durability.SetColor((Mathf.Sin(Time.time * 10f) > 0f) ? Color.red : new Color(0f, 0f, 0f, 0f));
+ }
+ else
+ {
+ elementData2.m_durability.SetValue(itemData.GetDurabilityPercentage());
+ elementData2.m_durability.ResetColor();
+ }
+ }
+ elementData2.m_equiped.SetActive(itemData.m_equiped);
+ elementData2.m_queued.SetActive(player.IsItemQueued(itemData));
+ if (itemData.m_shared.m_maxStackSize > 1)
+ {
+ elementData2.m_amount.gameObject.SetActive(value: true);
+ elementData2.m_amount.text = itemData.m_stack + "/" + itemData.m_shared.m_maxStackSize;
+ }
+ else
+ {
+ elementData2.m_amount.gameObject.SetActive(value: false);
+ }
+ }
+ for (int k = 0; k < m_elements.Count; k++)
+ {
+ ElementData elementData3 = m_elements[k];
+ elementData3.m_selection.SetActive(flag && k == m_selected);
+ if (!elementData3.m_used)
+ {
+ elementData3.m_icon.gameObject.SetActive(value: false);
+ elementData3.m_durability.gameObject.SetActive(value: false);
+ elementData3.m_equiped.SetActive(value: false);
+ elementData3.m_queued.SetActive(value: false);
+ elementData3.m_amount.gameObject.SetActive(value: false);
+ }
+ }
+ }
+}