ItemStore.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. using GadgetCore.API;
  2. using System;
  3. using UnityEngine;
  4. namespace AncientReassembler
  5. {
  6. public class ItemStore
  7. {
  8. public ItemStore(int size)
  9. {
  10. m_Items = new Item[size];
  11. }
  12. private Item[] m_Items;
  13. public Item[] Items
  14. {
  15. get { return m_Items; }
  16. set { m_Items = value; }
  17. }
  18. public void Clear()
  19. {
  20. for (int i = 0; i < m_Items.Length; i++)
  21. m_Items[i] = new Item(0, 0, 0, 0, 0, new int[3], new int[3]);
  22. }
  23. public bool CanUse(Item item)
  24. {
  25. var type = ItemRegistry.GetTypeByID(item.id);
  26. if ((type & ItemType.LEVELING) == ItemType.LEVELING)
  27. return
  28. true;
  29. return false;
  30. }
  31. public bool ConfirmCombine()
  32. {
  33. if ((Items[0]?.id ?? 0) > 0 && (Items[1]?.id ?? 0) > 0 && (Items[2]?.id ?? 0) == 0)
  34. {
  35. Item item1 = Items[0];
  36. Item item2 = Items[1];
  37. if (item1.id == item2.id
  38. && item1.q == 1 && item2.q == 1
  39. && item1.tier == item2.tier
  40. && item1.tier < 3)
  41. return true;
  42. }
  43. return false;
  44. }
  45. public void Combine()
  46. {
  47. if (ConfirmCombine())
  48. {
  49. Items[2] = Items[0];
  50. Items[2].corrupted = Max(Items[0].corrupted, Items[1].corrupted);
  51. Items[2].exp = Max(Items[0].exp, Items[1].exp);
  52. Items[2].tier++;
  53. Items[0] = new Item(0, 0, 0, 0, 0, new int[3], new int[3]);
  54. Items[1] = new Item(0, 0, 0, 0, 0, new int[3], new int[3]);
  55. InstanceTracker.GameScript.GetComponent<AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/create"), Menuu.soundLevel / 10f);
  56. UpdateLatestUI();
  57. }
  58. }
  59. private static int Max(int i1, int i2)
  60. {
  61. return i1 > i2 ? i1 : i2;
  62. }
  63. public void UpdateLatestUI()
  64. {
  65. UpdateUI(lastUsed);
  66. }
  67. private static readonly Texture2D textureButton0 = GadgetCoreAPI.LoadTexture2D("bAncientReassembler0.png");
  68. private static readonly Texture2D textureButton1 = GadgetCoreAPI.LoadTexture2D("bAncientReassembler1.png");
  69. private static readonly Texture2D textureButton2 = GadgetCoreAPI.LoadTexture2D("bAncientReassembler2.png");
  70. private GameObject lastUsed;
  71. public void UpdateUI(GameObject menu)
  72. {
  73. lastUsed = menu;
  74. try
  75. {
  76. for (int i = 0; i < m_Items.Length; i++)
  77. {
  78. var obj = menu.transform.GetChild(2 + i).GetChild(0).gameObject;
  79. obj.GetComponent<Renderer>().material = (Material)Resources.Load("i/i" + (m_Items[i]?.id ?? 0));
  80. var objBack = obj.transform.GetChild(1).gameObject;
  81. AnimIcon animIcon = (AnimIcon)objBack.GetComponent("AnimIcon");
  82. if ((m_Items[i]?.id ?? 0) > 0)
  83. {
  84. objBack.GetComponent<Renderer>().material = (Material)Resources.Load("iBack" + m_Items[i].tier);
  85. if (m_Items[i].tier == 3)
  86. animIcon.anim = 1;
  87. else
  88. animIcon.anim = 0;
  89. objBack.SetActive(true);
  90. }
  91. else
  92. {
  93. animIcon.anim = 0;
  94. objBack.SetActive(false);
  95. }
  96. }
  97. if (ConfirmCombine())
  98. menu.transform.GetChild(5).GetChild(0).gameObject.SetActive(true);
  99. else
  100. menu.transform.GetChild(5).GetChild(0).gameObject.SetActive(false);
  101. if ((m_Items[2]?.id ?? 0) > 0)
  102. {
  103. menu.transform.GetChild(2 + 0).gameObject.SetActive(false);
  104. menu.transform.GetChild(2 + 1).gameObject.SetActive(false);
  105. menu.transform.GetChild(2 + 2).gameObject.SetActive(true);
  106. }
  107. else
  108. {
  109. menu.transform.GetChild(2 + 0).gameObject.SetActive(true);
  110. menu.transform.GetChild(2 + 1).gameObject.SetActive(true);
  111. menu.transform.GetChild(2 + 2).gameObject.SetActive(false);
  112. }
  113. }
  114. catch (Exception e)
  115. {
  116. Core.logger.LogConsole(e.Message);
  117. }
  118. }
  119. }
  120. }