源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

327 行
10 KiB

  1. PetCollectionView = PetCollectionView or BaseClass(BaseItem)
  2. local PetCollectionView = PetCollectionView
  3. function PetCollectionView:__init()
  4. self.base_file = "pet"
  5. self.layout_file = "PetCollectionView"
  6. self.model = PetModel:getInstance()
  7. self.full_screen = true
  8. self.ani_right = 400
  9. self.ani_left = -200
  10. self.cur_select_data = nil
  11. self.current_info_panel_tag = false--属性框:true 技能框:false
  12. self.skill_item_list = {}--技能itemlist
  13. self:Load()
  14. end
  15. function PetCollectionView:Load_callback()
  16. self.nodes = {
  17. "left/previewBtn:obj",--预览按钮
  18. "left/storyBtn:obj",--故事按钮
  19. "mid/raceIcon:img",--种族icon
  20. "con_model",--模型容器
  21. "mid/name:tmp",--名字
  22. "right/ScrollViewCollect/Viewport/Content","right/ScrollViewCollect",--图鉴scrollview
  23. "mid/con_info/con_attr/ScrollViewAttr/Viewport/ContentAttr",--属性框容器
  24. "mid/con_info/con_attr/ScrollViewAttr",--属性框scrollview
  25. "mid/con_info/switchBtn:obj",--切换按钮
  26. "mid/con_info/con_skill:obj","mid/con_info/con_attr:obj",--属性框技能框容器
  27. "mid/con_info/fightText:txt",--战力
  28. "right/rareTab2:img:obj", "right/rareTab3:img:obj", "right/rareTab1:img:obj", "right/rareTab4:img:obj",
  29. "right/rareTab2/rareRed2:obj", "right/rareTab3/rareRed3:obj", "right/rareTab1/rareRed1:obj", "right/rareTab4/rareRed4:obj",
  30. "right/rareTab2/tabText2:tmp", "right/rareTab3/tabText3:tmp", "right/rareTab1/tabText1:tmp", "right/rareTab4/tabText4:tmp",
  31. "mid/msgBg:img",
  32. "mid/con_info/fightLabel", "right/scrollBg:img",
  33. "mid/getWayCon:obj", "mid/getWayCon/goGetDes:obj", "mid/getWayCon/getDes:tmp",
  34. }
  35. self:GetChildren(self.nodes)
  36. -- lua_resM:setImageSprite(self,self.msgBg_img,"petExtra_asset","pet_collect_skill_di")
  37. lua_resM:setOutsideImageSprite(self, self.scrollBg_img, GameResPath.GetPetImage("pet_collection_di"))
  38. self:AddEvents()
  39. if self.need_refreshData then
  40. self:SetData(self.data)
  41. end
  42. end
  43. function PetCollectionView:AddEvents( )
  44. local on_click = function ( click_obj )
  45. if self.switchBtn_obj == click_obj then--切换按钮
  46. self.current_info_panel_tag = not self.current_info_panel_tag
  47. self:UpdateAttrPanelSkillPanelSwitch()
  48. elseif self.previewBtn_obj == click_obj then--进化预览
  49. self.model:Fire(PetConst.OPEN_PET_PREVIEW,self.show_pet_id)
  50. elseif self.storyBtn_obj == click_obj then--故事
  51. self.model:Fire(PetConst.OPEN_PET_STORY_VIEW,self.show_pet_id)
  52. elseif self.rareTab1_obj == click_obj then
  53. self:UpdateCollectScrollView(1)
  54. elseif self.rareTab2_obj == click_obj then
  55. self:UpdateCollectScrollView(2)
  56. elseif self.rareTab3_obj == click_obj then
  57. self:UpdateCollectScrollView(3)
  58. elseif self.rareTab4_obj == click_obj then
  59. self:UpdateCollectScrollView(4)
  60. elseif self.goGetDes_obj == click_obj then
  61. self:OpenGetWay()
  62. end
  63. end
  64. AddClickEvent(self.switchBtn_obj, on_click)
  65. AddClickEvent(self.previewBtn_obj, on_click,LuaSoundManager.SOUND_UI.NONE)
  66. AddClickEvent(self.storyBtn_obj, on_click,LuaSoundManager.SOUND_UI.NONE)
  67. AddClickEvent(self.rareTab1_obj, on_click)
  68. AddClickEvent(self.rareTab2_obj, on_click)
  69. AddClickEvent(self.rareTab3_obj, on_click)
  70. AddClickEvent(self.rareTab4_obj, on_click)
  71. AddClickEvent(self.goGetDes_obj, on_click)
  72. local function on_ans_update_red_dot(tab_id)
  73. if not self.is_loaded then return end
  74. if tab_id == PetConst.RED_DOT_TYPE.Active then
  75. self:RefreshRed()
  76. end
  77. end
  78. self:BindEvent(self.model, PetConst.ANS_UPDATE_RED_DOT, on_ans_update_red_dot)
  79. end
  80. function PetCollectionView:OpenGetWay( )
  81. if not self.cur_select_data then return end
  82. local goods_id = stringtotable(self.cur_select_data.cost)[1][2]
  83. UIToolTipMgr:getInstance():AppendGoodsTips(goods_id, nil, nil,nil,nil,nil,nil,true,true)
  84. end
  85. function PetCollectionView:RefreshRed( )
  86. local red_1 = self.model:GetSingleRareActiveRedDot(1)
  87. local red_2 = self.model:GetSingleRareActiveRedDot(2)
  88. local red_3 = self.model:GetSingleRareActiveRedDot(3)
  89. local red_4 = red_1 or red_2 or red_3
  90. self.rareRed1_obj:SetActive(red_1)
  91. self.rareRed2_obj:SetActive(red_2)
  92. self.rareRed3_obj:SetActive(red_3)
  93. self.rareRed4_obj:SetActive(red_4)
  94. end
  95. function PetCollectionView:UpdateView( )
  96. -- self:UpdateCollectScrollView(self.model:GetPetBySort())
  97. self:UpdateCollectScrollView(4)
  98. self:UpdateAttrPanelSkillPanelSwitch()
  99. self:RefreshRed()
  100. end
  101. --刷新图鉴scrollview
  102. function PetCollectionView:UpdateCollectScrollView(index)
  103. for i=1,4 do
  104. if index ~= i then
  105. lua_resM:setImageSprite(self, self["rareTab"..i.."_img"], "uiComponent_asset","com_empty")
  106. self["tabText"..i.."_tmp"].color = ColorUtil:ConvertHexToRGBColor("9eb3cf")
  107. SetTMPSharedMaterial(self["tabText"..i.."_tmp"], ShaderTools.TMPSharedMaterialType.HKYTW7FFDefault)
  108. else
  109. lua_resM:setImageSprite(self, self["rareTab"..i.."_img"], "pet_asset","pet_top_bar_select")
  110. self["tabText"..i.."_tmp"].color = ColorUtil:ConvertHexToRGBColor("ffffff")
  111. SetTMPSharedMaterial(self["tabText"..i.."_tmp"], ShaderTools.TMPSharedMaterialType.HKYTW7OutlineBlueTab)
  112. end
  113. end
  114. local pet_list = {}
  115. if index == 4 then
  116. pet_list = self.model:GetPetBySort()
  117. else
  118. pet_list = self.model:GetPetRareCfg(index)
  119. end
  120. --图鉴item的点击回调函数
  121. local function select_callback(data)
  122. self.show_pet_id = data.pet_id--记录当前展示中的宠物id
  123. self:UpdatePetInfo(data)
  124. self:UpdateCollectAttrPanel(stringtotable(data.attr_list))--刷新属性框
  125. self:UpdateCollectSkillPanel(data.pet_id)--刷新技能框
  126. end
  127. if not self.item_list_com then
  128. self.item_list_com = self:AddUIComponent(UI.ItemListCreator)
  129. end
  130. self.item_list_com:Reset()
  131. self.model.select_collect_item_id = 0
  132. --找到最前面那个可以解锁的宠物index
  133. local jump_index = 1
  134. for i,v in ipairs(pet_list) do
  135. local can_active = self.model:GetSingleActiveRedDot(v.pet_id)
  136. if can_active then
  137. jump_index = i
  138. break
  139. end
  140. end
  141. local info = {
  142. data_list = pet_list,
  143. item_con = self.Content,
  144. item_class = PetCollectItem,
  145. item_width = 112,
  146. item_height = 112+5,
  147. space_x = 10,
  148. space_y = 12-5,
  149. start_x = 15.5,
  150. start_y = -6.5,
  151. scroll_view = self.ScrollViewCollect,
  152. create_frequency = 0.01,
  153. on_update_item = function(item, i, v)
  154. item:SetData(i,v,select_callback,#pet_list)
  155. -- self.item_list_com:IterateItems(function( item, i )
  156. -- item:OnClick(1)--每次进入scrollview时默认选中第一个
  157. -- end)
  158. end,
  159. final_callback = function()
  160. if jump_index ~= 1 then
  161. self.item_list_com:ScrollToItem(jump_index,0)
  162. end
  163. end,
  164. }
  165. self.item_list_com:UpdateItems(info)
  166. self.item_list_com:IterateItems(function( item, i )
  167. item:OnClick(1)
  168. end)
  169. end
  170. --设置属性框和技能框的切换显示
  171. function PetCollectionView:UpdateAttrPanelSkillPanelSwitch()
  172. if self.current_info_panel_tag then--显示属性框
  173. self.con_attr_obj:SetActive(true)
  174. -- self.con_skill_obj:SetActive(false)
  175. else--显示技能框
  176. self.con_attr_obj:SetActive(false)
  177. -- self.con_skill_obj:SetActive(true)
  178. end
  179. end
  180. --刷新属性框
  181. function PetCollectionView:UpdateCollectAttrPanel(attr_list)
  182. local need_attr_list = {}
  183. for k,v in pairs(attr_list) do
  184. local data = {v[1],v[2]}
  185. table.insert(need_attr_list,data)
  186. end
  187. --刷新战力
  188. self.fightText_txt.text = GetFighting(need_attr_list)
  189. SetAnchoredPositionX(self.fightLabel,52-self.fightText_txt.preferredWidth/2-45)
  190. local is_base_attr = true
  191. if not self.attr_list_com then
  192. self.attr_list_com = self:AddUIComponent(UI.ItemListCreator)
  193. end
  194. local info = {
  195. data_list = attr_list,
  196. item_con = self.ContentAttr,
  197. item_class = PetCollectAttrItem,
  198. -- item_width = 180,
  199. item_height = 47,
  200. -- space_x = -3,
  201. space_y = -3,
  202. start_y = 0,
  203. start_x = 0,
  204. scroll_view = self.ScrollViewAttr,
  205. create_frequency = 0.01,
  206. on_update_item = function(item, i, v)
  207. item:SetData(i,v,is_base_attr)
  208. end,
  209. }
  210. self.attr_list_com:UpdateItems(info)
  211. end
  212. --刷新技能框
  213. function PetCollectionView:UpdateCollectSkillPanel(pet_id)--pet_id
  214. local skill_table = {}
  215. for i=1,4 do
  216. local data = self.model:GetPetSkillCfg(pet_id,i)--通过id和槽位获取技能配置
  217. if data then
  218. table.insert(skill_table,data)
  219. end
  220. end
  221. local pet_data = self.model:GetPetListById(pet_id)
  222. local pet_stage = pet_data and pet_data.pet_stage or 0
  223. local pet_star = pet_data and pet_data.pet_star or 0
  224. for k,v in pairs(self.skill_item_list) do
  225. v:SetVisible(false)
  226. end
  227. for i,v in ipairs(skill_table) do
  228. local item = self.skill_item_list[i]
  229. if not item then
  230. item = PetCollectSkillItem.New(self.con_skill)
  231. self.skill_item_list[i] = item
  232. end
  233. item:SetVisible(true)
  234. item:SetData(v,pet_id,1)
  235. item:SetPosition(17+95*(i-1),-6)
  236. end
  237. end
  238. --刷新形象、名字等的显示
  239. function PetCollectionView:UpdatePetInfo(pet_data)
  240. self.cur_select_data = pet_data and pet_data or nil
  241. lua_resM:setImageSprite(self, self.raceIcon_img, "pet_asset", "pet_race_"..pet_data.pet_race,true)
  242. local get_des_cfg = PetConst.PetGetWayDes[pet_data.pet_id]
  243. if get_des_cfg then
  244. self.getWayCon_obj:SetActive(true)
  245. self.getDes_tmp.text = get_des_cfg.des
  246. SetAnchoredPositionX(self.goGetDes,-45+self.getDes_tmp.preferredWidth/2+45)
  247. else
  248. self.getWayCon_obj:SetActive(false)
  249. end
  250. --设置姓名
  251. local pet_stage = 1
  252. local show_figure_id = pet_data.figure_id
  253. --取当前最高表现的资源id
  254. -- local my_pet_data = self.model:GetPetListById(pet_data.pet_id)
  255. -- if my_pet_data then
  256. -- pet_stage = my_pet_data.pet_stage
  257. -- show_figure_id = self.model:GetPetCfg(my_pet_data.pet_id,my_pet_data.pet_star).figure_id
  258. -- end
  259. self.name_tmp.text = Trim(pet_data.pet_name)
  260. SetAnchoredPositionX(self.raceIcon,15-self.name_tmp.preferredWidth/2-20)
  261. local res_data = {
  262. father_node = self,
  263. transform = self.con_model,
  264. fashion_type = FuncOpenModel.TypeId.Pet,
  265. figure_id = show_figure_id,
  266. ui_model_type = UIModelCommon.ModelType.BackModel,
  267. use_green_screen = true,
  268. green_screen_camera_type = 3, -- camera_type:1 主摄像机 2 UI摄像机 3 UIModel摄像机
  269. }
  270. local function delay_method( )
  271. FuncOpenModel:getInstance():SetModelRes(res_data)
  272. end
  273. setTimeout(delay_method, 0.02)
  274. end
  275. function PetCollectionView:SetData( data )
  276. self.data = data
  277. if self.is_loaded then
  278. self.need_refreshData = false
  279. self:UpdateView()
  280. else
  281. self.need_refreshData = true
  282. end
  283. end
  284. function PetCollectionView:__delete( )
  285. for i, v in ipairs(self.skill_item_list) do
  286. v:DeleteMe()
  287. end
  288. self.skill_item_list = {}
  289. end