---@class KLSkillBtnItem:UIKmlLuaPanelBase ---@field view KLSkillBtnItemView ---@field baseUI KLMainAttackPanel local KLSkillBtnItem = class(UIKmlLuaPanelBase) local this = KLSkillBtnItem ---创建时调用一次 function this:Init() end ---创建或者刷新界面数据时调用 function this:Refresh() GUI:Text_setString(self.view.cdTime, "") end function this:UpdateUI(skillId, isLock) GUI:SetActive(self.view.selectBg, false) self.skillId = skillId or 0 local spriteName = "" GUI:setVisible(self.view.lockImg, false) GUI:setVisible(self.view.lockText, false) if self.skillId > 0 then ---@type Skill local skill = SL:GetMetaValue(EMetaVarGetKey.SKILL_DATA, self.skillId) if skill then local skillLv = skill and skill.level or 1 ---@type cfg_skill_info_column local tbl = SL:GetConfigMultiKeys('cfg_skill_info', self.skillId, skillLv, 'skillID', 'skillLevel') spriteName = string.isNullOrEmpty(tbl.icon) and "" or tbl.icon if InfoManager.shapeShiftCardInfo:isShiftMonster() then local lockSkill = InfoManager.shapeShiftCardInfo:GetLockShiftSkill() if isLock then GUI:setVisible(self.view.lockImg, true) GUI:setVisible(self.view.lockText, true) GUI:Text_setString(self.view.lockText, "Lv." .. lockSkill[skillId] .. "解锁") end end else self.skillId = 0 end end GUI:SetCirclebar_startper(self.view.Img_cdTime, 0) GUI:Text_setString(self.view.cdTime, "") GUI:Image_loadTexture(self.view.SkillIcon, spriteName, "Atlas/UIOutSkillIcon.spriteatlas") end ---注册UI事件和服务器消息 function this:RegistEvents() GUI:AddOnTouchEvent(self.view.BtnSkill, self, self.OnTouchEvent) GUI:AddOnClickEvent(self.view.BtnSkill, self, self.BtnSkillOnClick) SL:RegisterLUAEvent(Event.Skill_CDing, self.OnSkillCDing, self) end ---@param skill Skill function this:OnSkillCDing(_, skill) if self.skillId ~= skill.skillId then return end self.remainCdTime = skill:LeftCDTime() if skill.curCDTime / 1000 ~= self.cdTime then self.cdTime = skill.curCDTime / 1000 end if not self.cdTime then return end if self.remainCdTime / self.cdTime <= 0.05 then GUI:SetCirclebar_startper(self.view.Img_cdTime, 0) GUI:Text_setString(self.view.cdTime, "") else local startper = self.remainCdTime / self.cdTime * 100 startper = math.floor(startper) GUI:SetCirclebar_startper(self.view.Img_cdTime, startper) GUI:SetCirclebar_time(self.view.Img_cdTime, self.remainCdTime) GUI:Text_setString(self.view.cdTime, string.format("%0.1f", self.remainCdTime)) end end function this:BtnSkillOnClick() if self.skillId == 0 then return GUI:UIPanel_Open("dev/ui/Skill/Panel/KLUISkillInfo/KLUISkillInfoPanel", nil, nil, ESkillUIShowPage.Setting) end ---@type Skill local skill = SL:GetMetaValue(EMetaVarGetKey.SKILL_DATA, self.skillId) if not skill or not skill:IsCDEnough() then return end if skill.skillTbl.releaseType == ESkillReleaseType.NeedNoTarget then GUI:SetActive(self.view.selectBg, true) --SceneTouch.selectSkill = self.skillId SL.Scene:SetSelectSkill(self.skillId) --RoleManager.me:SelectAttackModel(skill.skillInfoTbl.releaseRange[1]) SL:SelectAttackModel(skill.skillInfoTbl.releaseRange[1]) else ---@type CheckIsCanSkillDataType local skillDat = { skillId = self.skillId, } SL:onLUAEvent(Event.ReleaseSkill, skillDat) end end ---@param kmlCtrl UIKmlLuaControl ---@param eventType EUIEventName function this:OnTouchEvent(kmlCtrl, eventType, args) return self.baseUI:OnTouchEvent(kmlCtrl, eventType, args) end function this:Close() end return this