ActionSlot.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. namespace SoftKitty.InventoryEngine
  6. {
  7. public class ActionSlot : MonoBehaviour
  8. {
  9. #region Variables
  10. public LinkIcon Item;
  11. public Image KeyBack;
  12. public Text KeyText;
  13. private ActionSlotData SlotData;
  14. private InventoryHolder Holder;
  15. int Number = 0;
  16. int Index = 0;
  17. bool inited = false;
  18. #endregion
  19. #region Internal Methods
  20. public void SetLock(bool _lock)
  21. {
  22. Item.Draggable = !_lock;
  23. }
  24. public void Initialize(int _index, ActionSlotData _data, InventoryHolder _holder)
  25. {
  26. inited = false;
  27. Index = _index;
  28. SlotData = _data;
  29. Holder = _holder;
  30. if (SlotData.itemId >= 0 && SlotData.itemId< ItemManager.instance.items.Count)
  31. {
  32. Item _item = ItemManager.itemDic[SlotData.itemId].Copy();
  33. _item.upgradeLevel = _data.upgradeLevel;
  34. _item.enchantments.Clear();
  35. _item.enchantments.AddRange(_data.enchantments);
  36. _item.socketedItems.Clear();
  37. _item.socketedItems.AddRange(_data.sockets);
  38. Number = 0;
  39. Item.Initialize(_item,false);
  40. Item.SetItemNumber(0);
  41. Item.SetHolder(Holder);
  42. Item.DoUpdate();
  43. Item.OnHolderItemChanged(new Dictionary<Item, int>());
  44. }
  45. else
  46. {
  47. Number = 0;
  48. Item.SetEmpty();
  49. }
  50. UpdateKey();
  51. Item.Group.alpha = (Number == 0 && SlotData.itemId >= 0) ? 0.3F : 1F;
  52. Item.LimitedByOwner = ItemManager.PlayerInventoryHolder;
  53. inited = true;
  54. }
  55. public void UpdateKey()
  56. {
  57. string _key = SlotData.key == KeyCode.None ? "?" : SlotData.key.ToString().Replace("Alpha", "").Replace("Left", "").Replace("Right", "").Replace("Mouse", "M");
  58. KeyText.text = _key.Substring(0, Mathf.Min(3, _key.Length));
  59. }
  60. void Update()
  61. {
  62. if (!inited) return;
  63. if (Number != Item.GetNumber() || SlotData.itemId != Item.GetItemId())
  64. {
  65. Number = Item.GetNumber();
  66. Item.Group.alpha = (Number == 0 && Item.GetItemId() >= 0) ? 0.3F : 1F;
  67. if (SlotData.itemId != Item.GetItemId())
  68. {
  69. SlotData.itemId = Item.GetItemId();
  70. SlotData.enchantments.Clear();
  71. SlotData.sockets.Clear();
  72. SlotData.upgradeLevel = 0;
  73. if (Item.GetItem() != null)
  74. {
  75. SlotData.upgradeLevel = Item.GetItem().upgradeLevel;
  76. SlotData.enchantments.AddRange(Item.GetItem().enchantments);
  77. SlotData.sockets.AddRange(Item.GetItem().socketedItems);
  78. }
  79. ActionBarUi.instance.Save();
  80. }
  81. }
  82. if (InputProxy.GetKeyDown(SlotData.key))
  83. {
  84. Use();
  85. ActionBarUi.instance.SetSelectedSlot(Index);
  86. }
  87. }
  88. #endregion
  89. public void Use() // Use the item in this slot.
  90. {
  91. if (Item.GetStackHolder() != null && SlotData.itemId >= 0 && Number > 0 )
  92. {
  93. int _index = ItemManager.PlayerInventoryHolder.GetItemIndex(Item.GetItemId(), Item.GetItem().upgradeLevel, Item.GetItem().enchantments, Item.GetItem().socketedItems);
  94. Item.GetStackHolder().UseItem(Item.GetItemId(), 1, _index);
  95. Item.Click();
  96. }
  97. }
  98. }
  99. }