PGRData/Script/matrix/xui/xuicharacterv2p6/XUiCharacterPropertyV2P6.lua

243 lines
9 KiB
Lua
Raw Normal View History

2024-09-01 20:49:41 +00:00
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