PGRData/Script/matrix/xui/xuicharacterv2p6/XUiCharacterPropertyV2P6.lua
2024-09-01 22:49:41 +02:00

242 lines
9 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local XUiCharacterPropertyV2P6 = XLuaUiManager.Register(XLuaUi, "UiCharacterPropertyV2P6")
function XUiCharacterPropertyV2P6:OnAwake()
---@type XCharacterAgency
local ag = XMVCA:GetAgency(ModuleId.XCharacter)
self.CharacterAgency = ag
ag = XMVCA:GetAgency(ModuleId.XCommonCharacterFilt)
---@type XCommonCharacterFiltAgency
self.FiltAgecy = ag
self:InitPanelInfo()
self:InitButton()
self:InitFilter()
end
function XUiCharacterPropertyV2P6:InitPanelInfo()
-- 顺序要合Ui上的按钮顺序一致s
self.PanelProxyDatas =
{
{Name = "XPanelCharacterLevelV2P6", ParentTrans = "PanelCharLevel", AssetPath = CS.XGame.ClientConfig:GetString("PanelCharLevelV2P6")},
{Name = "XPanelCharacterGradeV2P6", ParentTrans = "PanelCharGrade", AssetPath = CS.XGame.ClientConfig:GetString("PanelCharGradeV2P6"),
CheckOpenFun = function ()
return XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.CharacterGrade)
end
},
{Name = "XPanelCharacterSkillV2P6", ParentTrans = "PanelCharSkill", AssetPath = CS.XGame.ClientConfig:GetString("PanelCharSkillV2P6"),
CheckOpenFun = function ()
return XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.CharacterSkill)
end
},
}
-- require("XUi/XUiCharacterV2P6/Grid/XPanelCharacterLevelV2P6")
-- require("XUi/XUiCharacterV2P6/Grid/XPanelCharacterGradeV2P6")
-- require("XUi/XUiCharacterV2P6/Grid/XPanelCharacterSkillV2P6")
-- for k, panelInfo in pairs(self.PanelProxyDatas) do
-- local proxy = require("XUi/XUiCharacterV2P6/PanelChildUi/"..panelInfo.Name)
-- local path = panelInfo.AssetPath
-- local ui = self[panelInfo.ParentTrans]:LoadPrefab(path)
-- ui.gameObject:SetActiveEx(false)
-- self[panelInfo.Name] = proxy.New(ui, self)
-- end
end
function XUiCharacterPropertyV2P6:InitFilter()
self.PanelFilter = self.FiltAgecy:InitFilter(self.PanelCharacterFilter, self)
self.PanelCharacterFilter.gameObject:SetActiveEx(false)
local onSeleCb = function (character, index, grid, isFirstSelect)
if not character then
return
end
self:OnSelectCharacter(character)
end
local onTagClickCb = function (targetBtn)
self.ParentUi.FilterCurSelectTagBtnName = targetBtn.gameObject.name
end
self.PanelFilter:InitData(onSeleCb, onTagClickCb)
local list = self.CharacterAgency:GetOwnCharacterList()
self.DataSource = list
self.PanelFilter:ImportList(list)
end
function XUiCharacterPropertyV2P6:InitButton()
local btns = {self.BtnTabLevel, self.BtnTabGrade, self.BtnTabSkill}
self.PanelPropertyButtons:Init(btns, function(index)
self:OnSelectTab(index)
end)
XUiHelper.RegisterClickEvent(self, self.BtnExchange, self.OnBtnExchangeClick)
XUiHelper.RegisterClickEvent(self, self.BtnCloseFilter, self.HideFilter)
XUiHelper.RegisterClickEvent(self, self.BtnBack, self.Close)
XUiHelper.RegisterClickEvent(self, self.BtnMainUi, function() XLuaUiManager.RunMain() end)
end
function XUiCharacterPropertyV2P6:OnStart(openIndex)
self.OpenIndex = openIndex
end
function XUiCharacterPropertyV2P6:OnEnable()
local initCharId = self.ParentUi.InitCharId
local skipArgs = self.ParentUi.SkipArgs
if initCharId and skipArgs and not self.ParentUi.IsUiInit then -- 跳转进入属性培养界面 同步更改父界面模型
local char = self.CharacterAgency:GetCharacter(initCharId)
self.ParentUi:SetCurCharacter(char)
self.ParentUi:RefreshRoleModel()
end
if self.ParentUi.CurCharacter then
-- self.PanelFilter:DoSelectCharacter(self.ParentUi.CurCharacter.Id)
else
-- 如果父界面没有角色 说明是跳转进来的 选中第一个就好
self.ParentUi:SetCurCharacter(self.DataSource[1])
self.ParentUi:RefreshRoleModel()
end
self.PanelPropertyButtons:SelectIndex(self.OpenIndex or self.CurSelectIndex or 1)
self.OpenIndex = nil -- 用完就丢弃
self:RefreshCurShowUi()
self.ParentUi:SetCamera(XEnumConst.CHARACTER.CameraV2P6.Train)
--顺便附加拖拽模型
self.PanelDrag.Target = self.ParentUi.RoleModelPanel:GetTransform()
end
function XUiCharacterPropertyV2P6:OnDisable()
XDataCenter.FavorabilityManager.StopCv()
end
-- 刷新当前展示的内容
function XUiCharacterPropertyV2P6:RefreshCurShowUi()
self:RefreshCurPanel()
self:RefreshTabBtns()
end
function XUiCharacterPropertyV2P6:RefreshCurPanel()
local panelInfo = self.PanelProxyDatas[self.CurSelectIndex]
if not panelInfo then
return
end
self:GetPanel(self.CurSelectIndex):RefreshUiShow()
end
function XUiCharacterPropertyV2P6:RefreshTabBtns()
local charId = self.ParentUi.CurCharacter.Id
local character = self.ParentUi.CurCharacter
-- 最大等级
local isMaxLevel = self.CharacterAgency:IsMaxLevel(charId)
self.BtnTabLevel:ShowTag(isMaxLevel)
local isMaxGrade = self.CharacterAgency:IsMaxCharGrade(character)
self.BtnTabGrade:ShowTag(isMaxGrade)
local isCharAllSkillMax = self.CharacterAgency:CheckCharacterAllSkillMax(charId)
self.BtnTabSkill:ShowTag(isCharAllSkillMax)
-- 判断是否解锁
-- 不要直接调用SetDisable接口 会覆盖buttonGroup的选中状态即使setDisable为false
if not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.CharacterGrade, nil, true) then
self.BtnTabGrade:SetDisable(true)
else -- 后面这段逻辑是预计会出现在当前界面刷新的时候button的状态由disable转为normal
if self.BtnTabGrade.ButtonState == CS.UiButtonState.Disable then
self.BtnTabGrade.ButtonState = CS.UiButtonState.Normal
end
end
if not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.CharacterSkill, nil, true)then
self.BtnTabSkill:SetDisable(true)
else
if self.BtnTabSkill.ButtonState == CS.UiButtonState.Disable then
self.BtnTabSkill.ButtonState = CS.UiButtonState.Normal
end
end
-- 红点
self.BtnTabLevel:ShowReddot(XRedPointManager.CheckConditions({XRedPointConditions.Types.CONDITION_CHARACTER_LEVEL}, charId))
self.BtnTabGrade:ShowReddot(XRedPointManager.CheckConditions({XRedPointConditions.Types.CONDITION_CHARACTER_GRADE}, charId))
self.BtnTabSkill:ShowReddot(XRedPointManager.CheckConditions({XRedPointConditions.Types.CONDITION_CHARACTER_SKILL}, charId))
end
function XUiCharacterPropertyV2P6:OnSelectCharacter(character)
if self.ParentUi.CurCharacter == character then
return
end
self.ParentUi:SetCurCharacter(character)
local cb = function (model)
self.PanelDrag.Target = model.transform
end
self.ParentUi:RefreshRoleModel(cb)
self:RefreshCurShowUi()
self:HideFilter()
end
function XUiCharacterPropertyV2P6:CheckPanelExsit(index)
local panelInfo = self.PanelProxyDatas[index]
if not self[panelInfo.Name] then
return false
end
return true
end
function XUiCharacterPropertyV2P6:GetPanel(index)
local panelInfo = self.PanelProxyDatas[index]
if not self[panelInfo.Name] then
local proxy = require("XUi/XUiCharacterV2P6/PanelChildUi/"..panelInfo.Name)
local path = panelInfo.AssetPath
local ui = self[panelInfo.ParentTrans]:LoadPrefab(path)
ui.gameObject:SetActiveEx(false)
self[panelInfo.Name] = proxy.New(ui, self)
end
return self[panelInfo.Name]
end
function XUiCharacterPropertyV2P6:OnSelectTab(index)
local checkOpenFun = self.PanelProxyDatas[index].CheckOpenFun
if checkOpenFun and not checkOpenFun() then
return
end
for k, panelInfo in pairs(self.PanelProxyDatas) do
if k == index then
self:GetPanel(k):Open()
else -- 减少耗时 如果面板还没生成 不需要调用关闭接口
if self:CheckPanelExsit(k) then
self:GetPanel(k):Close()
end
end
end
self.ParentUi:SetCamera(XEnumConst.CHARACTER.CameraV2P6.Train)
self.ParentUi:SetBackTrigger(nil)
self.CurSelectIndex = index
self:RefreshCurShowUi()
end
function XUiCharacterPropertyV2P6:HideFilter()
self.PanelCharacterFilter.gameObject:SetActiveEx(false)
self.PanelPropertyButtons.gameObject:SetActiveEx(true)
end
function XUiCharacterPropertyV2P6:OnBtnExchangeClick()
self:ShowOrHideFilter()
end
function XUiCharacterPropertyV2P6:ShowOrHideFilter()
local activeSelf = nil
activeSelf = self.PanelCharacterFilter.gameObject.activeSelf
self.PanelCharacterFilter.gameObject:SetActiveEx(not activeSelf)
-- 打开的时候刷新
if not activeSelf then
self.PanelFilter:DoSelectTag("BtnAll")
local charId = self.ParentUi.CurCharacter.Id
self.PanelFilter:DoSelectCharacter(charId)
end
activeSelf = self.PanelPropertyButtons.gameObject.activeSelf
self.PanelPropertyButtons.gameObject:SetActiveEx(not activeSelf)
end
return XUiCharacterPropertyV2P6