源战役客户端
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.

307 lines
9.4 KiB

  1. PetAwakeView = PetAwakeView or BaseClass(BaseItem)
  2. local PetAwakeView = PetAwakeView
  3. function PetAwakeView:__init()
  4. self.base_file = "pet"
  5. self.layout_file = "PetAwakeView"
  6. self.model = PetModel:getInstance()
  7. self.skill_item_list = {}
  8. self.full_screen = true
  9. self.ani_right = 400
  10. self.ani_left = -200
  11. self:Load()
  12. end
  13. function PetAwakeView:Load_callback()
  14. self.nodes = {
  15. "con_model",
  16. "left/ScrollView", "left/ScrollView/Viewport/Content",
  17. "mid/raceIcon:img", "mid/name:tmp", "mid/awakeIcon:obj",
  18. "mid/tip1Before:tmp", "mid/tip1After:tmp", "mid/tip2:tmp",
  19. "right/awakeBtn:obj:img", "right/awakeBtn/awakeText:tmp",
  20. "right/conSkill", "right/conCost",
  21. "right/attrScrollview", "right/attrScrollview/Viewport/attrContent",
  22. "right/fightNum:txt",
  23. "right/costNum:tmp",
  24. "mid/tipStar",
  25. "left/diGray/diArrow:img", "left/topGray/topArrow:img",
  26. "right/rightBg:img",
  27. "right/fightLabel",
  28. "mid/effectCon",
  29. }
  30. self:GetChildren(self.nodes)
  31. lua_resM:setImageSprite(self, self.rightBg_img, "petExtra_asset","pet_awake_right_bg")
  32. self.tip2_tmp.text = "觉醒后技能会强化同时获得<#fdffc2>稀绝</color>百分比<#fdffc2>属性</color>!"
  33. --创建消耗道具
  34. self.cost_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.conCost)
  35. self.cost_item:SetItemSize(78,78)
  36. SetAnchoredPositionY(self.effectCon,-175)
  37. self:AddEvents()
  38. if self.need_refreshData then
  39. self:UpdateView()
  40. end
  41. end
  42. function PetAwakeView:AddEvents( )
  43. local on_click = function ( click_obj )
  44. if self.awakeBtn_obj == click_obj then--觉醒
  45. self.model:Fire(PetConst.REQUEST_CCMD_EVENT,16316,self.pet_id)
  46. end
  47. end
  48. AddClickEvent(self.awakeBtn_obj, on_click)
  49. --刷新觉醒碎片
  50. local update_progress = function(goods_sub_type)
  51. if goods_sub_type == 4 then
  52. self:UpdateCostItems()
  53. end
  54. end
  55. self:BindEvent(self.model, PetConst.UPDATE_PET_GOODS_NUM, update_progress)
  56. local update_view = function()
  57. local no_need_show_model_again = true
  58. self:UpdatePetBaseInfo(no_need_show_model_again)
  59. self:UpdatePetAwakeInfo()
  60. self:AddUIEffect("ui_jinjie", self.effectCon, "UI", nil, 1, false, nil, false)
  61. end
  62. self:BindEvent(self.model, PetConst.PET_AWAKE_SUCCESS, update_view)
  63. local function on_ans_update_red_dot(tab_id)
  64. if not self.data or self.data.pet_id == 0 or not self.is_loaded then return end
  65. if tab_id == PetConst.RED_DOT_TYPE.Awake then
  66. self:UpdateCostItems()
  67. end
  68. end
  69. self:BindEvent(self.model, PetConst.ANS_UPDATE_RED_DOT, on_ans_update_red_dot)
  70. end
  71. function PetAwakeView:UpdateView( )
  72. self:UpdatePetList()
  73. end
  74. function PetAwakeView:UpdatePetList( )
  75. local pet_list = self.model:GetPetListAfterSortFight()
  76. local function click_callback(pet_id)
  77. self.pet_id = pet_id
  78. self.pet_data = self.model:GetPetListById(pet_id)
  79. self.pet_cfg = self.model:GetPetCfg(pet_id,self.pet_data.pet_star)
  80. self.pet_awake_cfg = self.model:GetPetAwakeCfg(self.pet_id)
  81. self:UpdatePetBaseInfo()
  82. self:UpdatePetAwakeInfo()
  83. end
  84. if not self.item_list_com then
  85. self.item_list_com = self:AddUIComponent(UI.ItemListCreator)
  86. end
  87. local info = {
  88. data_list = pet_list,
  89. item_con = self.Content,
  90. item_class = PetAwakeItem,
  91. -- item_width = 125,
  92. item_height = 125,
  93. -- space_x = -5,
  94. space_y = 4,
  95. start_x = 5,
  96. start_y = -2.5,
  97. scroll_view = self.ScrollView,
  98. create_frequency = 0.01,
  99. -- reuse_item_num = 100,
  100. on_update_item = function(item, i, v)
  101. item:SetData(i,v,click_callback)
  102. -- self.item_list_com:IterateItems(function( item, i )
  103. -- item:OnClick(1)--选中第一个
  104. -- end)
  105. end,
  106. on_scroll = function()
  107. self:SetLeftArrowGray(#pet_list)
  108. end,
  109. }
  110. self.item_list_com:UpdateItems(info)
  111. self.item_list_com:IterateItems(function( item, i )
  112. item:OnClick(1)--选中第一个
  113. end)
  114. self:SetLeftArrowGray(#pet_list)
  115. end
  116. function PetAwakeView:UpdatePetBaseInfo(no_need_show_model_again)
  117. self.name_tmp.text = Trim(self.pet_cfg.pet_name)
  118. lua_resM:setImageSprite(self, self.raceIcon_img, "pet_asset", "pet_race_"..self.pet_cfg.pet_race,true)
  119. SetAnchoredPositionX(self.raceIcon,15-self.name_tmp.preferredWidth/2-20)
  120. self.awakeIcon_obj:SetActive(self.pet_data.is_awaken == 1)
  121. SetAnchoredPositionX(self.awakeIcon, 15+self.name_tmp.preferredWidth/2+20)
  122. local pokemon_diamond_effect = self.model:GetPokemonDiamondEffectRes(self.pet_id)
  123. if not no_need_show_model_again then
  124. local res_data = {
  125. father_node = self,
  126. transform = self.con_model,
  127. fashion_type = FuncOpenModel.TypeId.Pet,
  128. figure_id = self.pet_cfg.figure_id,
  129. ui_model_type = UIModelCommon.ModelType.BackModel,
  130. pokemon_diamond_effect = pokemon_diamond_effect,
  131. }
  132. FuncOpenModel:getInstance():SetModelRes(res_data)
  133. end
  134. local enough_star = self.pet_data.pet_star >= self.pet_awake_cfg.need_star
  135. if enough_star then
  136. self.tip1Before_tmp.text = string.format("<#A9C1E1>培养至</color> <#fdffc2>%s</color>",self.pet_awake_cfg.need_star)
  137. self.tip1After_tmp.text = "以上宠物可<#fdffc2>觉醒</color>!"
  138. else
  139. self.tip1Before_tmp.text = string.format("<#ff203a>培养至 %s</color>",self.pet_awake_cfg.need_star)
  140. self.tip1After_tmp.text = "<#ff203a>以上宠物可觉醒!</color>"
  141. end
  142. SetAnchoredPositionX(self.tipStar,self.tip1Before_tmp.preferredWidth+89)
  143. SetAnchoredPositionX(self.tip1After,self.tip1Before_tmp.preferredWidth+89+21)
  144. end
  145. function PetAwakeView:UpdatePetAwakeInfo( )
  146. self.fightNum_txt.text = self.model:GetPetFightById(self.pet_id)--改用前端计算战力
  147. SetAnchoredPositionX(self.fightLabel,115-self.fightNum_txt.preferredWidth/2-55)
  148. local attr_cfg = stringtotable(self.pet_awake_cfg.add_attr)
  149. if not self.attr_list_com then
  150. self.attr_list_com = self:AddUIComponent(UI.ItemListCreator)
  151. end
  152. local info = {
  153. data_list = attr_cfg,
  154. item_con = self.attrContent,
  155. item_class = PetAwakeAttrItem,
  156. -- item_width = 125,
  157. item_height = 36,
  158. -- space_x = -5,
  159. -- space_y = 4,
  160. start_x = 17,
  161. start_y = -14,
  162. scroll_view = self.attrScrollview,
  163. create_frequency = 0.01,
  164. on_update_item = function(item, i, v)
  165. item:SetData(v)
  166. end,
  167. }
  168. self.attr_list_com:UpdateItems(info)
  169. local skill_table = {}
  170. local skill_data = stringtotable(self.pet_awake_cfg.skill_list)
  171. for i,v in ipairs(skill_data) do
  172. local origin_data = DeepCopy(self.model:GetPetSkillCfg(self.pet_id,i,true))
  173. origin_data.skill_talent_id = v
  174. -- local temp = {
  175. -- skill_talent_id = v,
  176. -- }
  177. table.insert(skill_table,origin_data)
  178. end
  179. -- for i=1,3 do
  180. -- if data then
  181. -- table.insert(skill_table,data)
  182. -- end
  183. -- end
  184. for k,v in pairs(self.skill_item_list) do
  185. v:SetVisible(false)
  186. end
  187. for i,v in ipairs(skill_table) do
  188. local item = self.skill_item_list[i]
  189. if not item then
  190. item = PetCollectSkillItem.New(self.conSkill)
  191. self.skill_item_list[i] = item
  192. end
  193. item:SetVisible(true)
  194. item:SetData(v,self.pet_data.pet_id,2)
  195. item:SetPosition(106*(i-1)+18.5,2)
  196. end
  197. self:UpdateCostItems()
  198. end
  199. function PetAwakeView:SetLeftArrowGray(list_num)
  200. local contentSize = GetSizeDeltaY(self.Content)
  201. local _, contenPos = GetAnchoredPosition(self.Content)
  202. if list_num <= 5 then
  203. SetImageGray(self.topArrow_img, true)
  204. SetImageGray(self.diArrow_img, true)
  205. return
  206. end
  207. if contenPos <= 40 then
  208. SetImageGray(self.topArrow_img, true)
  209. SetImageGray(self.diArrow_img, false)
  210. elseif contenPos > 40 and contenPos < contentSize-544-20 then
  211. SetImageGray(self.topArrow_img, false)
  212. SetImageGray(self.diArrow_img, false)
  213. elseif contenPos >= contentSize-544-20 then
  214. SetImageGray(self.topArrow_img, false)
  215. SetImageGray(self.diArrow_img, true)
  216. end
  217. end
  218. function PetAwakeView:UpdateCostItems( )
  219. local cost_data = stringtotable(self.pet_awake_cfg.cost_material)
  220. local goods_type_id = cost_data[1][2]
  221. self.cost_item:SetData(goods_type_id)
  222. local color = GoodsModel:getInstance():GetGoodsColor(goods_type_id)
  223. -- self.costName_txt.text = HtmlColorTxt(GoodsModel:getInstance():getGoodsName(goods_type_id),color)
  224. local goods_name = GoodsModel:getInstance():getGoodsName(goods_type_id)
  225. if self.pet_data.is_awaken == 1 then
  226. self.costNum_tmp.text = "<#2CF86F>已觉醒</color>"
  227. self.can_awake = false
  228. self.awakeBtn_obj:SetActive(false)
  229. else
  230. local goods_num = GoodsModel:getInstance():GetTypeGoodsNum(goods_type_id)
  231. if goods_num < cost_data[1][3] then
  232. self.costNum_tmp.text = string.format("<#fdffc2>%s</color><color=#fa1022>%s</color><color=#f3fcff>/%s</color>",goods_name,goods_num,cost_data[1][3])
  233. else
  234. self.costNum_tmp.text = string.format("<#fdffc2>%s</color><color=#04bd27>%s</color><color=#f3fcff>/%s</color>",goods_name,goods_num,cost_data[1][3])
  235. end
  236. local enough_star = self.pet_data.pet_star >= self.pet_awake_cfg.need_star
  237. self.can_awake = goods_num >= cost_data[1][3] and enough_star
  238. SetImageGray(self.awakeBtn_img, not self.can_awake)
  239. if self.can_awake then
  240. SetTMPSharedMaterial(self.awakeText_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn)
  241. else
  242. SetTMPSharedMaterial(self.awakeText_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
  243. end
  244. self.awakeBtn_obj:SetActive(true)
  245. end
  246. end
  247. function PetAwakeView:SetData( data )
  248. self.data = data
  249. if self.is_loaded then
  250. self.need_refreshData = false
  251. self:UpdateView()
  252. else
  253. self.need_refreshData = true
  254. end
  255. end
  256. function PetAwakeView:__delete( )
  257. for i, v in ipairs(self.skill_item_list) do
  258. v:DeleteMe()
  259. end
  260. self.skill_item_list = {}
  261. if self.cost_item then
  262. UIObjPool:getInstance():PushItem(UIObjPool.UIType.AwardItem,self.cost_item)
  263. self.cost_item = nil
  264. end
  265. self:ClearUIEffect(self.effectCon)
  266. end