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

368 lines
12 KiB

  1. PetEvolveSuccessView = PetEvolveSuccessView or BaseClass(BaseView)
  2. local PetEvolveSuccessView = PetEvolveSuccessView
  3. function PetEvolveSuccessView:__init()
  4. self.base_file = "pet"
  5. self.layout_file = "PetEvolveSuccessView"
  6. self.layer_name = "Activity"
  7. self.destroy_imm = true
  8. self.use_background = true
  9. self.change_scene_close = true
  10. self.hide_maincancas = true
  11. -- self.append_to_ctl_queue = true --是否要添加进界面堆栈
  12. self.need_show_money = false --是否要显示顶部的金钱栏
  13. self.is_set_zdepth = true
  14. self.click_bg_toClose = false
  15. self.close_fog = true
  16. self.click_bg_toClose = true
  17. self.blur_activity_bg = true
  18. -- self.use_show_anim = true
  19. -- self.use_hide_anim = true
  20. self.model = PetModel:getInstance()
  21. self.skill_item_list = {}
  22. self.load_callback = function ()
  23. self:LoadSuccess()
  24. self:AddEvent()
  25. end
  26. self.open_callback = function ( )
  27. self:OpenSuccess()
  28. end
  29. self.destroy_callback = function ( )
  30. self:DestroySuccess()
  31. end
  32. end
  33. function PetEvolveSuccessView:Open(pet_id,action_type)
  34. self.pet_id = pet_id
  35. self.action_type = action_type
  36. BaseView.Open(self)
  37. end
  38. function PetEvolveSuccessView:LoadSuccess()
  39. local nodes = {
  40. "raceIcon:img",
  41. "modelCon",
  42. "attr_ScrollView/Viewport/Content","attr_ScrollView",
  43. "skillCon",
  44. "name:tmp",
  45. "tips:tmp",
  46. "fightCon/fightTxt:txt","fightCon:obj",
  47. "fightCon/fightUpTxt:tmp","fightCon/fightLabel",
  48. "fightCon/arrow:obj",
  49. "starCon1:obj", "starCon2:obj",
  50. "title:img",
  51. "arrow2:obj",
  52. "closeTimer:tmp",
  53. "rightBg2:raw:obj", "rightBg1:raw:obj",
  54. }
  55. self:GetChildren(nodes)
  56. lua_resM:setOutsideRawImage(self,self.rightBg1_raw,GameResPath.GetViewBigBg("pet_evolve_succese_right_bg_1"))
  57. lua_resM:setOutsideRawImage(self,self.rightBg2_raw,GameResPath.GetViewBigBg("pet_evolve_succese_right_bg_2"))
  58. local close_callback = function()
  59. self:Close()
  60. end
  61. self.tabWindowComponent = UITabWindow.New(self.transform, nil, nil, close_callback, self.background_wnd,
  62. self.transform,UITabWindow.SizeSmallNoTab,nil,nil,nil)
  63. self.tabWindowComponent:SetBackgroundRes("pet_evolve_succese_bg")
  64. if self.action_type == 1 then
  65. self.tabWindowComponent:SetTitleText("激活成功")
  66. lua_resM:setImageSprite(self, self.title_img, "petExtra_asset","pet_evolve_success_title_1")
  67. else
  68. self.tabWindowComponent:SetTitleText("进化成功")
  69. lua_resM:setImageSprite(self, self.title_img, "petExtra_asset","pet_evolve_success_title_2")
  70. end
  71. -- local function bg_back_func( ... )
  72. -- if self.background_wnd and self.background_wnd:GetComponent("RawImageExtend") then
  73. -- self:MoveUIToBack(self.background_wnd:GetComponent("RawImageExtend"))
  74. -- end
  75. -- self:MoveUIToBack(self.tabWindowComponent.win_bg)
  76. -- end
  77. -- if self.background_wnd then
  78. -- bg_back_func()
  79. -- else
  80. -- self.bg_back_func = bg_back_func
  81. -- end
  82. self.star1 = {}--星级
  83. for i=1,5 do
  84. self.star1[i] = self:GetChild("starCon1/star"..i):GetComponent("Image")
  85. end
  86. self.star2 = {}--星级
  87. for i=1,5 do
  88. self.star2[i] = self:GetChild("starCon2/star"..i):GetComponent("Image")
  89. end
  90. end
  91. function PetEvolveSuccessView:AddEvent()
  92. end
  93. function PetEvolveSuccessView:OpenSuccess()
  94. self:UpdateView()
  95. end
  96. function PetEvolveSuccessView:UpdateView()
  97. local pet_data = self.model:GetPetListById(self.pet_id)
  98. local pet_cfg = self.model:GetPetCfg(self.pet_id,pet_data.pet_star)
  99. --阶段和星级
  100. if self.action_type == 1 then--激活
  101. self.starCon1_obj:SetActive(false)
  102. self.starCon2_obj:SetActive(false)
  103. self.arrow2_obj:SetActive(false)
  104. self.rightBg1_obj:SetActive(true)
  105. self.rightBg2_obj:SetActive(false)
  106. SetAnchoredPositionY(self.fightCon,133)
  107. -- local max_star = self.model:GetMaxStarInStage(self.pet_id,pet_data.pet_star)
  108. -- lua_resM:setImageSprite(self, self.star1[1], "pet_asset", PetConst.stage_message[1].star_res,true)
  109. -- self.star1[1].gameObject:SetActive(true)
  110. -- self:AddUIEffect("ui_jinjiestar", self.star1[1].transform, "Activity", nil, 1, false)
  111. -- for i=2,max_star do
  112. -- self.star1[i].gameObject:SetActive(false)
  113. -- end
  114. else
  115. self.starCon1_obj:SetActive(true)
  116. self.starCon2_obj:SetActive(true)
  117. self.arrow2_obj:SetActive(true)
  118. self.rightBg1_obj:SetActive(false)
  119. self.rightBg2_obj:SetActive(true)
  120. SetAnchoredPositionY(self.fightCon,126)
  121. local max_star = self.model:GetMaxStarInStage(self.pet_id,pet_data.pet_star)
  122. local show_star = self.model:GetNowShowPetStar(pet_data.pet_star)
  123. for i=1,show_star do
  124. lua_resM:setImageSprite(self, self.star2[i], "pet_asset", PetConst.stage_message[pet_data.pet_stage].star_res,true)
  125. self.star2[i].gameObject:SetActive(true)
  126. end
  127. for i=show_star+1,max_star do
  128. self.star2[i].gameObject:SetActive(false)
  129. end
  130. self:AddUIEffect("ui_jinjiestar", self.star2[show_star].transform, "Activity", nil, 1, false)
  131. local max_star_next = self.model:GetMaxStarInStage(self.pet_id,pet_data.pet_star-1)
  132. local show_star_next = self.model:GetNowShowPetStar(pet_data.pet_star-1)
  133. local stage_next = math.ceil((pet_data.pet_star-1-0.5)/5)
  134. for i=1,show_star_next do
  135. lua_resM:setImageSprite(self, self.star1[i], "pet_asset", PetConst.stage_message[stage_next].star_res,true)
  136. self.star1[i].gameObject:SetActive(true)
  137. end
  138. for i=show_star_next+1,max_star_next do
  139. self.star1[i].gameObject:SetActive(false)
  140. end
  141. end
  142. --战力
  143. local old_data = self.model:GetPetOldDataById(pet_data.pet_id)--宠物进化之前的旧数据
  144. self.fightTxt_txt.text = self.model:GetPetFightById(pet_data.pet_id)
  145. SetAnchoredPositionX(self.fightLabel,-25-self.fightTxt_txt.preferredWidth/2-35)
  146. local up_num
  147. if not old_data then
  148. up_num = self.model:GetPetFightById(pet_data.pet_id)
  149. else
  150. up_num = self.model:GetPetFightById(pet_data.pet_id) - self.model:GetPetFightByData(old_data)
  151. end
  152. self.fightUpTxt_tmp.text = up_num
  153. --名字
  154. self.name_tmp.text = Trim(pet_cfg.pet_name)
  155. SetAnchoredPositionX(self.raceIcon,-169-self.name_tmp.preferredWidth/2-20)
  156. --种族
  157. lua_resM:setImageSprite(self, self.raceIcon_img, "pet_asset", "pet_race_"..pet_cfg.pet_race,true)
  158. --进化提示
  159. if pet_data.pet_stage < 3 then
  160. local need_star_1 = self.model:GetStarCanUnlockFigure(self.pet_id,2)
  161. local need_star_2 = self.model:GetStarCanUnlockFigure(self.pet_id,3)
  162. local evolve_times = pet_data.pet_stage == 1 and need_star_1-pet_data.pet_star or need_star_2-pet_data.pet_star
  163. self.tips_tmp.text = string.format("再进化<#f3fcff>%s</color>次可<#fdffc2>解锁</color>新形态", evolve_times)
  164. elseif pet_data.pet_stage == 3 then
  165. self.tips_tmp.text = "当前已是最高形态 "
  166. end
  167. --属性提升栏
  168. self:UpdateAttr(pet_data,pet_cfg)
  169. --技能栏
  170. self:UpdateSkillCon()
  171. local res_data = {
  172. layer_name = "Activity",
  173. father_node = self,
  174. transform = self.modelCon,
  175. fashion_type = FuncOpenModel.TypeId.Pet,
  176. figure_id = pet_cfg.figure_id,
  177. position = Vector3(0,-160,-500),
  178. ui_model_type = UIModelCommon.ModelType.Model,
  179. }
  180. FuncOpenModel:getInstance():SetModelRes(res_data)
  181. self:UpdateTime()
  182. end
  183. --刷新属性值
  184. function PetEvolveSuccessView:UpdateAttr(data,cfg_data)
  185. --获取计算好的属性值
  186. local diamond_data = self.model:GetPetDiamondDataById(data.pet_id)--取出宝石所加的属性一并计算
  187. local awake_cfg = nil
  188. if data.is_awaken == 1 then
  189. awake_cfg = self.model:GetPetAwakeCfg(data.pet_id)
  190. end
  191. local now_attr_list = self.model:GetPetAttrList(data.pet_lv,stringtotable(cfg_data.attr_list),diamond_data,awake_cfg,data.pet_star,data.pet_id)
  192. if self.action_type == 1 then--刚激活
  193. self:UpdateAttrScrollView(now_attr_list,true)
  194. else
  195. local old_data = self.model:GetPetOldDataById(data.pet_id)--宠物进化之前的旧数据
  196. local old_cfg = self.model:GetPetCfg(old_data.pet_id, old_data.pet_star)
  197. local old_attr_list = self.model:GetPetAttrList(old_data.pet_lv, stringtotable(old_cfg.attr_list), diamond_data,awake_cfg,old_data.pet_star,old_data.pet_id)
  198. local final_attr_list = self.model:MergeAttrList2(now_attr_list, old_attr_list)
  199. self:UpdateAttrScrollView(final_attr_list, false)
  200. end
  201. end
  202. --刷新属性栏scrollview
  203. function PetEvolveSuccessView:UpdateAttrScrollView(attr_list,is_active_now)
  204. -- --解决高级属性名字过长导致文字重叠的问题:普通属性一行摆两个,高级属性一行摆一个
  205. -- --思路:ItemListCreator不能自由控制一行摆几个,因此在高级属性后面插入一个空属性隐藏显示,模拟出一行只摆一个属性的效果
  206. -- --step1:排序属性列表,把高级属性排后面
  207. -- local _sort = function( a,b )
  208. -- if a[1] < b[1] then
  209. -- return true
  210. -- end
  211. -- end
  212. -- table.sort( attr_list, _sort )
  213. -- --step2:找到普通属性和高级属性的分界点
  214. -- local divide_index = 0--分界点下标
  215. -- local max_index = #attr_list--属性个数
  216. -- for i,v in ipairs(attr_list) do
  217. -- --找到高级属性,标记分界点
  218. -- if WordManager:GetAttrIsSpecial(v[1]) then
  219. -- divide_index = i-1
  220. -- break
  221. -- end
  222. -- end
  223. -- --step3:分情况操作
  224. -- --偶数个普通属性时,直接对后面的高级属性依次插入空属性即可
  225. -- --奇数个普通属性时,先在最后一个普通属性后插入空属性,让高级属性掉到下一行位置去
  226. -- if divide_index ~= 0 then
  227. -- if divide_index %2 == 0 then
  228. -- for i=1,max_index-divide_index do
  229. -- table.insert(attr_list,divide_index+2*i,{0})
  230. -- end
  231. -- else
  232. -- table.insert(attr_list,divide_index+1,{0})
  233. -- for i=1,max_index-divide_index do
  234. -- table.insert(attr_list,divide_index+2*i+1,{0})
  235. -- end
  236. -- end
  237. -- end
  238. ------------------
  239. if not self.attr_list_com then
  240. self.attr_list_com = self:AddUIComponent(UI.ItemListCreator)
  241. end
  242. local info = {
  243. data_list = attr_list,
  244. item_con = self.Content,
  245. item_class = PetAttrItem,
  246. item_width = 385,
  247. item_height = 47,
  248. -- space_x = -7,
  249. space_y = -5,
  250. start_x = 1,
  251. start_y = 2,
  252. scroll_view = self.attr_ScrollView,
  253. create_frequency = 0.01,
  254. on_update_item = function(item, i, v)
  255. item:SetData(i,v,is_active_now,false,true)
  256. end,
  257. }
  258. self.attr_list_com:UpdateItems(info)
  259. end
  260. --技能展示
  261. function PetEvolveSuccessView:UpdateSkillCon( )
  262. local pet_data = self.model:GetPetListById(self.pet_id)
  263. local pet_stage = pet_data and pet_data.pet_stage or 0
  264. local pet_star = pet_data and pet_data.pet_star or 0
  265. local skill_table = {}
  266. for i=1,4 do
  267. local data = self.model:GetPetSkillCfg(self.pet_id,i,pet_data.is_awaken==1)--通过id和槽位获取技能配置
  268. if data then
  269. table.insert(skill_table,data)
  270. end
  271. end
  272. for k,v in pairs(self.skill_item_list) do
  273. v:SetVisible(false)
  274. end
  275. for i,v in ipairs(skill_table) do
  276. local item = self.skill_item_list[i]
  277. if not item then
  278. item = PetSkillItem.New(self.skillCon)
  279. self.skill_item_list[i] = item
  280. end
  281. item:SetVisible(true)
  282. item:SetData(v,self.pet_id,3)
  283. item:SetPosition(2+83*(i-1),-1)
  284. end
  285. end
  286. function PetEvolveSuccessView:DestroySuccess( )
  287. for i, v in ipairs(self.skill_item_list) do
  288. v:DeleteMe()
  289. end
  290. self.skill_item_list = {}
  291. if self.tabWindowComponent then
  292. self.tabWindowComponent:DeleteMe()
  293. self.tabWindowComponent = nil
  294. end
  295. if self.timer_id then
  296. GlobalTimerQuest:CancelQuest(self.timer_id)
  297. self.timer_id = nil
  298. end
  299. for i=1,5 do
  300. self:ClearUIEffect(self.star1[i].transform)
  301. self:ClearUIEffect(self.star2[i].transform)
  302. end
  303. --特定宠物激活成功要弹出道具提示
  304. if self.action_type == 1 and self.pet_id == HelpType.ACTIVITY_PET_ID then
  305. UIToolTipMgr:getInstance():AppendGoodsTips(HelpType.ACTIVITY_PET_GOODS_ID, nil, nil,nil,nil, {},nil,true)
  306. end
  307. end
  308. function PetEvolveSuccessView:UpdateTime( )
  309. local time = 10
  310. local function countDown()
  311. if self._use_delete_method then return end
  312. time = time - 1
  313. if time >= 0 then
  314. self.closeTimer_tmp.text = HtmlColorTxt(time, ColorUtil.GREEN_TIPS).." 秒后自动关闭界面"
  315. else
  316. self.closeTimer_tmp.text = ""
  317. self:Close()
  318. end
  319. end
  320. countDown()
  321. self.timer_id = GlobalTimerQuest:AddPeriodQuest(countDown,1)
  322. end