|
SoulPowerView = SoulPowerView or BaseClass(BaseItem)
|
|
local SoulPowerView = SoulPowerView
|
|
|
|
function SoulPowerView:__init()
|
|
self.base_file = "soulPower"
|
|
self.layout_file = "SoulPowerView"
|
|
self.model = SoulPowerModel:getInstance()
|
|
self.layer_name = "UI"
|
|
|
|
self.full_screen = true
|
|
self.ani_right = 400
|
|
self.ani_left = -200
|
|
self.adjust_mid = {left = 160, right = 780}
|
|
|
|
self.last_click_time = 0
|
|
self.last_charge_time = 0
|
|
self.last_up_grade_time = 0
|
|
|
|
self.model.has_create_once = false
|
|
|
|
self.old_slider_effct_play_time = 0
|
|
|
|
self.first_show_slider = false
|
|
self.need_wait_slider = false
|
|
|
|
self.is_in_auto_charge = false --是否在自动充能状态中
|
|
self.auto_charge_speed = 2 --每次协议消耗的道具数量
|
|
|
|
self.sp_item_list = {}
|
|
|
|
self:Load()
|
|
end
|
|
|
|
function SoulPowerView:Load_callback()
|
|
self.nodes = {
|
|
"skillCon/skillBg/skillIcon:img:obj", "skillCon", "skillCon/skillBg",
|
|
"right/nextFightArrow:obj",
|
|
"itemCon",
|
|
"right/nextFight:tmp", "right/nowFight:txt",
|
|
"bg:raw", "right/bg3:raw",
|
|
"effect",
|
|
-------------------------
|
|
"right/nextLvDi:obj", "right/nowLvDi:obj",
|
|
"right/attrScrollView", "right/attrScrollView/Viewport/attrContent", --属性框
|
|
"right/attrScrollView/Viewport:img",
|
|
"right/nextLvArrow:obj", --下一层箭头
|
|
"right/nextLvName:tmp", "right/nowLvName:tmp", --当前和下层的名字
|
|
"right/nextSkillDi:obj", "right/nowSkillDi:obj",
|
|
"right/nextSkillImg:img:obj", "right/nowSkillImg:img:obj",
|
|
"right/nowSkillName:tmp", "right/nextSkillName:tmp", --技能
|
|
-----------------------
|
|
"right/upLvCon:obj", --升层框
|
|
"right/upLvCon/chargeBtn:obj:img", "right/upLvCon/activateBtn:obj:img", "right/upLvCon/activateBtn/activateRed:obj", --充能、激活按钮、激活红点
|
|
"right/upLvCon/chargeBtn/chargeRed:obj", "right/upLvCon/chargeBtn/Text:tmp",
|
|
"right/upLvCon/chargeSlider:img", --充能进度条
|
|
"right/upLvCon/chargeLeftTime:tmp", --剩余时间倒计时
|
|
"right/upLvCon/chargeName:tmp",
|
|
"right/upLvCon/rewardCon", "right/upLvCon/materialName:tmp", "right/upLvCon/sliderText:tmp",
|
|
"right/upLvCon/activateBtn/activateText:tmp",
|
|
"right/upLvCon/sliderEffect",
|
|
-----------------------
|
|
"right/upGradeCon:obj", --突破框
|
|
"right/upGradeCon/upGradeBtn/upGraderedDot:obj", "right/upGradeCon/upGradeBtn:obj", --突破按钮、红点
|
|
"right/upGradeCon/conditionScrollView:obj", "right/upGradeCon/conditionScrollView/Viewport/conditionContent",
|
|
"right/upGradeCon/gradeEmpty:obj",
|
|
-----------------------
|
|
"gradeName:tmp", "skillCon/skillName:tmp",
|
|
|
|
"right/starLvCon/starLv1:img", "right/starLvCon/starLv2:img", "right/starLvCon/starLv3:img",
|
|
"right/starLvCon/starLv4:img", "right/starLvCon/starLv5:img", "right/starLvCon/starLv6:img",
|
|
"right/starLvCon/starLv7:img", "right/starLvCon/starLv8:img",
|
|
|
|
"right/nextSkillArrow:obj",
|
|
}
|
|
self:GetChildren(self.nodes)
|
|
|
|
self:RegisterMask(self.Viewport_img)
|
|
|
|
self.chargeSlider_img.fillAmount = 0
|
|
|
|
self.chargeBtn_obj:SetActive(false)
|
|
SetAnchoredPositionX(self.activateBtn,5)
|
|
|
|
--创建消耗道具
|
|
self.cost_item = UIObjPool:getInstance():PopItem(UIObjPool.UIType.AwardItem, self.rewardCon)
|
|
self.cost_item:SetItemSize(78,78)
|
|
self.cost_item:SetAnchoredPosition(0,0)
|
|
|
|
lua_resM:setOutsideRawImage(self,self.bg_raw,GameResPath.GetViewBigBg("soul_power_bg"))
|
|
lua_resM:setOutsideRawImage(self,self.bg3_raw,GameResPath.GetViewBigBg("soul_power_bg_right"))
|
|
|
|
self:ArrowAnimation(0)
|
|
|
|
self.skillCon_canvas = self.skillCon:GetComponent(typeof(UnityEngine.Canvas))
|
|
self.skillCon_canvas.sortingOrder = self:GetCurrLayerDepth("UI") + 40
|
|
|
|
self:AddEvents()
|
|
if self.need_refreshData then
|
|
self:SetData()
|
|
end
|
|
end
|
|
|
|
function SoulPowerView:AddEvents( )
|
|
local on_click = function ( click_obj )
|
|
if self.chargeBtn_obj == click_obj then--激活下一层
|
|
self:DoSPCharge(1)
|
|
elseif self.activateBtn_obj == click_obj then--激活下一层
|
|
self:DoSPCharge(2)
|
|
elseif self.upGradeBtn_obj == click_obj then--突破
|
|
if TimeUtil:getServerTimeMs()/1000-self.last_up_grade_time <= 0.25 then
|
|
return
|
|
end
|
|
self.last_up_grade_time = TimeUtil:getServerTimeMs()/1000
|
|
self.model.old_sp_grade, _ = self.model:GetSoulPowerNowGradeLv()
|
|
self.model:Fire(SoulPowerConst.REQUEST_CCMD_EVENT,14402)
|
|
elseif self.skillIcon_obj == click_obj then--当前技能图标
|
|
if not self.sp_grade_condition_cfg then return end
|
|
local skill_info = stringtotable(self.sp_grade_condition_cfg.skills)[1]
|
|
local data = {
|
|
skill_id = tonumber(skill_info[1]),
|
|
skill_lv = tonumber(skill_info[2]),
|
|
}
|
|
GlobalEventSystem:Fire(EventName.OPEN_COMMON_SKILL_TIPS, data)
|
|
elseif self.nextSkillImg_obj == click_obj then--突破的下一阶技能图标
|
|
if not self.sp_grade then return end
|
|
local next_grade_condition_cfg = self.model:GetSoulPowerGradeCfgByGrade(self.sp_grade+1)
|
|
if not next_grade_condition_cfg then return end
|
|
local skill_info = stringtotable(next_grade_condition_cfg.skills)[1]
|
|
local data = {
|
|
skill_id = tonumber(skill_info[1]),
|
|
skill_lv = tonumber(skill_info[2]),
|
|
}
|
|
GlobalEventSystem:Fire(EventName.OPEN_COMMON_SKILL_TIPS, data)
|
|
elseif self.nowSkillImg_obj == click_obj then--当前技能图标
|
|
if not self.sp_grade_condition_cfg then return end
|
|
local skill_info = stringtotable(self.sp_grade_condition_cfg.skills)[1]
|
|
local data = {
|
|
skill_id = tonumber(skill_info[1]),
|
|
skill_lv = tonumber(skill_info[2]),
|
|
}
|
|
GlobalEventSystem:Fire(EventName.OPEN_COMMON_SKILL_TIPS, data)
|
|
end
|
|
end
|
|
AddClickEvent(self.chargeBtn_obj, on_click)
|
|
AddClickEvent(self.activateBtn_obj, on_click)
|
|
AddClickEvent(self.upGradeBtn_obj, on_click)
|
|
AddClickEvent(self.skillIcon_obj, on_click)
|
|
AddClickEvent(self.nextSkillImg_obj, on_click)
|
|
AddClickEvent(self.nowSkillImg_obj, on_click)
|
|
|
|
|
|
local update_soul_power_view = function()
|
|
if not self.is_loaded then return end
|
|
self:UpdateView(self.model.need_show_attr_up_effect)
|
|
self.model.need_show_attr_up_effect = false
|
|
end
|
|
self:BindEvent(self.model, SoulPowerConst.UPDATE_SOUL_POWER_VIEW, update_soul_power_view)
|
|
|
|
local function on_update_goods_num()
|
|
if not self.is_loaded then return end
|
|
self:UpdateMaterial()
|
|
self:UpdateUpLvBtnState()
|
|
end
|
|
self:BindEvent(self.model,SoulPowerConst.UPDATE_SP_GOODS_NUM,on_update_goods_num)
|
|
|
|
end
|
|
|
|
function SoulPowerView:DoSPCharge(type)
|
|
if TimeUtil:getServerTimeMs()/1000-self.last_charge_time <= 0.25 then
|
|
return
|
|
end
|
|
self.last_charge_time = TimeUtil:getServerTimeMs()/1000
|
|
|
|
|
|
local cost_goods_id = self.model:GetMaterialGoodsId()
|
|
local goods_num = GoodsModel:getInstance():GetTypeGoodsNum(cost_goods_id)
|
|
if type == 1 then--充能一个
|
|
if goods_num == 0 then
|
|
Message.show("材料不足")
|
|
UIToolTipMgr:getInstance():AppendGoodsTips(cost_goods_id,nil,nil,nil,nil,nil,nil,true)
|
|
else
|
|
self.old_lv = self.sp_lv
|
|
self.model:Fire(SoulPowerConst.REQUEST_CCMD_EVENT,14401,1)
|
|
end
|
|
elseif type == 2 then--自动充能到下一级
|
|
if not self.sp_grade or not self.sp_lv then return end
|
|
local charge_num = 1
|
|
local lv_cfg = self.model:GetSoulPowerLvCfgByGradeLv(self.sp_grade,self.sp_lv)
|
|
local need_energy = lv_cfg and lv_cfg.energy or 0
|
|
local now_energy = self.model:GetSoulPowerNowEnergy()
|
|
local left_energy = need_energy-now_energy
|
|
charge_num = left_energy/self.model:GetMaterialCanGetEnergy()
|
|
if goods_num == 0 then
|
|
Message.show("材料不足")
|
|
UIToolTipMgr:getInstance():AppendGoodsTips(cost_goods_id,nil,nil,nil,nil,nil,nil,true)
|
|
elseif goods_num >= charge_num then
|
|
self.old_lv = self.sp_lv
|
|
self.model:Fire(SoulPowerConst.REQUEST_CCMD_EVENT,14401,charge_num)
|
|
else
|
|
self.old_lv = self.sp_lv
|
|
self.model:Fire(SoulPowerConst.REQUEST_CCMD_EVENT,14401,goods_num)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- --自动充能(14401协议不断请求)
|
|
-- function SoulPowerView:DoAutoCharge( )
|
|
-- if self.is_in_auto_charge then--在自动充能中,点击按钮,取消充能
|
|
-- self:StopAutoCharge()
|
|
-- else
|
|
-- if self.timer_id then
|
|
-- GlobalTimerQuest:CancelQuest(self.timer_id)
|
|
-- self.timer_id = nil
|
|
-- end
|
|
-- local function onTimer()
|
|
-- local sp_grade, sp_lv = self.model:GetSoulPowerNowGradeLv()
|
|
-- if sp_lv == self.model:GetSoulPowerMaxLv(sp_grade) then return end
|
|
-- self:AutoCharge()
|
|
-- end
|
|
-- if not self.timer_id then
|
|
-- self.timer_id = GlobalTimerQuest:AddPeriodQuest(onTimer, 0.2, -1)
|
|
-- self.is_in_auto_charge = true
|
|
-- end
|
|
-- end
|
|
-- end
|
|
|
|
-- function SoulPowerView:AutoCharge( )
|
|
-- local cost_goods_id = self.model:GetMaterialGoodsId()
|
|
-- local goods_num = GoodsModel:getInstance():GetTypeGoodsNum(cost_goods_id)
|
|
-- if goods_num == 0 then
|
|
-- self:StopAutoCharge()
|
|
-- elseif goods_num > 0 and goods_num < self.auto_charge_speed then
|
|
-- self.old_lv = self.sp_lv
|
|
-- self.model:Fire(SoulPowerConst.REQUEST_CCMD_EVENT,14401,goods_num)
|
|
-- else
|
|
-- self.old_lv = self.sp_lv
|
|
-- self.model:Fire(SoulPowerConst.REQUEST_CCMD_EVENT,14401,self.auto_charge_speed)
|
|
-- end
|
|
-- end
|
|
|
|
-- function SoulPowerView:StopAutoCharge( )
|
|
-- self.is_in_auto_charge = false
|
|
-- if self.timer_id then
|
|
-- GlobalTimerQuest:CancelQuest(self.timer_id)
|
|
-- self.timer_id = nil
|
|
-- end
|
|
-- end
|
|
|
|
function SoulPowerView:RequestData( )
|
|
self.model:Fire(SoulPowerConst.REQUEST_CCMD_EVENT,14400)
|
|
end
|
|
|
|
function SoulPowerView:SetData()
|
|
if self.is_loaded then
|
|
self.need_refreshData = false
|
|
self.first_show_slider = false
|
|
self.need_wait_slider = false
|
|
self:RequestData()
|
|
self:AddUIEffect("ui_hunlidizuo_1", self.effect, "UI", nil, 4.2, true)
|
|
else
|
|
self.need_refreshData = true
|
|
end
|
|
end
|
|
|
|
function SoulPowerView:UpdateView(need_show_attr_up_effect)
|
|
self.skillCon_canvas.sortingOrder = self:GetCurrLayerDepth("UI") + 40
|
|
|
|
self.sp_grade, self.sp_lv = self.model:GetSoulPowerNowGradeLv()
|
|
self.sp_grade_cfg = self.model:GetSoulPowerLvCfgByGrade(self.sp_grade) --当前阶数配置
|
|
self.sp_lv_cfg = self.model:GetSoulPowerLvCfgByGradeLv(self.sp_grade, self.sp_lv) --当前阶数当前层数的配置
|
|
self.sp_grade_condition_cfg = self.model:GetSoulPowerGradeCfgByGrade(self.sp_grade) --当前阶数的额外配置
|
|
self.sp_max_lv = self.model:GetSoulPowerMaxLv(self.sp_grade) --当前阶数的最高层数
|
|
|
|
if not self.sp_lv_cfg or not self.sp_grade_cfg or not self.sp_grade_condition_cfg then return end
|
|
|
|
local now_skill_data = stringtotable(self.sp_grade_condition_cfg.skills)
|
|
lua_resM:setOutsideImageSprite(self, self.skillIcon_img, GameResPath.GetSkillIcon(now_skill_data[1][1]))
|
|
local now_skill_cfg = ConfigItemMgr.Instance:GetSkillItem(now_skill_data[1][1])
|
|
self.skillName_tmp.text = Trim(now_skill_cfg.name).." <#fdffc2>[Lv."..now_skill_data[1][2].."]</color>"
|
|
|
|
|
|
self:UpdateItemCon()
|
|
self:UpdateBaseInfoShow()
|
|
self:UpdateRightInfoSHow(need_show_attr_up_effect)
|
|
end
|
|
|
|
function SoulPowerView:ArrowAnimation(time)
|
|
self:StopAnim()
|
|
local call_fun = function ()
|
|
local function onCompleted()
|
|
self:ArrowAnimation(time)
|
|
end
|
|
self.tween_id3 =TweenLite.to(self, self.skillBg,TweenLite.UiAnimationType.ANCHORED_POSY,-2, 2.5, onCompleted)
|
|
end
|
|
local onDelay = function( )
|
|
self.tween_id2 =TweenLite.to(self, self.skillBg,TweenLite.UiAnimationType.ANCHORED_POSY,7, 2.5, call_fun)
|
|
end
|
|
self.arrow_timer_id = setTimeout(onDelay, time)
|
|
end
|
|
|
|
function SoulPowerView:StopAnim()
|
|
if self.tween_id2 then
|
|
TweenLite.Stop(self.tween_id2)
|
|
self.tween_id2 = nil
|
|
end
|
|
if self.tween_id3 then
|
|
TweenLite.Stop(self.tween_id3)
|
|
self.tween_id3 = nil
|
|
end
|
|
if self.arrow_timer_id then
|
|
GlobalTimerQuest:CancelQuest(self.arrow_timer_id)
|
|
self.arrow_timer_id = nil
|
|
end
|
|
end
|
|
|
|
--item栏
|
|
function SoulPowerView:UpdateItemCon( )
|
|
if self.model.has_create_once then return end--打开界面只创建一次,后面收到14500只对item进行更新
|
|
local sp_item_data = {}
|
|
for i,v in ipairs(self.sp_grade_cfg) do
|
|
if v.lv~=0 then
|
|
table.insert(sp_item_data,v)
|
|
end
|
|
end
|
|
for k,v in pairs(self.sp_item_list) do
|
|
v:SetVisible(false)
|
|
end
|
|
for i,v in ipairs(sp_item_data) do
|
|
local item = self.sp_item_list[i]
|
|
if not item then
|
|
item = SoulPowerItem.New(self.itemCon)
|
|
self.sp_item_list[i] = item
|
|
end
|
|
item:SetVisible(true)
|
|
item:SetData(v ,i)
|
|
item:SetPosition(SoulPowerConst.SoulPowerItemPos[i].x, SoulPowerConst.SoulPowerItemPos[i].y)
|
|
end
|
|
self.model.has_create_once = true
|
|
end
|
|
|
|
--技能、名字、战力等基础显示
|
|
function SoulPowerView:UpdateBaseInfoShow( )
|
|
-- local fight = self.model:GetSoulPowerNowPower()
|
|
-- self.nowFight_txt.text = fight
|
|
self.gradeName_tmp.text = string.format("%s阶 %s", self.sp_grade, Trim(self.sp_grade_condition_cfg.name))
|
|
end
|
|
|
|
--刷新右侧栏显示(突破 or 激活)
|
|
function SoulPowerView:UpdateRightInfoSHow(need_show_attr_up_effect)
|
|
if self.sp_lv == self.sp_max_lv then --已经升到最高层了,展示突破界面
|
|
self.upLvCon_obj:SetActive(false)
|
|
self.upGradeCon_obj:SetActive(true)
|
|
self:UpdateUpGradeCon()
|
|
else
|
|
self.upLvCon_obj:SetActive(true)
|
|
self.upGradeCon_obj:SetActive(false)
|
|
self:UpdateUpLvCon()
|
|
end
|
|
self:UpdateRightCommonInfo(self.sp_lv == self.sp_max_lv,need_show_attr_up_effect)
|
|
end
|
|
|
|
function SoulPowerView:UpdateRightCommonInfo(is_grade_up,need_show_attr_up_effect)
|
|
--技能
|
|
local now_skill_data = stringtotable(self.sp_grade_condition_cfg.skills)
|
|
lua_resM:setOutsideImageSprite(self, self.nowSkillImg_img, GameResPath.GetSkillIcon(now_skill_data[1][1]))
|
|
local now_skill_cfg = ConfigItemMgr.Instance:GetSkillItem(now_skill_data[1][1])
|
|
self.nowSkillName_tmp.text = Trim(now_skill_cfg.name).." <#a9c1e1>[Lv."..now_skill_data[1][2].."]"
|
|
-- 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 "技能配置缺失"
|
|
-- self.skillDes_tmp.text = skill_des
|
|
|
|
local have_next_skill = false
|
|
|
|
local next_grade_condition_cfg = self.model:GetSoulPowerGradeCfgByGrade(self.sp_grade+1)
|
|
local next_skill_data = {}
|
|
if not next_grade_condition_cfg then
|
|
self.nextSkillImg_obj:SetActive(false)
|
|
self.nextSkillDi_obj:SetActive(false)
|
|
SetAnchoredPositionX(self.nowSkillImg, 108)
|
|
SetAnchoredPositionX(self.nowSkillName, 108)
|
|
SetAnchoredPositionX(self.nowSkillDi, 108)
|
|
self.nextSkillName_tmp.text = ""
|
|
have_next_skill = false
|
|
else
|
|
self.nextSkillImg_obj:SetActive(true)
|
|
self.nextSkillDi_obj:SetActive(true)
|
|
SetAnchoredPositionX(self.nowSkillImg, 6)
|
|
SetAnchoredPositionX(self.nowSkillName, 6)
|
|
SetAnchoredPositionX(self.nowSkillDi, 6)
|
|
--下阶技能
|
|
next_skill_data = stringtotable(next_grade_condition_cfg.skills)
|
|
lua_resM:setOutsideImageSprite(self, self.nextSkillImg_img, GameResPath.GetSkillIcon(next_skill_data[1][1]))
|
|
local next_skill_cfg = ConfigItemMgr.Instance:GetSkillItem(next_skill_data[1][1])
|
|
self.nextSkillName_tmp.text = Trim(next_skill_cfg.name).." <#fdffc2>[Lv."..next_skill_data[1][2].."]"
|
|
have_next_skill = true
|
|
end
|
|
|
|
--属性
|
|
local attr_cfg = stringtotable(self.sp_lv_cfg.attrs)
|
|
local next_attr_cfg = {}
|
|
if is_grade_up then
|
|
local next_sp_grade_lv_cfg = self.model:GetSoulPowerLvCfgByGradeLv(self.sp_grade+1, 0)
|
|
if next_sp_grade_lv_cfg then
|
|
next_attr_cfg = stringtotable(next_sp_grade_lv_cfg.attrs)
|
|
end
|
|
else
|
|
local next_sp_lv_cfg = self.model:GetSoulPowerLvCfgByGradeLv(self.sp_grade, self.sp_lv+1)
|
|
if next_sp_lv_cfg then
|
|
next_attr_cfg = stringtotable(next_sp_lv_cfg.attrs)
|
|
end
|
|
end
|
|
|
|
local now_skill_faker_attr_data = {}
|
|
local next_skill_faker_attr_data = {}
|
|
local now_skill_lv_hp_value = self.model:GetSoulPowerHpResumeCfg(now_skill_data[1][2]) or 0
|
|
now_skill_faker_attr_data = {9999,now_skill_lv_hp_value}
|
|
local next_skill_lv_hp_value = 0
|
|
if have_next_skill then
|
|
next_skill_lv_hp_value = self.model:GetSoulPowerHpResumeCfg(next_skill_data[1][2]) or 0
|
|
end
|
|
next_skill_faker_attr_data = {9999,next_skill_lv_hp_value}
|
|
table.insert(attr_cfg,1,now_skill_faker_attr_data)
|
|
table.insert(next_attr_cfg,1,next_skill_faker_attr_data)
|
|
|
|
if not self.item_list_com then
|
|
self.item_list_com = self:AddUIComponent(UI.ItemListCreator)
|
|
end
|
|
local info = {
|
|
data_list = attr_cfg,
|
|
item_con = self.attrContent,
|
|
item_class = SoulPowerAttrItem,
|
|
-- item_width = 288,
|
|
item_height = 34,
|
|
-- space_x = -5,
|
|
space_y = 2.5,
|
|
start_x = 0,
|
|
start_y = -6.5,
|
|
scroll_view = self.attrScrollView,
|
|
-- create_frequency = 0.01,
|
|
on_update_item = function(item, i, v)
|
|
item:SetData(v, i, next_attr_cfg,need_show_attr_up_effect,is_grade_up)
|
|
end,
|
|
}
|
|
self.item_list_com:UpdateItems(info)
|
|
|
|
for i=1,8 do
|
|
if i <= self.sp_lv then
|
|
lua_resM:setImageSprite(self, self["starLv"..i.."_img"], "soulPower_asset","soul_power_star_lv_1")
|
|
else
|
|
lua_resM:setImageSprite(self, self["starLv"..i.."_img"], "soulPower_asset","soul_power_star_lv_0")
|
|
end
|
|
end
|
|
end
|
|
|
|
function SoulPowerView:UpdateUpLvCon()
|
|
SetAnchoredPositionX(self.nowLvName, 17)
|
|
self.nowLvName_tmp.text = string.format("%s %s层", Trim(self.sp_grade_condition_cfg.name), self.sp_lv)
|
|
self.nextLvName_tmp.text = string.format("%s %s层", Trim(self.sp_grade_condition_cfg.name), self.sp_lv+1)
|
|
--正在充能
|
|
self.chargeName_tmp.text = string.format("充能目标 <#fdffc2>%s%s层</color>", Trim(self.sp_grade_condition_cfg.name), self.sp_lv+1)
|
|
--战力
|
|
local fight = self.model:GetSoulPowerNowFight(self.sp_grade, self.sp_lv)
|
|
local add_fight = self.model:GetSoulPowerNextUpLvFight(self.sp_grade, self.sp_lv)
|
|
self.nowFight_txt.text = "f"..fight
|
|
self.nextFight_tmp.text = add_fight
|
|
SetAnchoredPositionX(self.nextFightArrow, 36+self.nowFight_txt.preferredWidth/2+50)
|
|
SetAnchoredPositionX(self.nextFight, 36+self.nowFight_txt.preferredWidth/2+50+25)
|
|
self.nextFightArrow_obj:SetActive(true)
|
|
|
|
SetAnchoredPositionX(self.nowLvDi,28)
|
|
self.nextLvDi_obj:SetActive(true)
|
|
|
|
--材料
|
|
self:UpdateMaterial()
|
|
--进度条
|
|
self:UpdateFillAmount()
|
|
--按钮状态
|
|
self:UpdateUpLvBtnState()
|
|
end
|
|
|
|
--充能材料展示
|
|
function SoulPowerView:UpdateMaterial( )
|
|
local cost_goods_id = self.model:GetMaterialGoodsId()
|
|
local goods_name = GoodsModel:getInstance():getGoodsName(cost_goods_id,true)
|
|
self.materialName_tmp.text = goods_name
|
|
local goods_num = GoodsModel:getInstance():GetTypeGoodsNum(cost_goods_id)
|
|
self.cost_item:SetData(cost_goods_id)
|
|
local get_str = HtmlColorTxt(goods_num, goods_num < 1 and ColorUtil.RED_DARK or ColorUtil.GREEN_DARK).."/".. 1
|
|
self.cost_item:IsGetGoods(true,get_str,false)
|
|
end
|
|
|
|
function SoulPowerView:UpdateFillAmount()
|
|
if not self.sp_grade or not self.sp_lv then return end
|
|
local lv_cfg = self.model:GetSoulPowerLvCfgByGradeLv(self.sp_grade,self.sp_lv)
|
|
local need_energy = lv_cfg and lv_cfg.energy or 0
|
|
local now_energy = self.model:GetSoulPowerNowEnergy()
|
|
local ratio = now_energy/need_energy
|
|
|
|
self.sliderText_tmp.text = now_energy.."/"..need_energy
|
|
|
|
if not self.first_show_slider then
|
|
self.chargeSlider_img.fillAmount = ratio
|
|
self.first_show_slider = true
|
|
return
|
|
end
|
|
------------------------------------------------------
|
|
if self.need_wait_slider then return end
|
|
|
|
if self.tween_slider_id then
|
|
TweenLite.Stop(self.tween_slider_id)
|
|
self.tween_slider_id = nil
|
|
end
|
|
if self.tween_slider_id_2 then
|
|
TweenLite.Stop(self.tween_slider_id_2)
|
|
self.tween_slider_id_2 = nil
|
|
end
|
|
if self.tween_slider_id_3 then
|
|
TweenLite.Stop(self.tween_slider_id_3)
|
|
self.tween_slider_id_3 = nil
|
|
end
|
|
|
|
local old_value = self.chargeSlider_img.fillAmount
|
|
local end_value = ratio
|
|
local need_time
|
|
local need_time_2
|
|
if self.old_lv and self.sp_lv > self.old_lv then--说明升级了,要先跑满这一条再继续跑
|
|
need_time = 1*(1-old_value)/4
|
|
need_time = need_time >= 0.15 and need_time or 0.15
|
|
need_time_2 = 1*end_value
|
|
need_time_2 = need_time_2 >= 0.15 and need_time_2 or 0.15
|
|
local function end_call()
|
|
self.chargeSlider_img.fillAmount = 0
|
|
--最终纠正进度条
|
|
local function final_call()
|
|
local lv_cfg = self.model:GetSoulPowerLvCfgByGradeLv(self.sp_grade,self.sp_lv)
|
|
local need_energy = lv_cfg and lv_cfg.energy or 0
|
|
local now_energy = self.model:GetSoulPowerNowEnergy()
|
|
local ratio = now_energy/need_energy
|
|
local function final_call_2()
|
|
self.chargeSlider_img.fillAmount = ratio
|
|
end
|
|
self.tween_slider_id_3 = TweenLite.to(self, self.chargeSlider, TweenLite.UiAnimationType.FILLAMOUNT, ratio, need_time_2,final_call_2)
|
|
end
|
|
self.tween_slider_id_2 = TweenLite.to(self, self.chargeSlider, TweenLite.UiAnimationType.FILLAMOUNT, end_value, need_time_2,final_call)
|
|
self.need_wait_slider = false
|
|
end
|
|
self.tween_slider_id = TweenLite.to(self, self.chargeSlider, TweenLite.UiAnimationType.FILLAMOUNT,1, need_time,end_call)
|
|
self.need_wait_slider = true
|
|
|
|
-- self.model:Fire(PetConst.PLAY_PET_LV_UP_EFFECT)
|
|
else
|
|
need_time = 1*(end_value-old_value)/4
|
|
need_time = need_time >= 0.15 and need_time or 0.15
|
|
self.tween_slider_id = TweenLite.to(self, self.chargeSlider, TweenLite.UiAnimationType.FILLAMOUNT, end_value, need_time)
|
|
end
|
|
|
|
--播放属性特效有cd,必须等播完才能再播
|
|
local need_play_slider_effect = true
|
|
if need_play_slider_effect then
|
|
if TimeUtil:getServerTimeMs()/1000-self.old_slider_effct_play_time <= 0.6 then
|
|
need_play_slider_effect = false
|
|
end
|
|
if need_play_slider_effect then
|
|
self:AddUIEffect("ui_jinjiejindu", self.sliderEffect, "UI", nil, 1, false, nil, false)
|
|
self.old_slider_effct_play_time = TimeUtil:getServerTimeMs()/1000
|
|
end
|
|
end
|
|
|
|
end
|
|
|
|
function SoulPowerView:UpdateUpLvBtnState( )
|
|
--有材料 显示红点 没材料 置灰按钮
|
|
local cost_goods_id = self.model:GetMaterialGoodsId()
|
|
local goods_num = GoodsModel:getInstance():GetTypeGoodsNum(cost_goods_id)
|
|
if goods_num > 0 then
|
|
self.activateRed_obj:SetActive(true)
|
|
self.chargeRed_obj:SetActive(true)
|
|
-- SetImageGray(self.activateBtn_img,false)
|
|
-- SetTMPSharedMaterial(self.activateText_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkOrangeBtn)
|
|
-- SetImageGray(self.chargeBtn_img,false)
|
|
-- SetTMPSharedMaterial(self.Text_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkBlueBtn)
|
|
else
|
|
self.activateRed_obj:SetActive(false)
|
|
self.chargeRed_obj:SetActive(false)
|
|
-- SetImageGray(self.activateBtn_img,true)
|
|
-- SetTMPSharedMaterial(self.activateText_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
|
|
-- SetImageGray(self.chargeBtn_img,true)
|
|
-- SetTMPSharedMaterial(self.Text_tmp, ShaderTools.TMPSharedMaterialType.FZZZOutlineDarkGrayBtn)
|
|
end
|
|
end
|
|
|
|
-- function SoulPowerView:UpdateLeftTime( )
|
|
-- if not self.sp_grade or not self.sp_lv then return end
|
|
-- local time_head, time_tail = self.model:GetSoulPowerTimeHeadTail()
|
|
-- local next_lv_total_time = self.model:GetSoulPowerNextLvNeedTotalTime(self.sp_grade, self.sp_lv)
|
|
-- self.left_time = time_tail - next_lv_total_time - TimeUtil:getServerTime()
|
|
-- if self.left_time < 0 then self.left_time = 0 end
|
|
-- self.chargeLeftTime_tmp.text = string.format("剩余时间:<color=#2CF86F>%s</color>",TimeUtil:timeConvert(self.left_time, "hh:mm:ss"))
|
|
-- if self.left_time <= 0 then
|
|
-- self.activateRed_obj:SetActive(true)
|
|
-- if self.tween_slider_id then
|
|
-- TweenLite.Stop(self.tween_slider_id)
|
|
-- self.tween_slider_id = nil
|
|
-- end
|
|
-- SetSizeDeltaX(self.chargeSlider, 300)
|
|
-- end
|
|
-- end
|
|
|
|
-- function SoulPowerView:UpdateFillAmount( )
|
|
-- if self.tween_slider_id then
|
|
-- TweenLite.Stop(self.tween_slider_id)
|
|
-- self.tween_slider_id = nil
|
|
-- end
|
|
-- if not self.sp_grade or not self.sp_lv then return end
|
|
-- local next_lv_need_time = self.sp_lv_cfg.need
|
|
-- local ratio = (next_lv_need_time - self.left_time) / next_lv_need_time
|
|
-- SetSizeDeltaX(self.chargeSlider, ratio*300)
|
|
-- if self.left_time <= 0 then
|
|
-- if self.tween_slider_id then
|
|
-- TweenLite.Stop(self.tween_slider_id)
|
|
-- self.tween_slider_id = nil
|
|
-- end
|
|
-- SetSizeDeltaX(self.chargeSlider, 300)
|
|
-- else
|
|
-- self.tween_slider_id = TweenLite.to(self, self.chargeSlider, TweenLite.UiAnimationType.WIDTH, 300, self.left_time)
|
|
-- end
|
|
-- end
|
|
|
|
function SoulPowerView:UpdateUpGradeCon( )
|
|
--更新到突破后,停止进度条 并重置
|
|
self.first_show_slider = false
|
|
self.need_wait_slider = false
|
|
if self.tween_slider_id then
|
|
TweenLite.Stop(self.tween_slider_id)
|
|
self.tween_slider_id = nil
|
|
end
|
|
if self.tween_slider_id_2 then
|
|
TweenLite.Stop(self.tween_slider_id_2)
|
|
self.tween_slider_id_2 = nil
|
|
end
|
|
if self.tween_slider_id_3 then
|
|
TweenLite.Stop(self.tween_slider_id_3)
|
|
self.tween_slider_id_3 = nil
|
|
end
|
|
|
|
|
|
|
|
local fight = self.model:GetSoulPowerNowFight(self.sp_grade, self.sp_lv)
|
|
self.nowFight_txt.text = "f"..fight
|
|
self.nowLvName_tmp.text = string.format("%s阶 %s", self.sp_grade, Trim(self.sp_grade_condition_cfg.name))
|
|
SetAnchoredPositionX(self.nextFightArrow, 36+self.nowFight_txt.preferredWidth/2+50)
|
|
SetAnchoredPositionX(self.nextFight, 36+self.nowFight_txt.preferredWidth/2+50+25)
|
|
|
|
SetAnchoredPositionX(self.nowFight,63)
|
|
|
|
local next_grade_condition_cfg = self.model:GetSoulPowerGradeCfgByGrade(self.sp_grade+1)
|
|
if not next_grade_condition_cfg then
|
|
SetAnchoredPositionX(self.nowFight,98)
|
|
self.nextFightArrow_obj:SetActive(false)
|
|
self.nextFight_tmp.text = ""
|
|
self.upGraderedDot_obj:SetActive(false)
|
|
self.nextLvName_tmp.text = ""
|
|
self.upGradeBtn_obj:SetActive(false)
|
|
self.gradeEmpty_obj:SetActive(true)
|
|
self.conditionScrollView_obj:SetActive(false)
|
|
SetAnchoredPositionX(self.nowLvName, 108)
|
|
SetAnchoredPositionX(self.nowLvDi,110)
|
|
self.nextLvDi_obj:SetActive(false)
|
|
self.nextLvArrow_obj:SetActive(false)
|
|
self.nextSkillArrow_obj:SetActive(false)
|
|
return
|
|
end
|
|
|
|
self.nextFightArrow_obj:SetActive(true)
|
|
self.upGradeBtn_obj:SetActive(true)
|
|
self.gradeEmpty_obj:SetActive(false)
|
|
self.conditionScrollView_obj:SetActive(true)
|
|
SetAnchoredPositionX(self.nowLvName, 17)
|
|
|
|
SetAnchoredPositionX(self.nowLvDi,28)
|
|
self.nextLvDi_obj:SetActive(true)
|
|
self.nextLvArrow_obj:SetActive(true)
|
|
self.nextSkillArrow_obj:SetActive(true)
|
|
|
|
--下阶名字
|
|
self.nextLvName_tmp.text = string.format("%s阶 %s", self.sp_grade+1, Trim(next_grade_condition_cfg.name))
|
|
|
|
--条件
|
|
local condition_data = stringtotable(self.sp_grade_condition_cfg.condition)
|
|
if not self.condition_list_com then
|
|
self.condition_list_com = self:AddUIComponent(UI.ItemListCreator)
|
|
end
|
|
local info = {
|
|
data_list = condition_data,
|
|
item_con = self.conditionContent,
|
|
item_class = SoulPowerConditionItem,
|
|
-- item_width = 111,
|
|
item_height = 30,
|
|
-- space_x = 0,
|
|
space_y = 16,
|
|
start_x = 6,
|
|
start_y = -8,
|
|
scroll_view = self.conditionScrollView,
|
|
create_frequency = 0.01,
|
|
on_update_item = function(item, i, v)
|
|
item:SetData(v)
|
|
end,
|
|
}
|
|
self.condition_list_com:UpdateItems(info)
|
|
--突破按钮
|
|
local can_up_grade = true
|
|
for i,v in ipairs(condition_data) do
|
|
local is_arrive = false
|
|
if v[1] == SoulPowerConst.UpGradeConditionType.Lv then
|
|
is_arrive = RoleManager.Instance.mainRoleInfo.level >= v[2]
|
|
elseif v[1] == SoulPowerConst.UpGradeConditionType.DunTower then
|
|
local easy_pass_num,diffcult_pass_num = BaseDungeonModel:getInstance():GetOneTowerPassRecord()
|
|
is_arrive = easy_pass_num >= v[2]
|
|
end
|
|
if not is_arrive then
|
|
can_up_grade = false
|
|
break
|
|
end
|
|
end
|
|
self.upGraderedDot_obj:SetActive(can_up_grade)
|
|
|
|
--突破战力
|
|
local next_grade_fight = self.model:GetSoulPowerNowFight(self.sp_grade+1, 0)
|
|
self.nextFight_tmp.text = next_grade_fight-fight
|
|
end
|
|
|
|
|
|
function SoulPowerView:__delete( )
|
|
self.model.has_create_once = false
|
|
self:ClearUIEffect(self.effect)
|
|
self:ClearUIEffect(self.sliderEffect)
|
|
for i, v in ipairs(self.sp_item_list) do
|
|
v:DeleteMe()
|
|
end
|
|
self.sp_item_list = {}
|
|
|
|
if self.tween_slider_id then
|
|
TweenLite.Stop(self.tween_slider_id)
|
|
self.tween_slider_id = nil
|
|
end
|
|
if self.tween_slider_id_2 then
|
|
TweenLite.Stop(self.tween_slider_id_2)
|
|
self.tween_slider_id_2 = nil
|
|
end
|
|
|
|
self:StopAnim()
|
|
|
|
if self.timer_id then
|
|
GlobalTimerQuest:CancelQuest(self.timer_id)
|
|
self.timer_id = nil
|
|
end
|
|
|
|
self.first_show_slider = false
|
|
end
|