--[[ 宠物符文界面 ]]-- local UIGodPetRuneBase = UIViewClass() local EventSystem = require('Event/EventSystem') local TAB_TYPE_BREAK = 0 local TAB_TYPE_STUDY = 1 local TAB_TYPE_FUSION = 2 local CONST_MERGE_COUNT = 4 local MENU_TYPE_NORMAL = 1 local MENU_TYPE_RELATION = 2 local CONST_SUB_PANEL = { [TAB_TYPE_BREAK] = Const_UI_Lua.UIEnum.UIGodPetRuneBreak, [TAB_TYPE_STUDY] = Const_UI_Lua.UIEnum.UIGodPetRuneStudy, [TAB_TYPE_FUSION] = Const_UI_Lua.UIEnum.UIGodPetRuneFusion, } local TEMP_STATE = 1 function UIGodPetRuneBase:OnCreated() self.petSlots = { self.img_PetHead1, self.img_PetHead2, } self.skillBgs = { self.img_SkillBg1, self.img_SkillBg2, self.img_SkillBg3, } self.skillIcon = { self.img_Skill1, self.img_Skill2, self.img_Skill3, } self.normalMenuToggleIds = { Const_IDS.IDS_PetRune8, Const_IDS.IDS_PetRune4, Const_IDS.IDS_PetRune5, Const_IDS.IDS_PetRune6, Const_IDS.IDS_PetRune7 } self.relationMenuToggleIds = { Const_IDS.IDS_PetRune8 } self:CloseMenu() end function UIGodPetRuneBase:OnOpened(context) self:RegistSystemEvent(EventID.UI_Pet_UpdateSlotInfo, self.OnPetInfoUpdate) self:RegistSystemEvent(EventID.UI_Pet_UpdateRuneBagItem, self.OnRuneBagUpdate) self:RegistSystemEvent(EventID.UI_Pet_CancelSelectRune, self.OnCancelSelectRune) self:RegistSystemEvent(CTL.RedPoint.RedPointKey.Formation_Pet_Rune, self.UpdateRuneRed) self:RegistSystemEvent(EventID.UI_CloseAndRecoverView, self.OnCloseAndRecoverView) self.selectCellDict = {} UTL.Toggle.InitToggleGroupByIDS(self.toggles, "text", { Const_IDS.IDS_PetRune2, Const_IDS.IDS_PetRune9, Const_IDS.IDS_PetRune13 }) self.toggles:SetToggleCompImage(1, "img_bg_icon", UTL.Toggle.GetToggleNormalIcon(UTL.Toggle.ToggleType.PetRuneBreak)) self.toggles:SetToggleCompImage(1, "img_SelectedIcon1", UTL.Toggle.GetToggleSelectedIcon(UTL.Toggle.ToggleType.PetRuneBreak)) self.toggles:SetToggleCompImage(2, "img_bg_icon", UTL.Toggle.GetToggleNormalIcon(UTL.Toggle.ToggleType.PetRuneStudy)) self.toggles:SetToggleCompImage(2, "img_SelectedIcon1", UTL.Toggle.GetToggleSelectedIcon(UTL.Toggle.ToggleType.PetRuneStudy)) self.toggles:SetToggleCompImage(3, "img_bg_icon", UTL.Toggle.GetToggleNormalIcon(UTL.Toggle.ToggleType.PetRuneMerge)) self.toggles:SetToggleCompImage(3, "img_SelectedIcon1", UTL.Toggle.GetToggleSelectedIcon(UTL.Toggle.ToggleType.PetRuneMerge)) self.curPetUniqueID = context.petUniqueID self.slotId = context.slotId if self.slotId == 1 then UIUtils.SetLabelText(self.UITemplateTitlePanel.lab_Title, Const_IDS.IDS_Pet_Rune1) elseif self.slotId == 2 then UIUtils.SetLabelText(self.UITemplateTitlePanel.lab_Title, Const_IDS.IDS_Pet_Rune2) else UIUtils.SetLabelText(self.UITemplateTitlePanel.lab_Title, Const_IDS.IDS_Pet_Rune3) end self:UpdateCurPet() self.toggles:SelectIndex(0) end function UIGodPetRuneBase:UpdateRuneRed() self.toggles:SetRedPoint(0, CTL.Pet.CheckRuneBreak(self.slotId)) local studyRed = CTL.Pet.CheckRuneStudy(self.slotId) self.toggles:SetRedPoint(1, studyRed) self.btn_Study:SetRedPoint(studyRed) local mergeRed = CTL.RedPoint.GetRedPointActive(CTL.RedPoint.RedPointKey.Formation_Pet_Rune_Merge) self.toggles:SetRedPoint(2, mergeRed) self.btn_Fusion:SetRedPoint(mergeRed) end function UIGodPetRuneBase:OnPetInfoUpdate() self:SwitchTabType(self.tabType) end function UIGodPetRuneBase:OnRuneBagUpdate() self:SwitchSubTabType(self.subTabType) end function UIGodPetRuneBase:OnValueChanged(comp, value) if comp == self.toggles then self:SwitchTabType(value) elseif comp == self.subToggles then self:SwitchSubTabType(value) end end function UIGodPetRuneBase:SwitchTabType(type) self.tabType = type if self.subView:IsViewOpened(CONST_SUB_PANEL[type]) then EventSystem.Dispatch(EventID.UI_Pet_RefreshRuneSubView) else self.subView:CloseAll() self.subView:OpenView(GetViewClass(CONST_SUB_PANEL[type]), { slotId = self.slotId, petUniqId = self.curPetUniqueID }) end self:UpdateRightPanel(self.tabType) self:UpdateRuneRed() end function UIGodPetRuneBase:UpdateRightPanel(type) if type == TAB_TYPE_BREAK then UIUtils.SetActive(self.ani_Right, false) else UIUtils.SetActive(self.ani_Right, true) if self.tabType == TAB_TYPE_STUDY then self.state_Btns:SetState(0) self:UpdateRuneMenuType(self.menuType or MENU_TYPE_NORMAL) UIUtils.SetActive(self.btn_Choose, true) else self.state_Btns:SetState(1) self:UpdateRuneMenuType(MENU_TYPE_NORMAL) UIUtils.SetActive(self.btn_Choose, false) end end end function UIGodPetRuneBase:SwitchSubTabType(type) self.subTabType = type table.clear(self.selectCellDict) EventSystem.Dispatch(EventID.UI_Pet_DiscardSelect) self:UpdateRuneBag(self.subTabType) end function UIGodPetRuneBase:UpdateRuneBag(runeType) if self.menuType == MENU_TYPE_NORMAL then UIUtils.SetActive(self.group_None, false) local level = self:GetLevelBySubType(runeType) local itemList = MDL.Pet.GetSortedBagRuneList(level) self.Loop_RuneSkillsStudy:ReloadAll(itemList) else local itemList = MDL.Pet.GetAllRelationRuneSkill() self.Loop_RuneSkillsStudy:ReloadAll(itemList) UIUtils.SetActive(self.group_None, self.Loop_RuneSkillsStudy.Count == 0) end end function UIGodPetRuneBase:GetLevelBySubType(subType) if subType == 0 then return 0 end return (CTL.Pet.MAX_SKILL_LEVEL - subType) + 1 end function UIGodPetRuneBase:OnBackButtonPressed() self:OnButtonClicked(self.UITemplateTitlePanel.btn_close) end function UIGodPetRuneBase:OnButtonClicked(comp) if comp == self.UITemplateTitlePanel.btn_close then self:CloseView(true) elseif comp == self.UITemplateTitlePanel.btn_Info then UIManager.OpenView(Const_UI_Lua.UIEnum.UICommonNoteView, { id = LuaConst.NoteID.PetRune }) elseif comp == self.UITemplateTitlePanel.btn_Home then CTL.HomeMain.CloseViewBackHomeMain() elseif comp == self.btn_Study or comp == self.btn_Fusion then EventSystem.Dispatch(EventID.UI_Pet_RuneOpt, self.selectCellDict) elseif comp == self.btn_RuneIllustrated then UIManager.OpenView(Const_UI_Lua.UIEnum.UIPetRuneIllustratedHandbook) elseif comp == self.btn_CloseMenu then self:CloseMenu() elseif comp == self.btn_Choose then self:OpenMenu() elseif comp == self.btn_Skill then self:SwitchRuneMenuType(MENU_TYPE_NORMAL) elseif comp == self.btn_Fetter then self:SwitchRuneMenuType(MENU_TYPE_RELATION) elseif comp == self.btn_OneClickInsertion then --一键放入 local serverId = next(self.selectCellDict) if serverId then local targetLevel = MDL.Pet.GetRuneCfgByID(serverId).RuneLevel if targetLevel >= CTL.Pet.MAX_SKILL_LEVEL then CTL.Tips.AddTipsMsg(Const_IDS["IDS_Pet_SkillHandIn"]) return end end local curSelectCount = table.getDictCount(self.selectCellDict) local selectLevel = self:GetLevelBySubType(self.subTabType) if selectLevel >= CTL.Pet.MAX_SKILL_LEVEL then CTL.Tips.AddTipsMsg(Const_IDS["IDS_Pet_SkillHandIn"]) return end local mergeList = CTL.Pet.CollectMergeList(self.selectCellDict, selectLevel) local needCount = CONST_MERGE_COUNT - curSelectCount if mergeList == nil or #mergeList < needCount then CTL.Tips.AddTipsMsg(Const_IDS["IDS_Pet_SkillNoMore"]) return end local index = 0 for i = curSelectCount + 1, CONST_MERGE_COUNT do index = index + 1 local item = mergeList[index] self.selectCellDict[item.id] = TEMP_STATE EventSystem.Dispatch(EventID.UI_Pet_RuneOpt_SelectItem, true, item.id) end self.Loop_RuneSkillsStudy:RefreshCells(false) end end function UIGodPetRuneBase:UpdateCurPet() local activeInfo = MDL.Pet.GetActiveInfo(self.curPetUniqueID) UIUtils.SetImageByAssetBundle(self.img_CurPetHead, activeInfo.Config.PetIcon) local heroId = CTL.Pet.GetPetEquipHeroID(self.curPetUniqueID) local heroData = DataSheetManager.HeroNum:GetDataByID(heroId) UIUtils.SetLabelText(self.txt_Name, Const_IDS[heroData.NameIDS]) end function UIGodPetRuneBase:OnCellInit(scrollRect, index, cellTable, data) if self.menuType == MENU_TYPE_NORMAL then local cfg = DataSheetManager.PetRuneSkill:GetDataByPetRuneID(data.cfgId) local selectState = self.selectCellDict[data.id] local isSelect = selectState ~= nil if selectState == TEMP_STATE then self.selectCellDict[data.id] = cellTable end UIUtils.SetActive(cellTable.img_Selected, isSelect) if self.tabType == TAB_TYPE_STUDY then UIUtils.SetActive(cellTable.img_Check, false) else UIUtils.SetActive(cellTable.img_Check, true) UIUtils.SetActive(cellTable.img_CheckIcon, isSelect) end UIUtils.SetLabelText(cellTable.txt_SkillName, Const_IDS[cfg.RuneName]) UIUtils.SetImageByAssetBundle(cellTable.img_Skill, cfg.RuneIcon) if self.subTabType == 0 then UIUtils.SetActive(cellTable.img_LevelBg, true) UIUtils.SetLabelText(cellTable.txt_Level, CTL.Pet.RuneSkillLevelIDS[cfg.RuneLevel]) else UIUtils.SetActive(cellTable.img_LevelBg, false) end cellTable.effect_ItemJiBan:StopUIEffect() else UIUtils.SetActive(cellTable.img_Selected, false) UIUtils.SetActive(cellTable.img_Check, false) UIUtils.SetLabelText(cellTable.txt_SkillName, Const_IDS[data.RuneName]) UIUtils.SetImageByAssetBundle(cellTable.img_Skill, data.RuneIcon) UIUtils.SetActive(cellTable.img_LevelBg, false) cellTable.effect_ItemJiBan:PlayUIEffect() end end function UIGodPetRuneBase:OnCellClicked(scrollRect, index, cellTable, target, data) if self.menuType == MENU_TYPE_NORMAL then local cfg = DataSheetManager.PetRuneSkill:GetDataByPetRuneID(data.cfgId) if self.tabType == TAB_TYPE_STUDY then CTL.Pet.ShowRuneSkillTips(data.cfgId) local serverId, lastSelectCell = next(self.selectCellDict) if lastSelectCell then if serverId == data.id then return end UIUtils.SetActive(lastSelectCell.img_Selected, false) self.selectCellDict[serverId] = nil end self.selectCellDict[data.id] = cellTable UIUtils.SetActive(cellTable.img_Selected, true) else local selectCell = self.selectCellDict[data.id] if selectCell then UIUtils.SetActive(selectCell.img_Selected, false) UIUtils.SetActive(selectCell.img_CheckIcon, false) self.selectCellDict[data.id] = nil EventSystem.Dispatch(EventID.UI_Pet_RuneOpt_SelectItem, false, data.id) else CTL.Pet.ShowRuneSkillTips(data.cfgId) --放置位已满 if table.getDictCount(self.selectCellDict) >= CONST_MERGE_COUNT then CTL.Tips.AddTipsMsg(Const_IDS["IDS_Pet_SkillMax"]) return end --不同等级直接拦住,不允许放置 local selectId = next(self.selectCellDict) if selectId and MDL.Pet.GetRuneCfgByID(selectId).RuneLevel ~= cfg.RuneLevel then CTL.Tips.AddTipsMsg(Const_IDS["IDS_Pet_NewSkillSameLevel"]) return end self.selectCellDict[data.id] = cellTable UIUtils.SetActive(cellTable.img_Selected, true) UIUtils.SetActive(cellTable.img_CheckIcon, true) EventSystem.Dispatch(EventID.UI_Pet_RuneOpt_SelectItem, true, data.id) end end else CTL.Pet.ShowRuneSkillTips(data.RelationSkillID) end end function UIGodPetRuneBase:OnCancelSelectRune(serverId) local selectCell = self.selectCellDict[serverId] if selectCell then if type(selectCell) ~= 'number' then UIUtils.SetActive(selectCell.img_Selected, false) UIUtils.SetActive(selectCell.img_CheckIcon, false) end self.selectCellDict[serverId] = nil end end function UIGodPetRuneBase:SwitchRuneMenuType(type) self:CloseMenu() if self.menuType == type then return end self:UpdateRuneMenuType(type) end function UIGodPetRuneBase:UpdateRuneMenuType(type) self.menuType = type if self.menuType == MENU_TYPE_NORMAL then UIUtils.SetLabelText(self.txt_Choose, Const_IDS.IDS_PetRuneSkill) UIUtils.SetActive(self.group_btn, true) UTL.Toggle.InitToggleGroupByIDS(self.subToggles, "txt_Skill", self.normalMenuToggleIds) self.txt_RelationTip.text = nil self.subToggles:SelectIndex(self.subTabType or 0) else UIUtils.SetLabelText(self.txt_Choose, Const_IDS.IDS_Pet_SkillName3) UIUtils.SetActive(self.group_btn, false) UIUtils.SetLabelText(self.txt_RelationTip, Const_IDS.IDS_Pet_RelationBag) UTL.Toggle.InitToggleGroupByIDS(self.subToggles, "txt_Skill", self.relationMenuToggleIds) self.subToggles:SelectIndex(0) end end function UIGodPetRuneBase:CloseMenu() UIUtils.SetActive(self.group_Choose, false) UIUtils.SetActive(self.btn_CloseMenu, false) UIUtils.SetActive(self.img_ArrowDOWN, true) UIUtils.SetActive(self.img_ArrowUP, false) end function UIGodPetRuneBase:OpenMenu() if self.menuType == MENU_TYPE_NORMAL then self.state_Skill:SetState(1) else self.state_Skill:SetState(0) end UIUtils.SetActive(self.img_ArrowDOWN, false) UIUtils.SetActive(self.img_ArrowUP, true) UIUtils.SetActive(self.group_Choose, true) UIUtils.SetActive(self.btn_CloseMenu, true) end return UIGodPetRuneBase