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

351 lines
13 KiB

  1. PetTrainingView = PetTrainingView or BaseClass(BaseItem)
  2. local PetTrainingView = PetTrainingView
  3. function PetTrainingView:__init()
  4. self.base_file = "pet"
  5. self.layout_file = "PetTrainingView"
  6. self.model = PetModel:getInstance()
  7. self.full_screen = true
  8. self.ani_right = 400
  9. self.ani_left = -200
  10. self.old_model_effct_play_time = 0
  11. self.current_panel_tag = 0--当前选中的操作栏页签
  12. self:Load()
  13. end
  14. function PetTrainingView:Load_callback()
  15. self.nodes = {
  16. "left/storyBtn:obj","left/previewBtn:obj","left/shareBtn:obj",--故事、预览、分享
  17. "right/topBarCon/feedBtn:obj:img","right/topBarCon/skillBtn:obj:img","right/topBarCon/evolveBtn:obj:img",--操作栏页签按钮
  18. "right/topBarCon/skillBtn/skillTxt:tmp", "right/topBarCon/feedBtn/feedTxt:tmp", "right/topBarCon/evolveBtn/evolveTxt:tmp", --操作栏页签按钮文字
  19. "mid/raceIcon:img",--种族
  20. "con_model",--模型容器
  21. "mid/name:tmp",--名字
  22. "mid/ScrollView","mid/ScrollView/Viewport/Content",--scrollview
  23. "right/raceTxt:tmp","right/dateTxt:tmp",--种族 获取日期
  24. "right/fightTxt:txt",--战力
  25. "right/con_panel",--操作栏容器
  26. "right/msgBg:img",
  27. "right/topBarCon/skillBtn/skillRed:obj", "right/topBarCon/feedBtn/feedRed:obj", "right/topBarCon/evolveBtn/evolveRed:obj", --红点
  28. "right/fightLabel",
  29. "mid/effectCon",
  30. }
  31. self:GetChildren(self.nodes)
  32. lua_resM:setImageSprite(self, self.msgBg_img, "petExtra_asset","pet_msg_bg")
  33. --操作栏背景图
  34. self.panel_img_list = {
  35. [1] = self.feedBtn_img,
  36. [2] = self.evolveBtn_img,
  37. [3] = self.skillBtn_img,
  38. }
  39. --操作栏按钮
  40. self.panel_btn_list = {
  41. [1] = self.feedBtn_obj,
  42. [2] = self.evolveBtn_obj,
  43. [3] = self.skillBtn_obj,
  44. }
  45. --操作栏文本
  46. self.panel_txt_list = {
  47. [1] = self.feedTxt_tmp,
  48. [2] = self.evolveTxt_tmp,
  49. [3] = self.skillTxt_tmp,
  50. }
  51. self:CreatPanelTopBar()--先把操作栏给创建出来
  52. self:AddEvents()
  53. if self.need_refreshData then
  54. self:UpdateView()
  55. end
  56. end
  57. function PetTrainingView:AddEvents( )
  58. local on_click = function ( click_obj )
  59. if self.previewBtn_obj == click_obj then--预览进化
  60. self.model:Fire(PetConst.OPEN_PET_PREVIEW,self.show_pet_id)
  61. elseif self.storyBtn_obj == click_obj then--故事
  62. self.model:Fire(PetConst.OPEN_PET_STORY_VIEW,self.show_pet_id)
  63. elseif self.shareBtn_obj == click_obj then--分享
  64. local color = PetConst.stage_message[self.show_pet_cfg_data.rare_degree].color_str
  65. local herf_content = string.format("<a@Pet@%s@%s>",
  66. tostring(RoleManager.Instance.mainRoleInfo.role_id),
  67. tostring(self.show_pet_data.pet_id))
  68. local content = string.format("%s%s%s%s%s%s","我分享了我的宠物 ",
  69. color,self.show_pet_cfg_data.pet_name,"</color> 哦!",herf_content,"<color=#2cf89a>[前往查看]</color></a>")
  70. ChatModel:getInstance():Fire(ChatModel.SEND_MSG,ChatModel.CHANNEL_WORLD,content,nil,nil,ChatModel.CHAT_COMMON_TYPE.SYSTEM)
  71. Message.show("已分享宠物至世界聊天!","success")
  72. elseif self.panel_btn_list[1] == click_obj then--喂养页签按钮
  73. self:UpdatePanelTopBar(1)
  74. elseif self.panel_btn_list[2] == click_obj then--进化页签按钮
  75. self:UpdatePanelTopBar(2)
  76. elseif self.panel_btn_list[3] == click_obj then--技能宝石页签按钮
  77. self:UpdatePanelTopBar(3)
  78. end
  79. end
  80. AddClickEvent(self.previewBtn_obj, on_click,LuaSoundManager.SOUND_UI.NONE)
  81. AddClickEvent(self.storyBtn_obj, on_click,LuaSoundManager.SOUND_UI.NONE)
  82. AddClickEvent(self.shareBtn_obj, on_click,LuaSoundManager.SOUND_UI.NONE)
  83. AddClickEvent(self.panel_btn_list[1], on_click,LuaSoundManager.SOUND_UI.SWITCH)
  84. AddClickEvent(self.panel_btn_list[2], on_click,LuaSoundManager.SOUND_UI.SWITCH)
  85. AddClickEvent(self.panel_btn_list[3], on_click,LuaSoundManager.SOUND_UI.SWITCH)
  86. local function update_pet_training_view()
  87. self:UpdateView()
  88. end
  89. self:BindEvent(self.model, PetConst.UPDATE_PET_TRAINING_VIEW, update_pet_training_view)
  90. --更新战力显示
  91. local function update_pet_fight(power)
  92. if not self.is_loaded then return end
  93. --设置战力文本
  94. -- self.fightTxt_txt.text = power
  95. self.fightTxt_txt.text = self.model:GetPetFightById(self.show_pet_id)--改用前端计算战力
  96. SetAnchoredPositionX(self.fightLabel,51-self.fightTxt_txt.preferredWidth/2-55)
  97. end
  98. self:BindEvent(self.model, PetConst.UPDATE_PET_FIGHT, update_pet_fight)
  99. --宠物进化之后刷新有阶段显示的地方
  100. local pet_evolve = function(pet_id)
  101. if not self.is_loaded then return end
  102. if pet_id == self.show_pet_id then
  103. local data = self.model:GetPetListById(pet_id)
  104. local cfg_data = self.model:GetPetCfg(data.pet_id, data.pet_star)
  105. self:UpdatePetInfo(data,cfg_data)--刷新宠物信息
  106. end
  107. end
  108. self:BindEvent(self.model, PetConst.PET_EVOLVE, pet_evolve)
  109. --装宝石之后刷新模型展示
  110. local function on_pet_diamond_effect_update(pet_id)
  111. if not self.is_loaded then return end
  112. if pet_id == self.show_pet_id then
  113. local data = self.model:GetPetListById(pet_id)
  114. local cfg_data = self.model:GetPetCfg(data.pet_id, data.pet_star)
  115. self:UpdatePetInfo(data,cfg_data)--刷新宠物信息
  116. end
  117. end
  118. self:BindEvent(self.model, PetConst.UPDATE_PET_DIAMOND_EFFECT, on_pet_diamond_effect_update)
  119. -- local function refresh_feed_red(bool,pet_id)
  120. -- if pet_id ~= self.show_pet_id then return end
  121. -- self.feedRed_obj:SetActive(bool)
  122. -- end
  123. -- self:BindEvent(self.model, PetConst.REFRESH_PET_TRAINING_FEED_RED, refresh_feed_red)
  124. -- local function refresh_evolve_red(bool,pet_id)
  125. -- if pet_id ~= self.show_pet_id then return end
  126. -- self.evolveRed_obj:SetActive(bool)
  127. -- end
  128. -- self:BindEvent(self.model, PetConst.REFRESH_PET_TRAINING_EVOLVE_RED, refresh_evolve_red)
  129. -- local function refresh_diamond_red(bool,pet_id)
  130. -- if pet_id ~= self.show_pet_id then return end
  131. -- self.skillRed_obj:SetActive(bool)
  132. -- end
  133. -- self:BindEvent(self.model, PetConst.REFRESH_PET_DIAMOND_DIAMOND_RED, refresh_diamond_red)
  134. local function onRefreshRed(red_type)
  135. if not self.is_loaded then return end
  136. if not self.show_pet_id or self.show_pet_id == 0 then return end
  137. if red_type == PetConst.RED_DOT_TYPE.Feed then
  138. local feed_red = self.model:GetSingleFeedRedDot(self.show_pet_id)
  139. self.feedRed_obj:SetActive(feed_red)
  140. elseif red_type == PetConst.RED_DOT_TYPE.Evolve then
  141. local evolve_red = self.model:GetSingleEvolveRedDot(self.show_pet_id)
  142. self.evolveRed_obj:SetActive(evolve_red)
  143. elseif red_type == PetConst.RED_DOT_TYPE.Diamond or red_type == PetConst.RED_DOT_TYPE.DiamondCompose then
  144. local skill_red = self.model:GetSingleDiamondRedDot(self.show_pet_id)
  145. local diamond_compose_red = self.model:GetPetRedDotByType(PetConst.RED_DOT_TYPE.DiamondCompose)
  146. self.skillRed_obj:SetActive(skill_red or diamond_compose_red)
  147. end
  148. end
  149. self:BindEvent(self.model, PetConst.ANS_UPDATE_RED_DOT, onRefreshRed)
  150. --宠物喂养后要刷特效
  151. local function play_lv_up_effect_handler()
  152. if not self.is_loaded then return end
  153. --播放属性特效有cd,必须等播完才能再播
  154. local need_play_model_effect = true
  155. if TimeUtil:getServerTimeMs()/1000-self.old_model_effct_play_time <= 1.2 then
  156. need_play_model_effect = false
  157. end
  158. if need_play_model_effect then
  159. self.old_model_effct_play_time = TimeUtil:getServerTimeMs()/1000
  160. self:AddUIEffect("ui_jinjie", self.effectCon, "UI", nil, 1, false, nil, false)
  161. end
  162. end
  163. self:BindEvent(self.model, PetConst.PLAY_PET_LV_UP_EFFECT, play_lv_up_effect_handler)
  164. end
  165. function PetTrainingView:UpdateView( )
  166. self:UpdatePanelTopBar(self.right_tab_index)
  167. self:UpdatePetScrollView()
  168. end
  169. --刷新下方宠物栏
  170. function PetTrainingView:UpdatePetScrollView()
  171. local pet_list = self.model:GetPetListAfterSortByDegreeAndLv()
  172. local empty_data = {pet_id = 0}--加一个空数据用作点击跳转获取宠物使用
  173. if #pet_list < 7 then
  174. for i=1,7-#pet_list do
  175. table.insert(pet_list,empty_data)
  176. end
  177. else
  178. table.insert(pet_list,empty_data)
  179. end
  180. --petitem的点击回调函数 --data追溯至16301协议
  181. local function click_callback(data,cfg_data)
  182. self.feedRed_obj:SetActive(self.model:GetSingleFeedRedDot(data.pet_id))
  183. self.evolveRed_obj:SetActive(self.model:GetSingleEvolveRedDot(data.pet_id))
  184. self.skillRed_obj:SetActive(self.model:GetSingleDiamondRedDot(data.pet_id) or self.model:GetPetRedDotByType(PetConst.RED_DOT_TYPE.DiamondCompose))
  185. self.show_pet_cfg_data = cfg_data
  186. self.show_pet_data = data
  187. self.show_pet_id = data.pet_id--记录当前展示中的宠物id
  188. self:UpdatePetInfo(data,cfg_data)--刷新宠物信息
  189. self.feed_panel:SetData(data,cfg_data)--刷新升级栏
  190. self.evolve_panel:SetData(data,cfg_data)--刷新进化栏
  191. self.skill_panel:SetData(data)
  192. end
  193. if not self.item_list_com then
  194. self.item_list_com = self:AddUIComponent(UI.ItemListCreator)
  195. end
  196. local info = {
  197. data_list = pet_list,
  198. item_con = self.Content,
  199. item_class = PetItem,
  200. item_width = 135,
  201. -- item_height = 175,
  202. space_x = 27,
  203. start_x = 11,
  204. start_y = -17,
  205. scroll_view = self.ScrollView,
  206. -- create_frequency = 0.01,
  207. -- reuse_item_num = 100,
  208. is_scroll_back_on_update = true,
  209. on_update_item = function(item, i, v)
  210. item:SetData(i,v,click_callback)
  211. -- self.item_list_com:IterateItems(function( item, i )
  212. -- item:OnClick(1)--选中第一个
  213. -- end)
  214. end,
  215. }
  216. self.item_list_com:UpdateItems(info)
  217. self.item_list_com:IterateItems(function( item, i )
  218. item:OnClick(1)
  219. end)
  220. end
  221. --创建操作栏topbar
  222. function PetTrainingView:CreatPanelTopBar()
  223. if not self.feed_panel then
  224. self.feed_panel = PetFeedPanel.New(self.con_panel)
  225. end
  226. self.feed_panel:SetVisible(false,true)
  227. if not self.evolve_panel then
  228. self.evolve_panel = PetEvolvePanel.New(self.con_panel)
  229. end
  230. self.evolve_panel:SetVisible(false,true)
  231. if not self.skill_panel then
  232. self.skill_panel = PetSkillPanel.New(self.con_panel)
  233. end
  234. self.skill_panel:SetVisible(false,true)
  235. end
  236. --刷新操作栏topbar
  237. function PetTrainingView:UpdatePanelTopBar(panel_type)
  238. if self.current_panel_tag == panel_type or panel_type < 1 or panel_type > 3 then
  239. return
  240. end
  241. self.current_panel_tag = panel_type
  242. self.right_tab_index = panel_type
  243. for i=1,3 do
  244. --设置按钮的图片样式和按钮文字的颜色样式
  245. if panel_type ~= i then
  246. lua_resM:setImageSprite(self, self.panel_img_list[i], "uiComponent_asset","com_empty")
  247. self.panel_txt_list[i].color = ColorUtil:ConvertHexToRGBColor("9eb3cf")
  248. SetTMPSharedMaterial(self.panel_txt_list[i], ShaderTools.TMPSharedMaterialType.HKYTW7FFDefault)
  249. else
  250. lua_resM:setImageSprite(self, self.panel_img_list[i], "pet_asset", "pet_top_bar_select")
  251. self.panel_txt_list[i].color = ColorUtil:ConvertHexToRGBColor("ffffff")
  252. SetTMPSharedMaterial(self.panel_txt_list[i], ShaderTools.TMPSharedMaterialType.HKYTW7OutlineBlueTab)
  253. end
  254. end
  255. self.feed_panel:SetVisible(panel_type == 1,true)
  256. self.evolve_panel:SetVisible(panel_type == 2,true)
  257. self.skill_panel:SetVisible(panel_type == 3,true)
  258. end
  259. --刷新宠物的各类信息 data追溯至16301协议数据
  260. function PetTrainingView:UpdatePetInfo(data,cfg_data)
  261. --设置姓名
  262. self.name_tmp.text = Trim(cfg_data.pet_name)
  263. SetAnchoredPositionX(self.raceIcon,15-self.name_tmp.preferredWidth/2-20)
  264. --设置种族icon
  265. lua_resM:setImageSprite(self, self.raceIcon_img, "pet_asset", "pet_race_"..cfg_data.pet_race,true)
  266. --设置战力文本
  267. self.fightTxt_txt.text = self.model:GetPetFightById(self.show_pet_id)--改用前端计算战力
  268. SetAnchoredPositionX(self.fightLabel,51-self.fightTxt_txt.preferredWidth/2-55)
  269. --设置获取时间文本
  270. self.dateTxt_tmp.text = string.format("获得日期:<%s>%s</color>", "#ffffff", TimeUtil:timeConversion(data.collect_time,"yyyy年mm月dd日"))
  271. --设置种族文本
  272. self.raceTxt_tmp.text = string.format("种族:<%s>%s</color>", PetConst.PetRace[cfg_data.pet_race].color, PetConst.PetRace[cfg_data.pet_race].str1)
  273. local pokemon_diamond_effect = self.model:GetPokemonDiamondEffectRes(self.show_pet_id)
  274. local res_data = {
  275. father_node = self,
  276. transform = self.con_model,
  277. fashion_type = FuncOpenModel.TypeId.Pet,
  278. figure_id = cfg_data.figure_id,
  279. ui_model_type = UIModelCommon.ModelType.BackModel,
  280. use_green_screen = true,
  281. green_screen_camera_type = 3, -- camera_type:1 主摄像机 2 UI摄像机 3 UIModel摄像机
  282. pokemon_diamond_effect = pokemon_diamond_effect
  283. }
  284. FuncOpenModel:getInstance():SetModelRes(res_data)
  285. end
  286. function PetTrainingView:SetData(right_tab_index)
  287. self.right_tab_index = right_tab_index
  288. if self.is_loaded then
  289. self.need_refreshData = false
  290. self:UpdateView()
  291. else
  292. self.need_refreshData = true
  293. end
  294. end
  295. function PetTrainingView:__delete( )
  296. if self.feed_panel then
  297. self.feed_panel:DeleteMe()
  298. self.feed_panel = nil
  299. end
  300. if self.evolve_panel then
  301. self.evolve_panel:DeleteMe()
  302. self.evolve_panel = nil
  303. end
  304. if self.skill_panel then
  305. self.skill_panel:DeleteMe()
  306. self.skill_panel = nil
  307. end
  308. self:ClearUIEffect(self.effectCon)
  309. end