local HeroInfoComp = class("HeroInfoComp", LuaComponent) local DEFAULT_FACTOR = GConst.BattleConst.DEFAULT_FACTOR local BTN_ICON = {"common_btn_blue_1", "common_btn_yellow_1", "common_btn_grey_1"} local SIZE_DELTA_Y_HERO = 942 local SIZE_DELTA_Y_LOOK = 802 local LV_CELL = "app/ui/hero/cell/lv_cell" function HeroInfoComp:init() local uiMap = self:getUIMap() self.skillBg = uiMap["hero_info.skill_node.skill_bg"] self.imgSkill = uiMap["hero_info.skill_node.skill_bg.skill_icon"] self.skillNameTx = uiMap["hero_info.skill_node.skill_bg.skill_name_tx"] self.btnUp = uiMap["hero_info.up.up_btn"] self.txUpdesc = uiMap["hero_info.up.up_btn.text"] self.btnUp5 = uiMap["hero_info.up.up_5_btn"] self.txUpdesc5 = uiMap["hero_info.up.up_5_btn.text"] self.txElement = uiMap["hero_info.element_bg.element_desc"] self.txSkill = uiMap["hero_info.skill_desc"] self.spineObj = uiMap["hero_info.ui_spine_obj"] self.upgrade = uiMap["hero_info.up"] self.bgElement = uiMap["hero_info.element_bg"] self.gotoBtn = uiMap["hero_info.up.goto_btn"] self.vfx04 = uiMap["hero_info.bg_7.scrollrect.viewport.content.vfx_c1_ui_up_b04"] self.vfx04:setActive(false) self.skill = {} self.skillIcon = {} self.skillDescTxs = {} self.skillNeedStarNodes = {} self.skillNeedStarDescTx1s = {} self.skillNeedStarStarImgs = {} self.skillNeedStarDescTx2s = {} for i = 1, 4 do self.skill[i] = uiMap["hero_info.skill_node.skill_up_" .. i] self.skillIcon[i] = uiMap["hero_info.skill_node.skill_up_" .. i .. ".icon"] self.skillDescTxs[i] = uiMap["hero_info.skill_node.skill_up_" .. i .. ".desc_tx"] self.skillNeedStarNodes[i] = uiMap["hero_info.skill_node.skill_up_" .. i .. ".need_star_node"] self.skillNeedStarDescTx1s[i] = uiMap["hero_info.skill_node.skill_up_" .. i .. ".need_star_node.desc_tx_1"] self.skillNeedStarStarImgs[i] = uiMap["hero_info.skill_node.skill_up_" .. i .. ".need_star_node.star_img"] self.skillNeedStarDescTx2s[i] = uiMap["hero_info.skill_node.skill_up_" .. i .. ".need_star_node.desc_tx_2"] end self.costCell = uiMap["hero_info.up.reward_cell_1"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.REWARD_CELL) self.spineObj:setVisible(false) self.txUpdesc:setText(I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_15, 1)) self.txUpdesc5:setText(I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_15, 5)) self.btnUp:addClickListener(function() ModuleManager.HeroManager:upgradeHero(self.heroEntity:getCfgId(), self.heroEntity) end) self.btnUp5:addClickListener(function() local canLvUpLv, canLvUp = self.heroEntity:getLvUpLv() if not canLvUp then return end ModuleManager.HeroManager:upgradeHero(self.heroEntity:getCfgId(), self.heroEntity, canLvUpLv) end) self.gotoBtn:addClickListener(function() self.parentUI:changePage(GConst.HeroConst.PANEL_TYPE.STAR) end) self.skillBg:addClickListener(function() local cfg = ConfigManager:getConfig("skill")[self.heroEntity:getBaseSkill()] if cfg.buff_id and #cfg.buff_id > 0 then ModuleManager.TipsManager:showSkillTips(self.skillBg, cfg.buff_id) end end) self:bind(DataManager.BagData.ItemData, "dirty", function() self:refresh() end) self.scrollrect = uiMap["hero_info.bg_7.scrollrect"] self.scrollRectComp = uiMap["hero_info.bg_7.scrollrect"]:addLuaComponent(GConst.TYPEOF_LUA_CLASS.SCROLL_RECT_BASE) self.scrollRectComp:addInitCallback(function() return LV_CELL end) self.scrollRectComp:addRefreshCallback(function(index, cell) cell:refresh(self.heroEntity, index, self.lvUp) end) self.scrollRectComp:clearCells() local bg7 = uiMap["hero_info.bg_7"] local rect = self.baseObject:getRectSize() bg7:setSizeDeltaY(rect.height - 766 - 286 + 432) end function HeroInfoComp:setParentUI(parentUI) self.parentUI = parentUI end function HeroInfoComp:setHeroData(heroEntity, onlyLook) self.curLevel = heroEntity:getLv() self.heroEntity = heroEntity self.onlyLook = onlyLook self:bind(self.heroEntity, "isDirty", function() self:refresh(true) end) end function HeroInfoComp:refresh(lvUp) self.lvUp = lvUp self:refreshLvInfo() self:refreshSkillInfo() self:refreshUpInfo() end function HeroInfoComp:refreshSkillInfo() local skillId = self.heroEntity:getBaseSkill() self.skillNameTx:setText(ModuleManager.HeroManager:getSkillName(skillId)) self.txSkill:setText(ModuleManager.HeroManager:getSkillDesc(skillId)) self.imgSkill:setSprite(GConst.ATLAS_PATH.ICON_SKILL, ModuleManager.HeroManager:getSkillIcon(skillId)) local skillList = self.heroEntity:getRogueSkillList() local lv = self.heroEntity:getLv() local star = self.heroEntity:getStar() for i = 1, 4 do local skillInfo = skillList[i] if skillInfo then local skillUnlcokStar = skillInfo[1] local skillId = skillInfo[2] local skillBg = self.skill[i] local skillIcon = self.skillIcon[i] local nextLvUpStar = self.heroEntity:getNextRougeLvUp(i) skillBg:addClickListener(function() local cfg = ConfigManager:getConfig("skill_rogue")[skillId] -- ModuleManager.TipsManager:showSkillTips(skillIcon, cfg.buff_id, skillId) ModuleManager.HeroManager:showHeroSkillInfoUI(self.heroEntity, i, cfg.buff_id) end) skillIcon:setSprite(GConst.ATLAS_PATH.ICON_SKILL_ROGUE, ModuleManager.HeroManager:getSkillRogueIcon(skillId)) skillBg:setTouchEnable(true) if skillUnlcokStar > star then self.skillNeedStarNodes[i]:setActive(true) local nextStar = (skillUnlcokStar - 1)%5 + 1 self.skillNeedStarDescTx1s[i]:setText(nextStar) local meshProComp = self.skillNeedStarDescTx1s[i]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO) local contentWidth = meshProComp.preferredWidth self.skillNeedStarDescTx1s[i]:setSizeDeltaX(contentWidth) local starType = math.ceil(skillUnlcokStar / 5) self.skillNeedStarStarImgs[i]:setSprite(GFunc.getStarImg(starType)) self.skillNeedStarDescTx2s[i]:setText(I18N:getGlobalText(I18N.GlobalConst.STR_UNLOCK)) local meshProComp = self.skillNeedStarDescTx2s[i]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO) local contentWidth = meshProComp.preferredWidth self.skillNeedStarDescTx2s[i]:setSizeDeltaX(contentWidth) self.skillNeedStarNodes[i]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_HORIZONTAL_OR_VERTICAL_LAYOUT):RefreshLayout() skillBg:setSprite(GConst.ATLAS_PATH.ICON_ITEM, "frame_1") else if nextLvUpStar then self.skillNeedStarNodes[i]:setActive(true) local nextStar = (nextLvUpStar - 1)%5 + 1 self.skillNeedStarDescTx1s[i]:setText(nextStar) local meshProComp = self.skillNeedStarDescTx1s[i]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO) local contentWidth = meshProComp.preferredWidth self.skillNeedStarDescTx1s[i]:setSizeDeltaX(contentWidth) local starType = math.ceil(nextLvUpStar / 5) self.skillNeedStarStarImgs[i]:setSprite(GFunc.getStarImg(starType)) self.skillNeedStarDescTx2s[i]:setText(I18N:getGlobalText(I18N.GlobalConst.HERO_DESC_17)) local meshProComp = self.skillNeedStarDescTx2s[i]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO) local contentWidth = meshProComp.preferredWidth self.skillNeedStarDescTx2s[i]:setSizeDeltaX(contentWidth) self.skillNeedStarNodes[i]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_HORIZONTAL_OR_VERTICAL_LAYOUT):RefreshLayout() else self.skillNeedStarNodes[i]:setActive(false) end skillBg:setSprite(GConst.ATLAS_PATH.ICON_SKILL_ROGUE, ModuleManager.HeroManager:getSkillRogueBg(skillId, true)) end end end -- local needPop, isUnlock, skillIdx = self.heroEntity:checkSkillUnlock() -- if needPop then -- self.baseObject:performWithDelayGlobal(function() -- local skillInfo = skillList[skillIdx] -- if skillInfo then -- local skillId = skillInfo[2] -- local cfg = ConfigManager:getConfig("skill_rogue")[skillId] -- ModuleManager.HeroManager:showHeroSkillInfoUI(self.heroEntity, skillIdx, cfg.buff_id, isUnlock, needPop) -- end -- end, 0.5) -- end end function HeroInfoComp:refreshLvInfo() local list = self.heroEntity:getLvAttrPointList() self.scrollRectComp:refillCells(#list) if self.lvUp then local lv = self.heroEntity:getLv() for i, v in ipairs(list) do if lv == v then self.scrollRectComp:moveToIndex(i - 1) self.vfx04:setAnchoredPositionY(-33 - (i - 1) * 58) self.vfx04:setActive(true) break end end else self.vfx04:setActive(false) end end function HeroInfoComp:refreshUpInfo() local canLvUp = self.heroEntity:canLvUp() if not self.heroEntity:isActived() then self.btnUp:setActive(false) self.btnUp5:setActive(false) self.gotoBtn:setActive(false) self.costCell:setActive(false) self.upgrade:setVisible(false) else self.upgrade:setVisible(not self.onlyLook) if self.heroEntity:isMaxLv() then self.btnUp:setActive(false) self.btnUp5:setActive(false) self.gotoBtn:setActive(false) self.costCell:setActive(false) else self.btnUp:setActive(true) self.btnUp5:setActive(true) self.gotoBtn:setActive(false) local cost = {id = self.heroEntity:getLvUpCostId(), num = self.heroEntity:getLvUpMaterialNum() or 0, type = 1} local hadNum = DataManager.BagData.ItemData:getItemNumById(cost.id) self.costCell:setActive(true) self.costCell:refreshByConfig(cost) if hadNum >= cost.num then self.costCell:setNumTx(hadNum .. "/" .. cost.num) else self.costCell:setNumTx("" .. hadNum .. "" .. "/" .. cost.num) end if canLvUp then self.btnUp:setTouchEnable(true) self.btnUp5:setTouchEnable(true) self.btnUp:addRedPoint(70, 30, 1) self.btnUp5:addRedPoint(70, 30, 1) self.btnUp:setSprite(GConst.ATLAS_PATH.COMMON, BTN_ICON[1]) self.btnUp5:setSprite(GConst.ATLAS_PATH.COMMON, BTN_ICON[2]) else self.btnUp:setTouchEnable(false) self.btnUp5:setTouchEnable(false) self.btnUp:removeRedPoint() self.btnUp5:removeRedPoint() self.btnUp:setSprite(GConst.ATLAS_PATH.COMMON, BTN_ICON[3]) self.btnUp5:setSprite(GConst.ATLAS_PATH.COMMON, BTN_ICON[3]) end end end end return HeroInfoComp