--圆形cd
|
|
CirCleCdView = CirCleCdView or BaseClass(BaseComponent)
|
|
local CirCleCdView = CirCleCdView
|
|
local math_ceil = math.ceil
|
|
local string_format = string.format
|
|
function CirCleCdView:__init(handle_wnd, callback, is_base_skill, skill_id, width, height, font_size)
|
|
self:InitData(callback, is_base_skill, skill_id, width, height, font_size)
|
|
self:CreateGameObject(UIType.CircleCd)
|
|
end
|
|
function CirCleCdView:InitData(callback, is_base_skill, skill_id, width, height, font_size)
|
|
self.callback = callback
|
|
self.is_base_skill = is_base_skill
|
|
self.skill_id = skill_id
|
|
self.width = width or 86
|
|
self.height = height or 86
|
|
self.font_size = font_size
|
|
self.is_light_guide = true --幻光新手引导
|
|
end
|
|
|
|
function CirCleCdView:LoadSuccess()
|
|
self.mask = self:GetChild("mask"):GetComponent("Image")
|
|
self.cdTimeText = self:GetChild("cdTimeText"):GetComponent("Text")
|
|
self:GetChild("mask").sizeDelta = Vector2(self.width,self.height)
|
|
self:InitEvent()
|
|
self:Show(0,0)
|
|
|
|
SkillManager:getInstance():AddCDItem(self.skill_id,self)
|
|
end
|
|
|
|
function CirCleCdView:InitEvent()
|
|
local function onStartCdHandler(skill_id,cdTime)
|
|
if self.skill_id == skill_id then
|
|
--幻光新手引导
|
|
if self.skill_id == 120001 and self.is_light_guide then
|
|
GlobalEventSystem:Fire(EventName.HIDE_LIGHT_EFFCT_ICON)
|
|
self.is_light_guide = false
|
|
end
|
|
self:Show(cdTime,0)
|
|
end
|
|
end
|
|
self.start_cd_id = SkillManager:getInstance():Bind(SkillManager.START_SKILL_CD,onStartCdHandler)
|
|
|
|
local function onLockCDHandler(lock)
|
|
if self.skill_id ~= SkillManager.JUMP_SKILL_ID then --不能控制跳跃的cd状态
|
|
if lock then
|
|
self:PauseCD()
|
|
else
|
|
self:ContinueCD()
|
|
end
|
|
end
|
|
end
|
|
self.lock_cd_id = SkillManager:getInstance():Bind(SkillManager.LOCK_CD,onLockCDHandler)
|
|
|
|
local function onRefreshCDHandler(list)
|
|
if not self:IsPlaying() then
|
|
return
|
|
end
|
|
for index,vo in pairs(list) do
|
|
if self.skill_id == vo.skill_id then
|
|
local left_cd_time = (vo.cd_time - TimeUtil:getServerTimeMs( )) / 1000
|
|
local skillVo = SkillManager:getInstance():getSkill(self.skill_id)
|
|
if skillVo ~= nil then
|
|
local real_cd_time = skillVo:getRealCD()
|
|
if real_cd_time > left_cd_time then
|
|
local cd_time = skillVo:getCd() / 1000
|
|
local last_time = cd_time - left_cd_time
|
|
skillVo:refreshCD(real_cd_time - left_cd_time)
|
|
self:Show(cd_time,last_time)
|
|
end
|
|
end
|
|
break
|
|
end
|
|
end
|
|
end
|
|
self.refresh_cd_id = SkillManager:getInstance():Bind(SkillManager.REFRESH_CD,onRefreshCDHandler)
|
|
end
|
|
|
|
function CirCleCdView:__defineVar()
|
|
return {
|
|
_class_type = self,
|
|
--_cid = self._id,
|
|
_iid = _in_obj_ins_id,
|
|
_use_delete_method = false,
|
|
skill_id = nil,
|
|
width = nil,
|
|
height = nil,
|
|
font_size = nil,
|
|
callback = nil,
|
|
all_time = 0,
|
|
last_time = 0,
|
|
curr_show_time = 0,
|
|
is_dead = false,
|
|
is_playing = false,
|
|
is_pause = false,
|
|
is_base_skill = false
|
|
}
|
|
end
|
|
function CirCleCdView:IsPlaying()
|
|
return self.is_playing
|
|
end
|
|
|
|
function CirCleCdView:SetSkillId(skill_id)
|
|
self:RemoveTimer()
|
|
self.cdTimeText.text = ""
|
|
self.mask.fillAmount = 0
|
|
|
|
self.skill_id = skill_id
|
|
SkillManager:getInstance():AddCDItem(self.skill_id,self)
|
|
local skillVo = SkillManager:getInstance():getSkill(self.skill_id)
|
|
if skillVo ~= nil then
|
|
local cdTime = skillVo:getRealCD()
|
|
if cdTime > 0 then
|
|
self:Show(cdTime,0)
|
|
end
|
|
end
|
|
-- local cdTime = 1
|
|
-- cdTime = skillVo:getCd()/1000
|
|
-- self:Show(cdTime,0)
|
|
-- end
|
|
end
|
|
|
|
function CirCleCdView:Show(all_time, last_time, skill_id)
|
|
self:RemoveTimer()
|
|
self.all_time = all_time
|
|
self.last_time = last_time or 0
|
|
self.curr_show_time = 0
|
|
self.skill_id = skill_id or self.skill_id
|
|
self.mask.color = Color(1,1,1,1)
|
|
self.cdTimeText.color = Color(1,1,1,1)
|
|
|
|
SkillManager:getInstance():AddCDItem(self.skill_id,self)
|
|
|
|
if self.all_time == 0 or self.last_time >= self.all_time then
|
|
self.cdTimeText.text = ""
|
|
self.mask.fillAmount = 0
|
|
return
|
|
end
|
|
if not self.is_base_skill then
|
|
local cur_percent = 1 - self.last_time / self.all_time
|
|
self.mask.fillAmount = cur_percent
|
|
local left_time = self.all_time - self.last_time - self.curr_show_time
|
|
if left_time > 1 then
|
|
self.cdTimeText.text = math_ceil(left_time)
|
|
else
|
|
self.cdTimeText.text = string_format("%.1f", left_time)
|
|
end
|
|
end
|
|
self:AddTimer()
|
|
end
|
|
|
|
|
|
function CirCleCdView:AddTimer()
|
|
Runner.Instance:AddRunObj(self, 3)
|
|
self.is_playing = true
|
|
end
|
|
|
|
function CirCleCdView:RemoveTimer()
|
|
Runner.Instance:RemoveRunObj(self)
|
|
self.is_playing = false
|
|
end
|
|
|
|
--暂停cd
|
|
function CirCleCdView:PauseCD()
|
|
self.is_pause = true
|
|
end
|
|
|
|
function CirCleCdView:ContinueCD()
|
|
self.is_pause = false
|
|
end
|
|
|
|
function CirCleCdView:Update(now_time, elapse_time)
|
|
if self.is_pause then return end
|
|
self.curr_show_time = elapse_time + self.curr_show_time
|
|
local cur_percent = 1 - (self.last_time + self.curr_show_time) / self.all_time
|
|
if cur_percent <= 0 then
|
|
cur_percent = 0
|
|
self:RemoveTimer()
|
|
self.cdTimeText.text = ""
|
|
self.mask.fillAmount = 0
|
|
|
|
if self.callback then
|
|
self.callback()
|
|
end
|
|
return
|
|
end
|
|
|
|
if not self.is_base_skill then
|
|
self.mask.fillAmount = cur_percent
|
|
|
|
local left_time = self.all_time - self.last_time - self.curr_show_time
|
|
if left_time > 1 then
|
|
self.cdTimeText.text = math_ceil(left_time)
|
|
else
|
|
self.cdTimeText.text = string_format("%.1f", left_time)
|
|
end
|
|
end
|
|
end
|
|
function CirCleCdView:__delete( )
|
|
self:RemoveTimer()
|
|
if self.start_cd_id then
|
|
SkillManager:getInstance():UnBind(self.start_cd_id)
|
|
self.start_cd_id = nil
|
|
end
|
|
if self.lock_cd_id then
|
|
SkillManager:getInstance():UnBind(self.lock_cd_id)
|
|
self.lock_cd_id = nil
|
|
end
|
|
if self.refresh_cd_id then
|
|
SkillManager:getInstance():UnBind(self.refresh_cd_id)
|
|
self.refresh_cd_id = nil
|
|
end
|
|
|
|
SkillManager:getInstance():RemoveCdItem(self.skill_id)
|
|
end
|