源战役客户端
Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.

758 righe
27 KiB

4 settimane fa
  1. SoulPowerView = SoulPowerView or BaseClass(BaseItem)
  2. local SoulPowerView = SoulPowerView
  3. function SoulPowerView:__init()
  4. self.base_file = "soulPower"
  5. self.layout_file = "SoulPowerView"
  6. self.model = SoulPowerModel:getInstance()
  7. self.layer_name = "UI"
  8. self.full_screen = true
  9. self.ani_right = 400
  10. self.ani_left = -200
  11. self.adjust_mid = {left = 160, right = 780}
  12. self.last_click_time = 0
  13. self.last_charge_time = 0
  14. self.last_up_grade_time = 0
  15. self.model.has_create_once = false
  16. self.old_slider_effct_play_time = 0
  17. self.first_show_slider = false
  18. self.need_wait_slider = false
  19. self.is_in_auto_charge = false --是否在自动充能状态中
  20. self.auto_charge_speed = 2 --每次协议消耗的道具数量
  21. self.sp_item_list = {}
  22. self:Load()
  23. end
  24. function SoulPowerView:Load_callback()
  25. self.nodes = {
  26. "skillCon/skillBg/skillIcon:img:obj", "skillCon", "skillCon/skillBg",
  27. "right/nextFightArrow:obj",
  28. "itemCon",
  29. "right/nextFight:tmp", "right/nowFight:txt",
  30. "bg:raw", "right/bg3:raw",
  31. "effect",
  32. -------------------------
  33. "right/nextLvDi:obj", "right/nowLvDi:obj",
  34. "right/attrScrollView", "right/attrScrollView/Viewport/attrContent", --属性框
  35. "right/attrScrollView/Viewport:img",
  36. "right/nextLvArrow:obj", --下一层箭头
  37. "right/nextLvName:tmp", "right/nowLvName:tmp", --当前和下层的名字
  38. "right/nextSkillDi:obj", "right/nowSkillDi:obj",
  39. "right/nextSkillImg:img:obj", "right/nowSkillImg:img:obj",
  40. "right/nowSkillName:tmp", "right/nextSkillName:tmp", --技能
  41. -----------------------
  42. "right/upLvCon:obj", --升层框
  43. "right/upLvCon/chargeBtn:obj:img", "right/upLvCon/activateBtn:obj:img", "right/upLvCon/activateBtn/activateRed:obj", --充能、激活按钮、激活红点
  44. "right/upLvCon/chargeBtn/chargeRed:obj", "right/upLvCon/chargeBtn/Text:tmp",
  45. "right/upLvCon/chargeSlider:img", --充能进度条
  46. "right/upLvCon/chargeLeftTime:tmp", --剩余时间倒计时
  47. "right/upLvCon/chargeName:tmp",
  48. "right/upLvCon/rewardCon", "right/upLvCon/materialName:tmp", "right/upLvCon/sliderText:tmp",
  49. "right/upLvCon/activateBtn/activateText:tmp",
  50. "right/upLvCon/sliderEffect",
  51. -----------------------
  52. "right/upGradeCon:obj", --突破框
  53. "right/upGradeCon/upGradeBtn/upGraderedDot:obj", "right/upGradeCon/upGradeBtn:obj", --突破按钮、红点
  54. "right/upGradeCon/conditionScrollView:obj", "right/upGradeCon/conditionScrollView/Viewport/conditionContent",
  55. "right/upGradeCon/gradeEmpty:obj",
  56. -----------------------
  57. "gradeName:tmp", "skillCon/skillName:tmp",
  58. "right/starLvCon/starLv1:img", "right/starLvCon/starLv2:img", "right/starLvCon/starLv3:img",
  59. "right/starLvCon/starLv4:img", "right/starLvCon/starLv5:img", "right/starLvCon/starLv6:img",
  60. "right/starLvCon/starLv7:img", "right/starLvCon/starLv8:img",
  61. "right/nextSkillArrow:obj",
  62. }
  63. self:GetChildren(self.nodes)
  64. self:RegisterMask(self.Viewport_img)
  65. self.chargeSlider_img.fillAmount = 0
  66. self.chargeBtn_obj:SetActive(false)
  67. SetAnchoredPositionX(self.activateBtn,5)
  68. --创建消耗道具
  69. self.cost_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.rewardCon)
  70. self.cost_item:SetItemSize(78,78)
  71. self.cost_item:SetAnchoredPosition(0,0)
  72. lua_resM:setOutsideRawImage(self,self.bg_raw,GameResPath.GetViewBigBg("soul_power_bg"))
  73. lua_resM:setOutsideRawImage(self,self.bg3_raw,GameResPath.GetViewBigBg("soul_power_bg_right"))
  74. self:ArrowAnimation(0)
  75. self.skillCon_canvas = self.skillCon:GetComponent(typeof(UnityEngine.Canvas))
  76. self.skillCon_canvas.sortingOrder = self:GetCurrLayerDepth("UI") + 40
  77. self:AddEvents()
  78. if self.need_refreshData then
  79. self:SetData()
  80. end
  81. end
  82. function SoulPowerView:AddEvents( )
  83. local on_click = function ( click_obj )
  84. if self.chargeBtn_obj == click_obj then--激活下一层
  85. self:DoSPCharge(1)
  86. elseif self.activateBtn_obj == click_obj then--激活下一层
  87. self:DoSPCharge(2)
  88. elseif self.upGradeBtn_obj == click_obj then--突破
  89. if TimeUtil:getServerTimeMs()/1000-self.last_up_grade_time <= 0.25 then
  90. return
  91. end
  92. self.last_up_grade_time = TimeUtil:getServerTimeMs()/1000
  93. self.model.old_sp_grade, _ = self.model:GetSoulPowerNowGradeLv()
  94. self.model:Fire(SoulPowerConst.REQUEST_CCMD_EVENT,14402)
  95. elseif self.skillIcon_obj == click_obj then--当前技能图标
  96. if not self.sp_grade_condition_cfg then return end
  97. local skill_info = stringtotable(self.sp_grade_condition_cfg.skills)[1]
  98. local data = {
  99. skill_id = tonumber(skill_info[1]),
  100. skill_lv = tonumber(skill_info[2]),
  101. }
  102. GlobalEventSystem:Fire(EventName.OPEN_COMMON_SKILL_TIPS, data)
  103. elseif self.nextSkillImg_obj == click_obj then--突破的下一阶技能图标
  104. if not self.sp_grade then return end
  105. local next_grade_condition_cfg = self.model:GetSoulPowerGradeCfgByGrade(self.sp_grade+1)
  106. if not next_grade_condition_cfg then return end
  107. local skill_info = stringtotable(next_grade_condition_cfg.skills)[1]
  108. local data = {
  109. skill_id = tonumber(skill_info[1]),
  110. skill_lv = tonumber(skill_info[2]),
  111. }
  112. GlobalEventSystem:Fire(EventName.OPEN_COMMON_SKILL_TIPS, data)
  113. elseif self.nowSkillImg_obj == click_obj then--当前技能图标
  114. if not self.sp_grade_condition_cfg then return end
  115. local skill_info = stringtotable(self.sp_grade_condition_cfg.skills)[1]
  116. local data = {
  117. skill_id = tonumber(skill_info[1]),
  118. skill_lv = tonumber(skill_info[2]),
  119. }
  120. GlobalEventSystem:Fire(EventName.OPEN_COMMON_SKILL_TIPS, data)
  121. end
  122. end
  123. AddClickEvent(self.chargeBtn_obj, on_click)
  124. AddClickEvent(self.activateBtn_obj, on_click)
  125. AddClickEvent(self.upGradeBtn_obj, on_click)
  126. AddClickEvent(self.skillIcon_obj, on_click)
  127. AddClickEvent(self.nextSkillImg_obj, on_click)
  128. AddClickEvent(self.nowSkillImg_obj, on_click)
  129. local update_soul_power_view = function()
  130. if not self.is_loaded then return end
  131. self:UpdateView(self.model.need_show_attr_up_effect)
  132. self.model.need_show_attr_up_effect = false
  133. end
  134. self:BindEvent(self.model, SoulPowerConst.UPDATE_SOUL_POWER_VIEW, update_soul_power_view)
  135. local function on_update_goods_num()
  136. if not self.is_loaded then return end
  137. self:UpdateMaterial()
  138. self:UpdateUpLvBtnState()
  139. end
  140. self:BindEvent(self.model,SoulPowerConst.UPDATE_SP_GOODS_NUM,on_update_goods_num)
  141. end
  142. function SoulPowerView:DoSPCharge(type)
  143. if TimeUtil:getServerTimeMs()/1000-self.last_charge_time <= 0.25 then
  144. return
  145. end
  146. self.last_charge_time = TimeUtil:getServerTimeMs()/1000
  147. local cost_goods_id = self.model:GetMaterialGoodsId()
  148. local goods_num = GoodsModel:getInstance():GetTypeGoodsNum(cost_goods_id)
  149. if type == 1 then--充能一个
  150. if goods_num == 0 then
  151. Message.show("材料不足")
  152. UIToolTipMgr:getInstance():AppendGoodsTips(cost_goods_id,nil,nil,nil,nil,nil,nil,true)
  153. else
  154. self.old_lv = self.sp_lv
  155. self.model:Fire(SoulPowerConst.REQUEST_CCMD_EVENT,14401,1)
  156. end
  157. elseif type == 2 then--自动充能到下一级
  158. if not self.sp_grade or not self.sp_lv then return end
  159. local charge_num = 1
  160. local lv_cfg = self.model:GetSoulPowerLvCfgByGradeLv(self.sp_grade,self.sp_lv)
  161. local need_energy = lv_cfg and lv_cfg.energy or 0
  162. local now_energy = self.model:GetSoulPowerNowEnergy()
  163. local left_energy = need_energy-now_energy
  164. charge_num = left_energy/self.model:GetMaterialCanGetEnergy()
  165. if goods_num == 0 then
  166. Message.show("材料不足")
  167. UIToolTipMgr:getInstance():AppendGoodsTips(cost_goods_id,nil,nil,nil,nil,nil,nil,true)
  168. elseif goods_num >= charge_num then
  169. self.old_lv = self.sp_lv
  170. self.model:Fire(SoulPowerConst.REQUEST_CCMD_EVENT,14401,charge_num)
  171. else
  172. self.old_lv = self.sp_lv
  173. self.model:Fire(SoulPowerConst.REQUEST_CCMD_EVENT,14401,goods_num)
  174. end
  175. end
  176. end
  177. -- --自动充能(14401协议不断请求)
  178. -- function SoulPowerView:DoAutoCharge( )
  179. -- if self.is_in_auto_charge then--在自动充能中,点击按钮,取消充能
  180. -- self:StopAutoCharge()
  181. -- else
  182. -- if self.timer_id then
  183. -- GlobalTimerQuest:CancelQuest(self.timer_id)
  184. -- self.timer_id = nil
  185. -- end
  186. -- local function onTimer()
  187. -- local sp_grade, sp_lv = self.model:GetSoulPowerNowGradeLv()
  188. -- if sp_lv == self.model:GetSoulPowerMaxLv(sp_grade) then return end
  189. -- self:AutoCharge()
  190. -- end
  191. -- if not self.timer_id then
  192. -- self.timer_id = GlobalTimerQuest:AddPeriodQuest(onTimer, 0.2, -1)
  193. -- self.is_in_auto_charge = true
  194. -- end
  195. -- end
  196. -- end
  197. -- function SoulPowerView:AutoCharge( )
  198. -- local cost_goods_id = self.model:GetMaterialGoodsId()
  199. -- local goods_num = GoodsModel:getInstance():GetTypeGoodsNum(cost_goods_id)
  200. -- if goods_num == 0 then
  201. -- self:StopAutoCharge()
  202. -- elseif goods_num > 0 and goods_num < self.auto_charge_speed then
  203. -- self.old_lv = self.sp_lv
  204. -- self.model:Fire(SoulPowerConst.REQUEST_CCMD_EVENT,14401,goods_num)
  205. -- else
  206. -- self.old_lv = self.sp_lv
  207. -- self.model:Fire(SoulPowerConst.REQUEST_CCMD_EVENT,14401,self.auto_charge_speed)
  208. -- end
  209. -- end
  210. -- function SoulPowerView:StopAutoCharge( )
  211. -- self.is_in_auto_charge = false
  212. -- if self.timer_id then
  213. -- GlobalTimerQuest:CancelQuest(self.timer_id)
  214. -- self.timer_id = nil
  215. -- end
  216. -- end
  217. function SoulPowerView:RequestData( )
  218. self.model:Fire(SoulPowerConst.REQUEST_CCMD_EVENT,14400)
  219. end
  220. function SoulPowerView:SetData()
  221. if self.is_loaded then
  222. self.need_refreshData = false
  223. self.first_show_slider = false
  224. self.need_wait_slider = false
  225. self:RequestData()
  226. self:AddUIEffect("ui_hunlidizuo_1", self.effect, "UI", nil, 4.2, true)
  227. else
  228. self.need_refreshData = true
  229. end
  230. end
  231. function SoulPowerView:UpdateView(need_show_attr_up_effect)
  232. self.skillCon_canvas.sortingOrder = self:GetCurrLayerDepth("UI") + 40
  233. self.sp_grade, self.sp_lv = self.model:GetSoulPowerNowGradeLv()
  234. self.sp_grade_cfg = self.model:GetSoulPowerLvCfgByGrade(self.sp_grade) --当前阶数配置
  235. self.sp_lv_cfg = self.model:GetSoulPowerLvCfgByGradeLv(self.sp_grade, self.sp_lv) --当前阶数当前层数的配置
  236. self.sp_grade_condition_cfg = self.model:GetSoulPowerGradeCfgByGrade(self.sp_grade) --当前阶数的额外配置
  237. self.sp_max_lv = self.model:GetSoulPowerMaxLv(self.sp_grade) --当前阶数的最高层数
  238. if not self.sp_lv_cfg or not self.sp_grade_cfg or not self.sp_grade_condition_cfg then return end
  239. local now_skill_data = stringtotable(self.sp_grade_condition_cfg.skills)
  240. lua_resM:setOutsideImageSprite(self, self.skillIcon_img, GameResPath.GetSkillIcon(now_skill_data[1][1]))
  241. local now_skill_cfg = ConfigItemMgr.Instance:GetSkillItem(now_skill_data[1][1])
  242. self.skillName_tmp.text = Trim(now_skill_cfg.name).." <#fdffc2>[Lv."..now_skill_data[1][2].."]</color>"
  243. self:UpdateItemCon()
  244. self:UpdateBaseInfoShow()
  245. self:UpdateRightInfoSHow(need_show_attr_up_effect)
  246. end
  247. function SoulPowerView:ArrowAnimation(time)
  248. self:StopAnim()
  249. local call_fun = function ()
  250. local function onCompleted()
  251. self:ArrowAnimation(time)
  252. end
  253. self.tween_id3 =TweenLite.to(self, self.skillBg,TweenLite.UiAnimationType.ANCHORED_POSY,-2, 2.5, onCompleted)
  254. end
  255. local onDelay = function( )
  256. self.tween_id2 =TweenLite.to(self, self.skillBg,TweenLite.UiAnimationType.ANCHORED_POSY,7, 2.5, call_fun)
  257. end
  258. self.arrow_timer_id = setTimeout(onDelay, time)
  259. end
  260. function SoulPowerView:StopAnim()
  261. if self.tween_id2 then
  262. TweenLite.Stop(self.tween_id2)
  263. self.tween_id2 = nil
  264. end
  265. if self.tween_id3 then
  266. TweenLite.Stop(self.tween_id3)
  267. self.tween_id3 = nil
  268. end
  269. if self.arrow_timer_id then
  270. GlobalTimerQuest:CancelQuest(self.arrow_timer_id)
  271. self.arrow_timer_id = nil
  272. end
  273. end
  274. --item栏
  275. function SoulPowerView:UpdateItemCon( )
  276. if self.model.has_create_once then return end--打开界面只创建一次,后面收到14500只对item进行更新
  277. local sp_item_data = {}
  278. for i,v in ipairs(self.sp_grade_cfg) do
  279. if v.lv~=0 then
  280. table.insert(sp_item_data,v)
  281. end
  282. end
  283. for k,v in pairs(self.sp_item_list) do
  284. v:SetVisible(false)
  285. end
  286. for i,v in ipairs(sp_item_data) do
  287. local item = self.sp_item_list[i]
  288. if not item then
  289. item = SoulPowerItem.New(self.itemCon)
  290. self.sp_item_list[i] = item
  291. end
  292. item:SetVisible(true)
  293. item:SetData(v ,i)
  294. item:SetPosition(SoulPowerConst.SoulPowerItemPos[i].x, SoulPowerConst.SoulPowerItemPos[i].y)
  295. end
  296. self.model.has_create_once = true
  297. end
  298. --技能、名字、战力等基础显示
  299. function SoulPowerView:UpdateBaseInfoShow( )
  300. -- local fight = self.model:GetSoulPowerNowPower()
  301. -- self.nowFight_txt.text = fight
  302. self.gradeName_tmp.text = string.format("%s阶 %s", self.sp_grade, Trim(self.sp_grade_condition_cfg.name))
  303. end
  304. --刷新右侧栏显示(突破 or 激活)
  305. function SoulPowerView:UpdateRightInfoSHow(need_show_attr_up_effect)
  306. if self.sp_lv == self.sp_max_lv then --已经升到最高层了,展示突破界面
  307. self.upLvCon_obj:SetActive(false)
  308. self.upGradeCon_obj:SetActive(true)
  309. self:UpdateUpGradeCon()
  310. else
  311. self.upLvCon_obj:SetActive(true)
  312. self.upGradeCon_obj:SetActive(false)
  313. self:UpdateUpLvCon()
  314. end
  315. self:UpdateRightCommonInfo(self.sp_lv == self.sp_max_lv,need_show_attr_up_effect)
  316. end
  317. function SoulPowerView:UpdateRightCommonInfo(is_grade_up,need_show_attr_up_effect)
  318. --技能
  319. local now_skill_data = stringtotable(self.sp_grade_condition_cfg.skills)
  320. lua_resM:setOutsideImageSprite(self, self.nowSkillImg_img, GameResPath.GetSkillIcon(now_skill_data[1][1]))
  321. local now_skill_cfg = ConfigItemMgr.Instance:GetSkillItem(now_skill_data[1][1])
  322. self.nowSkillName_tmp.text = Trim(now_skill_cfg.name).." <#a9c1e1>[Lv."..now_skill_data[1][2].."]"
  323. -- local skill_des = now_skill_cfg.lvs[now_skill_data[1][2]] and Trim(now_skill_cfg.lvs[now_skill_data[1][2]].desc) or "技能配置缺失"
  324. -- self.skillDes_tmp.text = skill_des
  325. local have_next_skill = false
  326. local next_grade_condition_cfg = self.model:GetSoulPowerGradeCfgByGrade(self.sp_grade+1)
  327. local next_skill_data = {}
  328. if not next_grade_condition_cfg then
  329. self.nextSkillImg_obj:SetActive(false)
  330. self.nextSkillDi_obj:SetActive(false)
  331. SetAnchoredPositionX(self.nowSkillImg, 108)
  332. SetAnchoredPositionX(self.nowSkillName, 108)
  333. SetAnchoredPositionX(self.nowSkillDi, 108)
  334. self.nextSkillName_tmp.text = ""
  335. have_next_skill = false
  336. else
  337. self.nextSkillImg_obj:SetActive(true)
  338. self.nextSkillDi_obj:SetActive(true)
  339. SetAnchoredPositionX(self.nowSkillImg, 6)
  340. SetAnchoredPositionX(self.nowSkillName, 6)
  341. SetAnchoredPositionX(self.nowSkillDi, 6)
  342. --下阶技能
  343. next_skill_data = stringtotable(next_grade_condition_cfg.skills)
  344. lua_resM:setOutsideImageSprite(self, self.nextSkillImg_img, GameResPath.GetSkillIcon(next_skill_data[1][1]))
  345. local next_skill_cfg = ConfigItemMgr.Instance:GetSkillItem(next_skill_data[1][1])
  346. self.nextSkillName_tmp.text = Trim(next_skill_cfg.name).." <#fdffc2>[Lv."..next_skill_data[1][2].."]"
  347. have_next_skill = true
  348. end
  349. --属性
  350. local attr_cfg = stringtotable(self.sp_lv_cfg.attrs)
  351. local next_attr_cfg = {}
  352. if is_grade_up then
  353. local next_sp_grade_lv_cfg = self.model:GetSoulPowerLvCfgByGradeLv(self.sp_grade+1, 0)
  354. if next_sp_grade_lv_cfg then
  355. next_attr_cfg = stringtotable(next_sp_grade_lv_cfg.attrs)
  356. end
  357. else
  358. local next_sp_lv_cfg = self.model:GetSoulPowerLvCfgByGradeLv(self.sp_grade, self.sp_lv+1)
  359. if next_sp_lv_cfg then
  360. next_attr_cfg = stringtotable(next_sp_lv_cfg.attrs)
  361. end
  362. end
  363. local now_skill_faker_attr_data = {}
  364. local next_skill_faker_attr_data = {}
  365. local now_skill_lv_hp_value = self.model:GetSoulPowerHpResumeCfg(now_skill_data[1][2]) or 0
  366. now_skill_faker_attr_data = {9999,now_skill_lv_hp_value}
  367. local next_skill_lv_hp_value = 0
  368. if have_next_skill then
  369. next_skill_lv_hp_value = self.model:GetSoulPowerHpResumeCfg(next_skill_data[1][2]) or 0
  370. end
  371. next_skill_faker_attr_data = {9999,next_skill_lv_hp_value}
  372. table.insert(attr_cfg,1,now_skill_faker_attr_data)
  373. table.insert(next_attr_cfg,1,next_skill_faker_attr_data)
  374. if not self.item_list_com then
  375. self.item_list_com = self:AddUIComponent(UI.ItemListCreator)
  376. end
  377. local info = {
  378. data_list = attr_cfg,
  379. item_con = self.attrContent,
  380. item_class = SoulPowerAttrItem,
  381. -- item_width = 288,
  382. item_height = 34,
  383. -- space_x = -5,
  384. space_y = 2.5,
  385. start_x = 0,
  386. start_y = -6.5,
  387. scroll_view = self.attrScrollView,
  388. -- create_frequency = 0.01,
  389. on_update_item = function(item, i, v)
  390. item:SetData(v, i, next_attr_cfg,need_show_attr_up_effect,is_grade_up)
  391. end,
  392. }
  393. self.item_list_com:UpdateItems(info)
  394. for i=1,8 do
  395. if i <= self.sp_lv then
  396. lua_resM:setImageSprite(self, self["starLv"..i.."_img"], "soulPower_asset","soul_power_star_lv_1")
  397. else
  398. lua_resM:setImageSprite(self, self["starLv"..i.."_img"], "soulPower_asset","soul_power_star_lv_0")
  399. end
  400. end
  401. end
  402. function SoulPowerView:UpdateUpLvCon()
  403. SetAnchoredPositionX(self.nowLvName, 17)
  404. self.nowLvName_tmp.text = string.format("%s %s层", Trim(self.sp_grade_condition_cfg.name), self.sp_lv)
  405. self.nextLvName_tmp.text = string.format("%s %s层", Trim(self.sp_grade_condition_cfg.name), self.sp_lv+1)
  406. --正在充能
  407. self.chargeName_tmp.text = string.format("充能目标 <#fdffc2>%s%s层</color>", Trim(self.sp_grade_condition_cfg.name), self.sp_lv+1)
  408. --战力
  409. local fight = self.model:GetSoulPowerNowFight(self.sp_grade, self.sp_lv)
  410. local add_fight = self.model:GetSoulPowerNextUpLvFight(self.sp_grade, self.sp_lv)
  411. self.nowFight_txt.text = "f"..fight
  412. self.nextFight_tmp.text = add_fight
  413. SetAnchoredPositionX(self.nextFightArrow, 36+self.nowFight_txt.preferredWidth/2+50)
  414. SetAnchoredPositionX(self.nextFight, 36+self.nowFight_txt.preferredWidth/2+50+25)
  415. self.nextFightArrow_obj:SetActive(true)
  416. SetAnchoredPositionX(self.nowLvDi,28)
  417. self.nextLvDi_obj:SetActive(true)
  418. --材料
  419. self:UpdateMaterial()
  420. --进度条
  421. self:UpdateFillAmount()
  422. --按钮状态
  423. self:UpdateUpLvBtnState()
  424. end
  425. --充能材料展示
  426. function SoulPowerView:UpdateMaterial( )
  427. local cost_goods_id = self.model:GetMaterialGoodsId()
  428. local goods_name = GoodsModel:getInstance():getGoodsName(cost_goods_id,true)
  429. self.materialName_tmp.text = goods_name
  430. local goods_num = GoodsModel:getInstance():GetTypeGoodsNum(cost_goods_id)
  431. self.cost_item:SetData(cost_goods_id)
  432. local get_str = HtmlColorTxt(goods_num, goods_num < 1 and ColorUtil.RED_DARK or ColorUtil.GREEN_DARK).."/".. 1
  433. self.cost_item:IsGetGoods(true,get_str,false)
  434. end
  435. function SoulPowerView:UpdateFillAmount()
  436. if not self.sp_grade or not self.sp_lv then return end
  437. local lv_cfg = self.model:GetSoulPowerLvCfgByGradeLv(self.sp_grade,self.sp_lv)
  438. local need_energy = lv_cfg and lv_cfg.energy or 0
  439. local now_energy = self.model:GetSoulPowerNowEnergy()
  440. local ratio = now_energy/need_energy
  441. self.sliderText_tmp.text = now_energy.."/"..need_energy
  442. if not self.first_show_slider then
  443. self.chargeSlider_img.fillAmount = ratio
  444. self.first_show_slider = true
  445. return
  446. end
  447. ------------------------------------------------------
  448. if self.need_wait_slider then return end
  449. if self.tween_slider_id then
  450. TweenLite.Stop(self.tween_slider_id)
  451. self.tween_slider_id = nil
  452. end
  453. if self.tween_slider_id_2 then
  454. TweenLite.Stop(self.tween_slider_id_2)
  455. self.tween_slider_id_2 = nil
  456. end
  457. if self.tween_slider_id_3 then
  458. TweenLite.Stop(self.tween_slider_id_3)
  459. self.tween_slider_id_3 = nil
  460. end
  461. local old_value = self.chargeSlider_img.fillAmount
  462. local end_value = ratio
  463. local need_time
  464. local need_time_2
  465. if self.old_lv and self.sp_lv > self.old_lv then--说明升级了,要先跑满这一条再继续跑
  466. need_time = 1*(1-old_value)/4
  467. need_time = need_time >= 0.15 and need_time or 0.15
  468. need_time_2 = 1*end_value
  469. need_time_2 = need_time_2 >= 0.15 and need_time_2 or 0.15
  470. local function end_call()
  471. self.chargeSlider_img.fillAmount = 0
  472. --最终纠正进度条
  473. local function final_call()
  474. local lv_cfg = self.model:GetSoulPowerLvCfgByGradeLv(self.sp_grade,self.sp_lv)
  475. local need_energy = lv_cfg and lv_cfg.energy or 0
  476. local now_energy = self.model:GetSoulPowerNowEnergy()
  477. local ratio = now_energy/need_energy
  478. local function final_call_2()
  479. self.chargeSlider_img.fillAmount = ratio
  480. end
  481. self.tween_slider_id_3 = TweenLite.to(self, self.chargeSlider, TweenLite.UiAnimationType.FILLAMOUNT, ratio, need_time_2,final_call_2)
  482. end
  483. self.tween_slider_id_2 = TweenLite.to(self, self.chargeSlider, TweenLite.UiAnimationType.FILLAMOUNT, end_value, need_time_2,final_call)
  484. self.need_wait_slider = false
  485. end
  486. self.tween_slider_id = TweenLite.to(self, self.chargeSlider, TweenLite.UiAnimationType.FILLAMOUNT,1, need_time,end_call)
  487. self.need_wait_slider = true
  488. -- self.model:Fire(PetConst.PLAY_PET_LV_UP_EFFECT)
  489. else
  490. need_time = 1*(end_value-old_value)/4
  491. need_time = need_time >= 0.15 and need_time or 0.15
  492. self.tween_slider_id = TweenLite.to(self, self.chargeSlider, TweenLite.UiAnimationType.FILLAMOUNT, end_value, need_time)
  493. end
  494. --播放属性特效有cd,必须等播完才能再播
  495. local need_play_slider_effect = true
  496. if need_play_slider_effect then
  497. if TimeUtil:getServerTimeMs()/1000-self.old_slider_effct_play_time <= 0.6 then
  498. need_play_slider_effect = false
  499. end
  500. if need_play_slider_effect then
  501. self:AddUIEffect("ui_jinjiejindu", self.sliderEffect, "UI", nil, 1, false, nil, false)
  502. self.old_slider_effct_play_time = TimeUtil:getServerTimeMs()/1000
  503. end
  504. end
  505. end
  506. function SoulPowerView:UpdateUpLvBtnState( )
  507. --有材料 显示红点 没材料 置灰按钮
  508. local cost_goods_id = self.model:GetMaterialGoodsId()
  509. local goods_num = GoodsModel:getInstance():GetTypeGoodsNum(cost_goods_id)
  510. if goods_num > 0 then
  511. self.activateRed_obj:SetActive(true)
  512. self.chargeRed_obj:SetActive(true)
  513. -- SetImageGray(self.activateBtn_img,false)
  514. -- SetTMPSharedMaterial(self.activateText_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn)
  515. -- SetImageGray(self.chargeBtn_img,false)
  516. -- SetTMPSharedMaterial(self.Text_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkBlueBtn)
  517. else
  518. self.activateRed_obj:SetActive(false)
  519. self.chargeRed_obj:SetActive(false)
  520. -- SetImageGray(self.activateBtn_img,true)
  521. -- SetTMPSharedMaterial(self.activateText_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
  522. -- SetImageGray(self.chargeBtn_img,true)
  523. -- SetTMPSharedMaterial(self.Text_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
  524. end
  525. end
  526. -- function SoulPowerView:UpdateLeftTime( )
  527. -- if not self.sp_grade or not self.sp_lv then return end
  528. -- local time_head, time_tail = self.model:GetSoulPowerTimeHeadTail()
  529. -- local next_lv_total_time = self.model:GetSoulPowerNextLvNeedTotalTime(self.sp_grade, self.sp_lv)
  530. -- self.left_time = time_tail - next_lv_total_time - TimeUtil:getServerTime()
  531. -- if self.left_time < 0 then self.left_time = 0 end
  532. -- self.chargeLeftTime_tmp.text = string.format("剩余时间:<color=#2CF86F>%s</color>",TimeUtil:timeConvert(self.left_time, "hh:mm:ss"))
  533. -- if self.left_time <= 0 then
  534. -- self.activateRed_obj:SetActive(true)
  535. -- if self.tween_slider_id then
  536. -- TweenLite.Stop(self.tween_slider_id)
  537. -- self.tween_slider_id = nil
  538. -- end
  539. -- SetSizeDeltaX(self.chargeSlider, 300)
  540. -- end
  541. -- end
  542. -- function SoulPowerView:UpdateFillAmount( )
  543. -- if self.tween_slider_id then
  544. -- TweenLite.Stop(self.tween_slider_id)
  545. -- self.tween_slider_id = nil
  546. -- end
  547. -- if not self.sp_grade or not self.sp_lv then return end
  548. -- local next_lv_need_time = self.sp_lv_cfg.need
  549. -- local ratio = (next_lv_need_time - self.left_time) / next_lv_need_time
  550. -- SetSizeDeltaX(self.chargeSlider, ratio*300)
  551. -- if self.left_time <= 0 then
  552. -- if self.tween_slider_id then
  553. -- TweenLite.Stop(self.tween_slider_id)
  554. -- self.tween_slider_id = nil
  555. -- end
  556. -- SetSizeDeltaX(self.chargeSlider, 300)
  557. -- else
  558. -- self.tween_slider_id = TweenLite.to(self, self.chargeSlider, TweenLite.UiAnimationType.WIDTH, 300, self.left_time)
  559. -- end
  560. -- end
  561. function SoulPowerView:UpdateUpGradeCon( )
  562. --更新到突破后,停止进度条 并重置
  563. self.first_show_slider = false
  564. self.need_wait_slider = false
  565. if self.tween_slider_id then
  566. TweenLite.Stop(self.tween_slider_id)
  567. self.tween_slider_id = nil
  568. end
  569. if self.tween_slider_id_2 then
  570. TweenLite.Stop(self.tween_slider_id_2)
  571. self.tween_slider_id_2 = nil
  572. end
  573. if self.tween_slider_id_3 then
  574. TweenLite.Stop(self.tween_slider_id_3)
  575. self.tween_slider_id_3 = nil
  576. end
  577. local fight = self.model:GetSoulPowerNowFight(self.sp_grade, self.sp_lv)
  578. self.nowFight_txt.text = "f"..fight
  579. self.nowLvName_tmp.text = string.format("%s阶 %s", self.sp_grade, Trim(self.sp_grade_condition_cfg.name))
  580. SetAnchoredPositionX(self.nextFightArrow, 36+self.nowFight_txt.preferredWidth/2+50)
  581. SetAnchoredPositionX(self.nextFight, 36+self.nowFight_txt.preferredWidth/2+50+25)
  582. SetAnchoredPositionX(self.nowFight,63)
  583. local next_grade_condition_cfg = self.model:GetSoulPowerGradeCfgByGrade(self.sp_grade+1)
  584. if not next_grade_condition_cfg then
  585. SetAnchoredPositionX(self.nowFight,98)
  586. self.nextFightArrow_obj:SetActive(false)
  587. self.nextFight_tmp.text = ""
  588. self.upGraderedDot_obj:SetActive(false)
  589. self.nextLvName_tmp.text = ""
  590. self.upGradeBtn_obj:SetActive(false)
  591. self.gradeEmpty_obj:SetActive(true)
  592. self.conditionScrollView_obj:SetActive(false)
  593. SetAnchoredPositionX(self.nowLvName, 108)
  594. SetAnchoredPositionX(self.nowLvDi,110)
  595. self.nextLvDi_obj:SetActive(false)
  596. self.nextLvArrow_obj:SetActive(false)
  597. self.nextSkillArrow_obj:SetActive(false)
  598. return
  599. end
  600. self.nextFightArrow_obj:SetActive(true)
  601. self.upGradeBtn_obj:SetActive(true)
  602. self.gradeEmpty_obj:SetActive(false)
  603. self.conditionScrollView_obj:SetActive(true)
  604. SetAnchoredPositionX(self.nowLvName, 17)
  605. SetAnchoredPositionX(self.nowLvDi,28)
  606. self.nextLvDi_obj:SetActive(true)
  607. self.nextLvArrow_obj:SetActive(true)
  608. self.nextSkillArrow_obj:SetActive(true)
  609. --下阶名字
  610. self.nextLvName_tmp.text = string.format("%s阶 %s", self.sp_grade+1, Trim(next_grade_condition_cfg.name))
  611. --条件
  612. local condition_data = stringtotable(self.sp_grade_condition_cfg.condition)
  613. if not self.condition_list_com then
  614. self.condition_list_com = self:AddUIComponent(UI.ItemListCreator)
  615. end
  616. local info = {
  617. data_list = condition_data,
  618. item_con = self.conditionContent,
  619. item_class = SoulPowerConditionItem,
  620. -- item_width = 111,
  621. item_height = 30,
  622. -- space_x = 0,
  623. space_y = 16,
  624. start_x = 6,
  625. start_y = -8,
  626. scroll_view = self.conditionScrollView,
  627. create_frequency = 0.01,
  628. on_update_item = function(item, i, v)
  629. item:SetData(v)
  630. end,
  631. }
  632. self.condition_list_com:UpdateItems(info)
  633. --突破按钮
  634. local can_up_grade = true
  635. for i,v in ipairs(condition_data) do
  636. local is_arrive = false
  637. if v[1] == SoulPowerConst.UpGradeConditionType.Lv then
  638. is_arrive = RoleManager.Instance.mainRoleInfo.level >= v[2]
  639. elseif v[1] == SoulPowerConst.UpGradeConditionType.DunTower then
  640. local easy_pass_num,diffcult_pass_num = BaseDungeonModel:getInstance():GetOneTowerPassRecord()
  641. is_arrive = easy_pass_num >= v[2]
  642. end
  643. if not is_arrive then
  644. can_up_grade = false
  645. break
  646. end
  647. end
  648. self.upGraderedDot_obj:SetActive(can_up_grade)
  649. --突破战力
  650. local next_grade_fight = self.model:GetSoulPowerNowFight(self.sp_grade+1, 0)
  651. self.nextFight_tmp.text = next_grade_fight-fight
  652. end
  653. function SoulPowerView:__delete( )
  654. self.model.has_create_once = false
  655. self:ClearUIEffect(self.effect)
  656. self:ClearUIEffect(self.sliderEffect)
  657. for i, v in ipairs(self.sp_item_list) do
  658. v:DeleteMe()
  659. end
  660. self.sp_item_list = {}
  661. if self.tween_slider_id then
  662. TweenLite.Stop(self.tween_slider_id)
  663. self.tween_slider_id = nil
  664. end
  665. if self.tween_slider_id_2 then
  666. TweenLite.Stop(self.tween_slider_id_2)
  667. self.tween_slider_id_2 = nil
  668. end
  669. self:StopAnim()
  670. if self.timer_id then
  671. GlobalTimerQuest:CancelQuest(self.timer_id)
  672. self.timer_id = nil
  673. end
  674. self.first_show_slider = false
  675. end