local PANEL_INDEX = { Level = 1, Grade = 2, Quality = 3, Skill = 4, } local XUiPanelCharProperty = XLuaUiManager.Register(XLuaUi, "UiPanelCharProperty") function XUiPanelCharProperty:OnAwake() self:AddListener() end function XUiPanelCharProperty:OnStart(parent, defaultIdx) self.Parent = parent self.DefaultIdx = defaultIdx self:InitChildUiInfos() self:InitBtnTabGroup() self:RegisterOtherEvent() self:RegisterRedPointEvent() end function XUiPanelCharProperty:OnEnable(parent, defaultIdx) self.CharacterId = self.Parent.CharacterId self.Parent.PanelCharacterTypeBtns.gameObject:SetActiveEx(false) self.Parent.SViewCharacterList.gameObject:SetActiveEx(false) self.Parent.BtnFashion.gameObject:SetActiveEx(false) self.Parent.BtnOwnedDetail.gameObject:SetActiveEx(false) self.PanelPropertyButtons:SelectIndex(self.DefaultIdx or self.SelectedIndex or PANEL_INDEX.Level) end function XUiPanelCharProperty:OnDisable() self.Parent.PanelCharacterTypeBtns.gameObject:SetActiveEx(true) self.Parent.SViewCharacterList.gameObject:SetActiveEx(true) self.Parent.BtnFashion.gameObject:SetActiveEx(true) self.Parent.BtnOwnedDetail.gameObject:SetActiveEx(true) end function XUiPanelCharProperty:OnDestroy() self:RemoveOtherEvent() end function XUiPanelCharProperty:InitChildUiInfos() self.PanelsMap = {} self.ChildUiInitInfos = { [PANEL_INDEX.Level] = { ChildClass = XUiPanelCharLevel, UiParent = self.PanelCharLevel, AssetPath = XUiConfigs.GetComponentUrl(self.Name .. PANEL_INDEX.Level), }, [PANEL_INDEX.Skill] = { ChildClass = XUiPanelCharSkill, UiParent = self.PanelCharSkill, AssetPath = XUiConfigs.GetComponentUrl(self.Name .. PANEL_INDEX.Skill), }, [PANEL_INDEX.Quality] = { ChildClass = XUiPanelCharQuality, UiParent = self.PanelCharQuality, AssetPath = XUiConfigs.GetComponentUrl(self.Name .. PANEL_INDEX.Quality), }, [PANEL_INDEX.Grade] = { ChildClass = XUiPanelCharGrade, UiParent = self.PanelCharGrade, AssetPath = XUiConfigs.GetComponentUrl(self.Name .. PANEL_INDEX.Grade), }, } end function XUiPanelCharProperty:InitBtnTabGroup() self.BtnTabGrade.gameObject:SetActiveEx(not XFunctionManager.CheckFunctionFitter(XFunctionManager.FunctionName.CharacterGrade)) self.BtnTabQuality.gameObject:SetActiveEx(not XFunctionManager.CheckFunctionFitter(XFunctionManager.FunctionName.CharacterQuality)) self.BtnTabSkill.gameObject:SetActiveEx(not XFunctionManager.CheckFunctionFitter(XFunctionManager.FunctionName.CharacterSkill)) self.BtnTabLevel.gameObject:SetActiveEx(not XFunctionManager.CheckFunctionFitter(XFunctionManager.FunctionName.CharacterLevelUp)) self.BtnTabGrade:SetDisable(not XFunctionManager.JudgeOpen(XFunctionManager.FunctionName.CharacterGrade)) self.BtnTabQuality:SetDisable(not XFunctionManager.JudgeOpen(XFunctionManager.FunctionName.CharacterQuality)) self.BtnTabSkill:SetDisable(not XFunctionManager.JudgeOpen(XFunctionManager.FunctionName.CharacterSkill)) local tabGroup = { [PANEL_INDEX.Level] = self.BtnTabLevel, [PANEL_INDEX.Grade] = self.BtnTabGrade, [PANEL_INDEX.Quality] = self.BtnTabQuality, [PANEL_INDEX.Skill] = self.BtnTabSkill, } self.PanelPropertyButtons:Init(tabGroup, function(tabIndex) self:OnClickTabCallBack(tabIndex) end) end function XUiPanelCharProperty:OnClickTabCallBack(tabIndex) if tabIndex == PANEL_INDEX.Level then self.Parent:PlayAnimation("LevelBegan") self.PreCameraType = XCharacterConfigs.XUiCharacter_Camera.LEVEL elseif tabIndex == PANEL_INDEX.Grade then if not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.CharacterGrade) then return end self.Parent:PlayAnimation("AniPanelGradesBegin") self.PreCameraType = XCharacterConfigs.XUiCharacter_Camera.GRADE elseif tabIndex == PANEL_INDEX.Quality then if not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.CharacterQuality) then return end self.Parent:PlayAnimation("AniPanelQualityBegin") self.PreCameraType = XCharacterConfigs.XUiCharacter_Camera.QULITY elseif tabIndex == PANEL_INDEX.Skill then if not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.CharacterSkill) then return end self.PreCameraType = XCharacterConfigs.XUiCharacter_Camera.SKILL self.Parent:PlayAnimation("SkillBegan") end self.SelectedIndex = tabIndex self:UpdateShowPanel() end function XUiPanelCharProperty:UpdateShowPanel() self.Parent:UpdateCamera(self.PreCameraType) local index = self.SelectedIndex for k, panel in pairs(self.PanelsMap) do if k ~= index then panel:HidePanel() end end local panel = self.PanelsMap[index] if not panel then local childUiInfo = self.ChildUiInitInfos[index] local ui = childUiInfo.UiParent:LoadPrefab(childUiInfo.AssetPath) panel = childUiInfo.ChildClass.New(ui, self) self.PanelsMap[index] = panel end panel:ShowPanel(self.CharacterId) self:OnCheckRedPoint() end function XUiPanelCharProperty:OnCheckRedPoint() local characterId = self.CharacterId XRedPointManager.CheckByNode(self.BtnTabGrade, characterId) XRedPointManager.CheckByNode(self.BtnTabQuality, characterId) XRedPointManager.CheckByNode(self.BtnTabSkill, characterId) XRedPointManager.CheckByNode(self.BtnTabLevel, characterId) end function XUiPanelCharProperty:RegisterOtherEvent() XEventManager.AddEventListener(XEventId.EVENT_ITEM_BUYASSET, self.UpdateCondition, self) XEventManager.AddEventListener(XEventId.EVENT_CHARACTER_INCREASE_TIP, self.ShowTip, self) end function XUiPanelCharProperty:RegisterRedPointEvent() local characterId = self.CharacterId XRedPointManager.AddRedPointEvent(self.BtnTabGrade, self.OnCheckCharacterGradeRedPoint, self, { XRedPointConditions.Types.CONDITION_CHARACTER_GRADE }, characterId) XRedPointManager.AddRedPointEvent(self.BtnTabQuality, self.OnCheckCharacterQualityRedPoint, self, { XRedPointConditions.Types.CONDITION_CHARACTER_QUALITY }, characterId) XRedPointManager.AddRedPointEvent(self.BtnTabSkill, self.OnCheckCharacterSkillRedPoint, self, { XRedPointConditions.Types.CONDITION_CHARACTER_SKILL }, characterId) XRedPointManager.AddRedPointEvent(self.BtnTabLevel, self.OnCheckCharacterLevelRedPoint, self, { XRedPointConditions.Types.CONDITION_CHARACTER_LEVEL, XRedPointConditions.Types.CONDITION_EXHIBITION_NEW}, characterId) end function XUiPanelCharProperty:RemoveOtherEvent() XEventManager.RemoveEventListener(XEventId.EVENT_ITEM_BUYASSET, self.UpdateCondition, self) XEventManager.RemoveEventListener(XEventId.EVENT_CHARACTER_INCREASE_TIP, self.ShowTip, self) end function XUiPanelCharProperty:UpdateCondition() local gradePanel = self.PanelsMap[PANEL_INDEX.Grade] local character = XDataCenter.CharacterManager.GetCharacter(self.CharacterId) local isMaxGrade = XDataCenter.CharacterManager.IsMaxCharGrade(character) if gradePanel and not isMaxGrade then gradePanel:UpdateUseItemView() end end function XUiPanelCharProperty:OnCheckCharacterGradeRedPoint(count) self.BtnTabGrade:ShowReddot(count >= 0) end function XUiPanelCharProperty:OnCheckCharacterQualityRedPoint(count) self.BtnTabQuality:ShowReddot(count >= 0) end function XUiPanelCharProperty:OnCheckCharacterSkillRedPoint(count) self.BtnTabSkill:ShowReddot(count >= 0) end function XUiPanelCharProperty:OnCheckCharacterLevelRedPoint(count) self.BtnTabLevel:ShowReddot(count >= 0) end function XUiPanelCharProperty:AddListener() self:RegisterClickEvent(self.BtnExchange, self.OnBtnExchangeClick) end function XUiPanelCharProperty:OnBtnExchangeClick() self.Parent:OpenChangeCharacterView() end function XUiPanelCharProperty:RecoveryPanel() local levelPanel = self.PanelsMap[PANEL_INDEX.Level] if levelPanel and levelPanel.SelectLevelItems.IsShow then levelPanel.SelectLevelItems:HidePanel() levelPanel:ShowPanel() self.Parent:PlayAnimation("LevelBegan") return true end local skillPanel = self.PanelsMap[PANEL_INDEX.Skill] if skillPanel and skillPanel.SkillInfoPanel.IsShow then skillPanel.SkillInfoPanel:HidePanel() skillPanel:ShowPanel() self.Parent:PlayAnimation("SkillBegan") return true end return false end function XUiPanelCharProperty:ShowTip(stringDescribe, attrib, oldLevel) local character = XDataCenter.CharacterManager.GetCharacter(self.CharacterId) if oldLevel and oldLevel < character.Level then CS.XAudioManager.PlaySound(XSoundManager.UiBasicsMusic.UiCharacter_LevelUp) return end stringDescribe = stringDescribe or "" attrib = attrib or "" XLuaUiManager.Open("UiLeftPopupTip", stringDescribe, attrib) end