EquipPanel.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. public class EquipPanel : PopUpPanel
  6. {
  7. public Transform craftContainer;
  8. public EquipCraftItemRenderer craftItemPrefab;
  9. public Transform equipContainer;
  10. public EquipIcon equipItemPrefab;
  11. public Transform equipedContainer;
  12. public EquipIcon equipedItemPrefab;
  13. public EquipInfo equipInfo;
  14. public Transform equipedStyleContainer;
  15. public Button recommandBtn;
  16. public Button customizeBtn;
  17. public Text recommandLabel;
  18. public Text customizeLabel;
  19. private CraftConfigData craftData;
  20. private EquipedData equipedData;
  21. public EquipTip equipTip;
  22. private Equipment holdEquipment;
  23. void Awake()
  24. {
  25. equipItemPrefab.equipPanel = this;
  26. equipedItemPrefab.equipPanel = this;
  27. craftItemPrefab.equipPanel = this;
  28. equipInfo.equipPanel = this;
  29. equipTip.equipPanel = this;
  30. List<CraftConfigData> craftList = CraftManager.GetInstance ().GetDataList ();
  31. ListHelper.FillList<CraftConfigData> (craftContainer, craftList, craftItemPrefab);
  32. ListHelper.HideAll (equipContainer);
  33. ListHelper.HideAll (equipedContainer);
  34. Shown ();
  35. recommandLabel.text = Language.GetStr ("EquipPanel", "recommand");
  36. customizeLabel.text = Language.GetStr ("EquipPanel", "customize");
  37. SelectCraft (craftContainer.GetChild(0).GetComponent<EquipCraftItemRenderer>());
  38. ClearHoldEquipment ();
  39. }
  40. protected override void Shown ()
  41. {
  42. EquipManager.GetInstance ().InventoryUpdate.AddListener (OnInventoryUpdate);
  43. EquipManager.GetInstance ().RequestInventory ();
  44. }
  45. private void OnInventoryUpdate()
  46. {
  47. EquipManager.GetInstance ().InventoryUpdate.RemoveListener (OnInventoryUpdate);
  48. SelectCraft (craftContainer.GetChild(0).GetComponent<EquipCraftItemRenderer>());
  49. List<Equipment> list = EquipManager.GetInstance ().GetInventoryList ();
  50. ListHelper.FillList<Equipment> (equipContainer, list, equipItemPrefab);
  51. if (list.Count > 0)
  52. SelectEquip (equipItemPrefab);
  53. else
  54. SelectEquip (null);
  55. }
  56. public void SelectCraft(EquipCraftItemRenderer itemRenderer)
  57. {
  58. craftData = itemRenderer.data as CraftConfigData;
  59. ButtonUtil.TabSelected (itemRenderer, craftContainer);
  60. if(EquipManager.GetInstance().initialized)
  61. {
  62. equipedData = EquipManager.GetInstance ().GetEquipedData (craftData.id);
  63. SelectEquipedStyle (equipedData.styleType.GetHashCode ());
  64. }
  65. }
  66. public int selectedCraftId
  67. {
  68. get{
  69. return craftData.id;
  70. }
  71. }
  72. public void SelectEquip(EquipIcon icon)
  73. {
  74. if (icon != null) {
  75. ShowEquipInfo (icon.data as Equipment);
  76. } else {
  77. ShowEquipInfo (null);
  78. }
  79. }
  80. public void SelectEquiped(EquipIcon icon)
  81. {
  82. if (holdEquipment == null) {
  83. if (icon != null) {
  84. ShowEquipInfo (icon.data as Equipment);
  85. } else {
  86. ShowEquipInfo (null);
  87. }
  88. } else {
  89. Equip (icon.data as Equipment);
  90. }
  91. }
  92. private void ShowEquipInfo(Equipment equipment)
  93. {
  94. for(int i=0; i<equipContainer.transform.childCount; i++)
  95. {
  96. EquipIcon icon = equipContainer.transform.GetChild (i).GetComponent<EquipIcon> ();
  97. if (icon.data == equipment) {
  98. ButtonUtil.TabSelected (icon, equipContainer);
  99. break;
  100. }
  101. }
  102. bool found = false;
  103. for(int i=0; i<equipedContainer.transform.childCount; i++)
  104. {
  105. EquipIcon icon = equipedContainer.transform.GetChild (i).GetComponent<EquipIcon> ();
  106. if (icon.data == equipment) {
  107. ButtonUtil.TabSelected (icon, equipedContainer);
  108. found = true;
  109. break;
  110. }
  111. }
  112. if (!found)
  113. ButtonUtil.TabUnselect (equipedContainer);
  114. equipInfo.SetEquip (equipment);
  115. }
  116. public bool IsEquiped(Equipment equipment)
  117. {
  118. return equipedData.IsEquiped (equipment);
  119. }
  120. public void Equip(Equipment equip)
  121. {
  122. if(equipedData.IsEquiped(equip))
  123. {
  124. if(holdEquipment != null)
  125. {
  126. bool replaced = equipedData.ReplaceCustomize (equip, holdEquipment);
  127. if(replaced)
  128. {
  129. ClearHoldEquipment ();
  130. SelectEquipedStyle (equipedData.styleType.GetHashCode ());
  131. }
  132. }
  133. }
  134. else
  135. {
  136. bool replaced = equipedData.ReplaceCustomize (null, equip);
  137. if (replaced) {
  138. SelectEquipedStyle (equipedData.styleType.GetHashCode ());
  139. } else {
  140. holdEquipment = equip;
  141. equipTip.gameObject.SetActive (true);
  142. }
  143. }
  144. }
  145. public void ClearHoldEquipment()
  146. {
  147. holdEquipment = null;
  148. equipTip.gameObject.SetActive (false);
  149. }
  150. public void SelectEquipedStyle(int index)
  151. {
  152. ButtonUtil.TabSelected (index, equipedStyleContainer);
  153. equipedData.styleType = EquipedData.GetSytleTypeByCode(index);
  154. ListHelper.FillList<Equipment> (equipedContainer, equipedData.GetCurrentList(), equipedItemPrefab);
  155. }
  156. private static EquipPanel currentPanel;
  157. public static EquipPanel Show()
  158. {
  159. if (currentPanel != null) {
  160. currentPanel.gameObject.SetActive (true);
  161. PopUpManager.AddToMainCanvas (currentPanel.gameObject);
  162. }
  163. else
  164. currentPanel = PopUpManager.AddPopUp<EquipPanel> (Resources.Load<GameObject> ("Prefabs/UI/EquipPanel/EquipPanel"), null, true);
  165. currentPanel.Open ();
  166. return currentPanel;
  167. }
  168. }