源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

246 lines
8.1 KiB

  1. PetDiamondChooseView = PetDiamondChooseView or BaseClass(BaseView)
  2. local PetDiamondChooseView = PetDiamondChooseView
  3. function PetDiamondChooseView:__init()
  4. self.base_file = "pet"
  5. self.layout_file = "PetDiamondChooseView"
  6. self.layer_name = "Activity"
  7. self.destroy_imm = true
  8. self.use_background = true
  9. self.change_scene_close = true
  10. self.append_to_ctl_queue = false --是否要添加进界面堆栈
  11. self.need_show_money = false --是否要显示顶部的金钱栏
  12. self.click_bg_toClose = true
  13. self.blur_activity_bg = true
  14. self.use_show_anim = true
  15. self.use_hide_anim = true
  16. self.model = PetModel:getInstance()
  17. self.choose_diamond_id = 0
  18. self.item_list = {}
  19. self.loop_mgr = LoopScrowViewMgr.New()
  20. self.load_callback = function ()
  21. self:LoadSuccess()
  22. self:AddEvent()
  23. end
  24. self.open_callback = function ( )
  25. self:OpenSuccess()
  26. end
  27. self.destroy_callback = function ( )
  28. self:DestroySuccess()
  29. end
  30. end
  31. --pet_id宠物id,slot_id槽位id
  32. function PetDiamondChooseView:Open(pet_id,slot_id)
  33. self.pet_id = pet_id
  34. self.slot_id = slot_id
  35. BaseView.Open(self)
  36. end
  37. function PetDiamondChooseView:LoadSuccess()
  38. local nodes = {
  39. "bg:raw",--背景
  40. "changeBtn:img:obj",--替换按钮
  41. "changeBtn/changeTxt:tmp",
  42. "ScrollView/Viewport/Content","ScrollView",--宝石容器
  43. "des1:tmp","fight2:tmp","fight1:tmp","name1:tmp","des2:tmp","name2:tmp",
  44. "goText:obj",--前往
  45. "awardCon2:obj","awardCon1:obj",
  46. "nowDiamond",
  47. }
  48. self:GetChildren(nodes)
  49. lua_resM:setOutsideRawImage(self, self.bg_raw,GameResPath.GetViewBigBg("pet_diamond_choose_bg"),false)
  50. self.awardItem1 = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.awardCon1)
  51. self.awardItem2 = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.awardCon2)
  52. self.awardItem1:SetItemSize(62, 62)
  53. self.awardItem2:SetItemSize(62, 62)
  54. end
  55. function PetDiamondChooseView:AddEvent()
  56. local on_click = function ( click_obj )
  57. if self.changeBtn_obj == click_obj then--替换按钮
  58. if self.choose_diamond_id ~= 0 then
  59. if self.model.is_true_race then
  60. local data = GoodsModel:getInstance():GetPetDiamondDicByType()
  61. self.model:Fire(PetConst.REQUEST_CCMD_EVENT,16305,self.pet_id,self.slot_id,self.choose_diamond_id,data[self.choose_diamond_id].goods_id)
  62. else
  63. Message.show("只能镶嵌相应种族的宝石","fault")
  64. end
  65. else
  66. Message.show("没有选中宝石","fault")
  67. end
  68. elseif self.goText_obj == click_obj then
  69. OpenFun.Open(153,1)
  70. end
  71. end
  72. AddClickEvent(self.changeBtn_obj, on_click,LuaSoundManager.SOUND_UI.NONE)
  73. AddClickEvent(self.goText_obj, on_click,LuaSoundManager.SOUND_UI.NONE)
  74. --刷新宝石数量时
  75. local update_feed_goods_num = function(goods_sub_type)
  76. if goods_sub_type == 3 then
  77. self:UpdateDiamondBag()
  78. end
  79. end
  80. self:BindEvent(self.model, PetConst.UPDATE_PET_GOODS_NUM, update_feed_goods_num)
  81. --镶嵌宝石成功后关闭界面
  82. local update_feed_goods_num = function()
  83. if not self.is_loaded then return end
  84. self:Close()
  85. end
  86. self:BindEvent(self.model, PetConst.UPDATE_PET_DIAMOND_CON, update_feed_goods_num)
  87. end
  88. function PetDiamondChooseView:OpenSuccess()
  89. self:UpdateView()
  90. end
  91. function PetDiamondChooseView:UpdateView()
  92. self:UpdateNowDiamond()
  93. self:UpdateDiamondBag()
  94. -- self:UpdateChooseDiamond()
  95. end
  96. --刷新当前装备的宝石信息栏
  97. function PetDiamondChooseView:UpdateNowDiamond()
  98. --拿到当前槽位的宝石装备信息
  99. local data = self.model:GetPetDiamondDataByIdAndSlot(self.pet_id,self.slot_id)
  100. if data then
  101. local diamond_cfg = self.model:GetPetDiamondCfg(data.diamond_id)
  102. local color = GoodsModel:getInstance():GetGoodsColor(data.diamond_id)
  103. self.name1_tmp.text = HtmlColorTxt(Trim(diamond_cfg.diamond_name),color)
  104. self.changeTxt_tmp.text = "替换"
  105. self.des1_tmp.text = Trim(diamond_cfg.diamond_desc)
  106. local attr_data = stringtotable(diamond_cfg.add_attr_list)
  107. self.fight1_tmp.text = string.format("战力:<#fdffc2>%s</color>",GetFighting(attr_data))
  108. self.awardCon1_obj:SetActive(true)
  109. self.awardItem1:SetData(data.diamond_id)
  110. else--没有装备信息时
  111. self.name1_tmp.text = "暂无宝石"
  112. self.changeTxt_tmp.text = "镶嵌"
  113. self.des1_tmp.text = "宝石效果:暂未镶嵌宝石"
  114. self.fight1_tmp.text = ""
  115. self.awardCon1_obj:SetActive(false)
  116. end
  117. end
  118. --刷新选中的宝石信息栏
  119. function PetDiamondChooseView:UpdateChooseDiamond(choose_diamond_id)
  120. SetImageGray(self.changeBtn_img,false)
  121. SetTMPSharedMaterial(self.changeTxt_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
  122. self.model.is_true_race = true -- 设置标识位,当前种族的宠物能否使用这个宝石
  123. self.choose_diamond_id = choose_diamond_id or 0
  124. if not choose_diamond_id or choose_diamond_id == 0 then--表示没有选中宝石
  125. self.name2_tmp.text = "暂无宝石"
  126. self.des2_tmp.text = "宝石效果:暂未镶嵌宝石"
  127. self.fight2_tmp.text = ""
  128. self.awardCon2_obj:SetActive(false)
  129. else
  130. --根据宝石id获取相应配置
  131. local diamond_cfg = self.model:GetPetDiamondCfg(choose_diamond_id)
  132. if not diamond_cfg then
  133. Message.show("没找到对应配置","fault")
  134. return
  135. end
  136. local is_true_race = self.model:GetPetRaceById(self.pet_id) == diamond_cfg.need_race
  137. SetImageGray(self.changeBtn_img,not is_true_race)
  138. if is_true_race then
  139. SetTMPSharedMaterial(self.changeTxt_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn)
  140. else
  141. SetTMPSharedMaterial(self.changeTxt_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
  142. end
  143. self.model.is_true_race = is_true_race
  144. local color = GoodsModel:getInstance():GetGoodsColor(choose_diamond_id)
  145. self.name2_tmp.text = HtmlColorTxt(Trim(diamond_cfg.diamond_name),color)
  146. self.des2_tmp.text = Trim(diamond_cfg.diamond_desc)--宝石描述
  147. local attr_data = stringtotable(diamond_cfg.add_attr_list)
  148. self.fight2_tmp.text = string.format("战力:<#fdffc2>%s</color>",GetFighting(attr_data))
  149. self.awardCon2_obj:SetActive(true)
  150. self.awardItem2:SetData(choose_diamond_id)
  151. end
  152. end
  153. --刷新技能石背包
  154. function PetDiamondChooseView:UpdateDiamondBag()
  155. local list = GoodsModel:getInstance():GetPetDiamondDicByType() or {}--取到技能石物品信息
  156. --技能石物品信息以goodsid为键,无序,所以我们搞一个有序的列表goods_list
  157. local goods_list = {}
  158. for k,v in pairs(list) do
  159. v.need_race = self.model:GetPetDiamondCfg(v.type_id).need_race
  160. v.is_now_race = v.need_race == self.model:GetPetRaceById(self.pet_id) and 1 or 2
  161. v.color = GoodsModel:getInstance():GetGoodsBasicByTypeId(v.type_id).color
  162. local diamond_cfg = self.model:GetPetDiamondCfg(v.type_id)
  163. local attr_data = stringtotable(diamond_cfg.add_attr_list)
  164. v.fight = GetFighting(attr_data)
  165. table.insert(goods_list,v)
  166. end
  167. --需要进行排序,是当前宠物种族使用的宝石靠前,然后根据品质、战力排序
  168. local arg = {"is_now_race","color","fight"}
  169. local condition = {Array.LOWER,Array.UPPER,Array.UPPER}
  170. SortTools.MoreKeysSorter(goods_list, arg, condition)
  171. local diamondItemType = 1
  172. for k = 1,30 do
  173. local item = self.item_list[k]
  174. if item == nil then
  175. item = PetDiamondItem.New(self.Content)
  176. item:SetVisible(true)
  177. self.item_list[k] = item
  178. end
  179. end
  180. local function select_callback(choose_diamond_id)
  181. --点击钻石后刷新当前选中宝石栏信息
  182. self:UpdateChooseDiamond(choose_diamond_id)
  183. end
  184. self.loop_mgr:Init(self.ScrollView,self.Content,5,70,72,
  185. function(item,index,realIndex )
  186. --最后一个参数是新加的需求,需要根据种族判断该宝石能不能用,所以要传进petid去用
  187. item:SetData(diamondItemType,index,goods_list[realIndex],select_callback,self.pet_id)
  188. item:OnClick(1)
  189. end,0,0,{x=6, y=-6.5})
  190. self.loop_mgr:InitChildren(self.item_list, 30)
  191. self.loop_mgr:RestToBeginning()
  192. self.loop_mgr:SetContentSizeData()
  193. end
  194. function PetDiamondChooseView:DestroySuccess( )
  195. for k,v in pairs(self.item_list) do
  196. v:DeleteMe()
  197. end
  198. self.item_list = {}
  199. if self.awardItem1 then
  200. UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.awardItem1)
  201. self.awardItem1 = nil
  202. end
  203. if self.awardItem2 then
  204. UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem, self.awardItem2)
  205. self.awardItem2 = nil
  206. end
  207. end