源战役客户端
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

203 lines
7.5 KiB

  1. -- <*
  2. -- @Author: Saber
  3. -- @Description: 圣物左侧佩戴装备节点
  4. -- *>
  5. PsionicArmorEquipItem = PsionicArmorEquipItem or BaseClass(BaseItem)
  6. local PsionicArmorEquipItem = PsionicArmorEquipItem
  7. function PsionicArmorEquipItem:__init(parent_wnd,prefab_asset,layer_name)
  8. self.base_file = "psionic"
  9. self.layout_file = "PsionicArmorEquipItem"
  10. self.parent_wnd = parent_wnd
  11. self.layer_name = layer_name
  12. self.model = PsionicModel:getInstance()
  13. self.goods_model = GoodsModel:getInstance()
  14. self.is_selected = false
  15. self:Load()
  16. end
  17. function PsionicArmorEquipItem:Load_callback()
  18. local nodes = {
  19. "add_btn:obj",
  20. "red_dot:obj",
  21. "item_con",
  22. "selected:obj",
  23. -- "slot_flag:tmp",
  24. "equip_effect_con"
  25. }
  26. self:GetChildren(nodes)
  27. self.circle_item = PsionicArmorCircleItem.New(self.item_con, false, self.layer_name)
  28. self.circle_item:SetAnchoredPosition(0, 0)
  29. self.circle_item:SetItemSize(78, 78)
  30. self.circle_item:SetVisible(false)
  31. self.circle_item:OverrideClickEvent(function(target,x,y)
  32. self:ClickHandler(target,x,y)
  33. end)
  34. self:AddEvents()
  35. if self.need_refreshData then
  36. self:UpdateView()
  37. end
  38. end
  39. -- 需特殊处理隐藏时的特效表现
  40. function PsionicArmorEquipItem:SetVisible(state, force_hide)
  41. BaseItem.SetVisible(self, state, force_hide)
  42. if not state then
  43. self:ClearUIEffect(self.equip_effect_con)
  44. self.showing_equip_effect = false
  45. end
  46. end
  47. function PsionicArmorEquipItem:AddEvents( )
  48. local function click_event(target)
  49. if target == self.add_btn_obj then
  50. self:OnAddBtnClick()
  51. end
  52. end
  53. AddClickEvent(self.add_btn_obj, click_event, LuaSoundManager.SOUND_UI.NONE)
  54. -- 对应装备位置的属性更新之后刷新数据
  55. local function update_equip_data(slot)
  56. if self.slot == slot then
  57. self:UpdateView()
  58. if self.data then -- 存在数据的情况
  59. -- 魂力球激活特效
  60. if not self.showing_equip_effect then
  61. local function call_back( )
  62. self.showing_equip_effect = false
  63. end
  64. self:ClearUIEffect(self.equip_effect_con)
  65. self:AddUIEffect("ui_hunliqiudianliang", self.equip_effect_con, self.layer_name, Vector3(0,0,0), 3, true, 0.6, nil, call_back)
  66. self.showing_equip_effect = true
  67. end
  68. end
  69. end
  70. end
  71. self:BindEvent(self.model, PsionicConst.UPDATE_PISIONIC_EQUIP_ARMOR, update_equip_data)
  72. local function update_armor_red(tab_id)
  73. if not tab_id or
  74. tab_id == PsionicConst.TabId.PArmor or
  75. tab_id == PsionicConst.TabId.PAdvance or
  76. tab_id == PsionicConst.TabId.PWash or
  77. tab_id == PsionicConst.TabId.PSkill then
  78. self:UpdateArmorRed()
  79. end
  80. end
  81. self:BindEvent(self.model, PsionicConst.UPDATE_RED_BY_TABID, update_armor_red)
  82. end
  83. function PsionicArmorEquipItem:SetData( slot, flag, show_flag, equip_callback, skill_callback )
  84. -- self.data = data
  85. self.slot = slot + 3 -- 槽位即道具子id,从4开始,需要+3映射
  86. self.flag = flag or PsionicConst.ArmorItemFlag.Equiped -- 决定这个装备要展示的Tip操作按钮的内容
  87. self.show_flag = show_flag -- 根据当前主界面页签不同,来区分点击逻辑的不同
  88. self.equip_callback = equip_callback -- 装备进阶回调
  89. self.skill_callback = skill_callback -- 技能页签回调
  90. if self.is_loaded then
  91. self.need_refreshData = false
  92. self:UpdateView()
  93. else
  94. self.need_refreshData = true
  95. end
  96. end
  97. function PsionicArmorEquipItem:UpdateView( )
  98. self.data = self.goods_model:GetPsionicEquipBySlot(self.slot)
  99. -- self.slot_flag_tmp.text = PsionicConst.EquipSlotName[self.slot]
  100. if not self.data then
  101. self.circle_item:SetVisible(false)
  102. self.add_btn_obj:SetActive(true)
  103. self.circle_item:SetSlotName(false)
  104. else
  105. self.add_btn_obj:SetActive(false)
  106. -- print("Saber:PsionicArmorEquipItem [62] self.data.goods_id: ",self.data.goods_id)
  107. self.circle_item:SetData(self.data.type_id, 1, nil, self.data.equip_lv)
  108. self.circle_item:SetVisible(true)
  109. self.circle_item:SetSlotName(self.show_flag ~= PsionicConst.TabId.PArmor and self.data.subtype or false)
  110. end
  111. self:UpdateArmorRed()
  112. self:SetSelected(self.is_selected)
  113. end
  114. -- 修改节点的展示标志
  115. function PsionicArmorEquipItem:ChangeShowFlag(show_flag)
  116. self.show_flag = show_flag
  117. self:SetSelected(self.is_selected)
  118. self:UpdateArmorRed()
  119. end
  120. function PsionicArmorEquipItem:ClickHandler(target, x, y)
  121. if not self.data then return end
  122. -- 不同情况的点击回调,不做骚套路,严格区分
  123. if self.show_flag == PsionicConst.TabId.PArmor then
  124. local has_slot_red = self.model:GetPsionicEquipSlotRed(self.slot)
  125. if has_slot_red then -- 该位置有装备穿戴红点就要获取能提升的装备
  126. local power_equip = self.model:GetTopPowerUpEquipInBag(self.slot, true)
  127. if power_equip then
  128. UIToolTipMgr:getInstance():AppendPsionicTips(power_equip, x, y, PsionicConst.ArmorItemFlag.Bag)
  129. else
  130. UIToolTipMgr:getInstance():AppendPsionicTips(self.data, x, y, self.flag)
  131. end
  132. else
  133. UIToolTipMgr:getInstance():AppendPsionicTips(self.data, x, y, self.flag)
  134. end
  135. elseif self.show_flag == PsionicConst.TabId.PAdvance
  136. or self.show_flag == PsionicConst.TabId.PWash then
  137. if self.equip_callback then
  138. self.equip_callback(self.slot)
  139. end
  140. elseif self.show_flag == PsionicConst.TabId.PSkill then
  141. if self.skill_callback then
  142. self.skill_callback(self.slot)
  143. end
  144. end
  145. end
  146. -- 根据不同的情况展示不同的红点
  147. function PsionicArmorEquipItem:UpdateArmorRed( )
  148. if not self.is_loaded then return end
  149. if self.show_flag == PsionicConst.TabId.PArmor then
  150. self.red_dot_obj:SetActive(self.model:GetPsionicEquipSlotRed(self.slot))
  151. elseif self.show_flag == PsionicConst.TabId.PAdvance then
  152. self.red_dot_obj:SetActive(self.model:GetPsionicAdvanceRed(self.slot))
  153. elseif self.show_flag == PsionicConst.TabId.PWash then
  154. self.red_dot_obj:SetActive(self.model:GetPsionicWashSlotRed(self.slot))
  155. elseif self.show_flag == PsionicConst.TabId.PSkill then
  156. self.red_dot_obj:SetActive(self.model:GetPsionicSkillSlotRedCache(self.slot))
  157. end
  158. end
  159. function PsionicArmorEquipItem:OnAddBtnClick( )
  160. local has_slot_red = self.model:GetPsionicEquipSlotRed(self.slot)
  161. if has_slot_red then -- 该位置有装备穿戴红点就要获取能提升的装备
  162. local power_equip = self.model:GetTopPowerUpEquipInBag(self.slot, true)
  163. if power_equip then
  164. UIToolTipMgr:getInstance():AppendPsionicTips(power_equip, x, y, PsionicConst.ArmorItemFlag.Bag)
  165. else
  166. OpenFun.Open(139, 7)
  167. end
  168. else
  169. OpenFun.Open(139, 7)
  170. end
  171. end
  172. function PsionicArmorEquipItem:SetSelected(selected)
  173. self.is_selected = selected
  174. if self.is_loaded then
  175. self.selected_obj:SetActive(self.is_selected and self.show_flag ~= PsionicConst.TabId.PArmor)
  176. end
  177. end
  178. function PsionicArmorEquipItem:__delete( )
  179. if self.circle_item then
  180. self.circle_item:DeleteMe()
  181. self.circle_item = nil
  182. end
  183. self:ClearUIEffect(self.equip_effect_con)
  184. end