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

224 lines
8.1 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.

-- 2.6版本重构uicharacter界面
---@field _Control XCharacterControl
local XUiCharacterV2P6 = XLuaUiManager.Register(XLuaUi, "UiCharacterV2P6")
local PanelCharacterOwnedInfoV2P6 = require("XUi/XUiCharacterV2P6/PanelChildUi/XPanelCharacterOwnedInfoV2P6")
local PanelCharacterUnOwnedInfoV2P6 = require("XUi/XUiCharacterV2P6/PanelChildUi/XPanelCharacterUnOwnedInfoV2P6")
function XUiCharacterV2P6:OnAwake()
---@type XCharacterAgency
local ag = XMVCA:GetAgency(ModuleId.XCharacter)
self.CharacterAgency = ag
ag = XMVCA:GetAgency(ModuleId.XCommonCharacterFilt)
---@type XCommonCharacterFiltAgency
self.FiltAgecy = ag
self.NewCharRecord = {}
self.PanelProxyDatas =
{
PanelCharacterOwnedInfoV2P6 = {Proxy = PanelCharacterOwnedInfoV2P6, Ui = "PanelOwned"},
PanelCharacterUnOwnedInfoV2P6 = {Proxy = PanelCharacterUnOwnedInfoV2P6, Ui = "PanelUnOwned"},
}
self:InitButton()
self:InitFilter()
XEventManager.AddEventListener(XEventId.EVENT_CHARACTER_SYN, self.RefresFilter, self)
XEventManager.AddEventListener(XEventId.EVENT_CHARACTER_FIRST_GET, self.RefresFilter, self)
XEventManager.AddEventListener(XEventId.EVENT_EQUIP_CHARACTER_EQUIP_CHANGE, self.RefreshRightInfo, self) -- 穿、卸装备意识
end
function XUiCharacterV2P6:InitButton()
self:BindHelpBtn(self.BtnHelp, "Character")
XUiHelper.RegisterClickEvent(self, self.BtnTeaching, self.OnBtnTeachingClick)
XUiHelper.RegisterClickEvent(self, self.BtnFashion, self.OnBtnFashionClick)
XUiHelper.RegisterClickEvent(self, self.BtnOwnedDetail, self.OnBtnOwnedDetailClick)
end
function XUiCharacterV2P6:InitFilter()
self.PanelFilter = self.FiltAgecy:InitFilter(self.PanelCharacterFilter, self)
local onSeleCb = function (character, index, grid, isFirstSelect)
if not character then
return
end
-- 记录角色新标签,默认选的也要消
if self.CharacterAgency:IsOwnCharacter(character.Id) and character.NewFlag then
self.NewCharRecord[character.Id] = true
end
self:OnSelectCharacter(character)
end
local refreshFun = function (index, grid, char)
grid:SetData(char)
grid:UpdateRedPoint()
grid:UpdateNew()
end
self.PanelFilter:InitData(onSeleCb, nil, nil, refreshFun)
-- 接入折叠功能
local foldCb = function (isInitFoldState)
if isInitFoldState then
self:PlayAnimation("AnimFold")
else
self:PlayAnimation("AnimFold1F")
end
self.ParentUi:SetCamera(XEnumConst.CHARACTER.CameraV2P6.CharLeftMove)
end
local unFoldCb = function (isInitFoldState)
if isInitFoldState then
self:PlayAnimation("AnimUnFold")
else
self:PlayAnimation("AnimUnFold1F")
end
self.ParentUi:SetCamera(XEnumConst.CHARACTER.CameraV2P6.Main)
end
self.PanelFilter:SetFoldCallback(foldCb, unFoldCb)
-- 先选中第一个
local list = self.CharacterAgency:GetCharacterList()
local sortTagList = self.CharacterAgency:GetModelCharacterFilterController()[self.Name].SortTagList
list = self.FiltAgecy:DoSortFilterV2P6(list, sortTagList)
local index = 1
local targetChar = list[index]
local initCharId = self.ParentUi.InitCharId
if initCharId then
targetChar = self.CharacterAgency:GetCharacter(initCharId)
if not targetChar then
targetChar = XCharacterConfigs.GetCharacterTemplate(initCharId)
end
end
-- 提前选中时也要检测独域过滤
if self.PanelFilter.HideIsomerTag and self.CharacterAgency:GetIsIsomer(targetChar.Id) then
for k, char in ipairs(list) do
if not self.CharacterAgency:GetIsIsomer(char.Id) then
targetChar = char
break
end
end
end
self:OnSelectCharacter(targetChar)
self.NextNotRefreshCharInfoTrigger = true -- 提前刷新了 所以第一次onenable不刷新信息了
self.FiltAgecy:SetNotSortTrigger()
self.PanelFilter:ImportList(list)
end
function XUiCharacterV2P6:RefresFilter()
-- 刷新时要重新获取源数据因为角色data可能从碎片变成xCharacter。要重新获取
local list = self.CharacterAgency:GetCharacterList()
self.PanelFilter:ImportList(list)
end
function XUiCharacterV2P6:OnEnable()
self.ParentUi:SetCamera(XEnumConst.CHARACTER.CameraV2P6.Main)
-- 重复刷新资源栏、因为进化界面会更改资源栏
self.ParentUi:SetPanelAsset(XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin)
self.PanelFilter:InitFoldState()
-- 同步其他子界面切换的角色
local syncChar = self.ParentUi.CurCharacter
local initCharId = self.ParentUi.InitCharId
-- 只有第二次进入enbale才需要同步标签和角色刷新角色信息。 因为第一次在init时刷新了
if self.IsEnableFin then
self.PanelFilter:DoSelectTag("BtnAll", true, syncChar and syncChar.Id)
self:OnSelectCharacter(self.ParentUi.CurCharacter)
end
if initCharId and not self.ParentUi.IsUiInit then
self.PanelFilter:DoSelectCharacter(initCharId)
end
self.IsEnableFin = true
end
function XUiCharacterV2P6:OnDisable()
end
function XUiCharacterV2P6:OnDestroy()
local allRecordClickedNewCharList = {}
for charId, v in pairs(self.NewCharRecord) do
table.insert(allRecordClickedNewCharList, charId)
end
if not XTool.IsTableEmpty(allRecordClickedNewCharList) then
self._Control:CharacterResetNewFlagRequest(allRecordClickedNewCharList)
end
XEventManager.RemoveEventListener(XEventId.EVENT_CHARACTER_SYN, self.RefresFilter, self)
XEventManager.RemoveEventListener(XEventId.EVENT_CHARACTER_FIRST_GET, self.RefresFilter, self)
XEventManager.RemoveEventListener(XEventId.EVENT_EQUIP_CHARACTER_EQUIP_CHANGE, self.RefreshRightInfo, self)
end
-- 只有角色Id进行切换时该方法才会被调用
function XUiCharacterV2P6:OnSelectCharacter(character)
if self.NextNotRefreshCharInfoTrigger then
self.NextNotRefreshCharInfoTrigger = false
return
end
if not character then
return
end
self.CurCharacter = character
self.ParentUi:SetCurCharacter(character)
local cb = function(model)
self.PanelDrag.Target = model.transform
end
self.ParentUi:RefreshRoleModel(cb)
self:RefreshRightInfo()
-- 刷新涂装等蓝点
local isRed = XDataCenter.FashionManager.GetCurrCharHaveCanUnlockFashion(character.Id)
self.BtnFashion:ShowReddot(isRed)
end
function XUiCharacterV2P6:CheckPanelExsit(panelName)
if not self[panelName] then
return false
end
return true
end
function XUiCharacterV2P6:GetCharPanel(panelName)
if not self[panelName] then
local data = self.PanelProxyDatas[panelName]
local proxy = data.Proxy
self[panelName] = proxy.New(self[data.Ui], self)
end
return self[panelName]
end
-- 角色切换、onenbale刷新都会调用
function XUiCharacterV2P6:RefreshRightInfo()
if self.CharacterAgency:CheckIsFragment(self.CurCharacter.Id) then
self:GetCharPanel("PanelCharacterUnOwnedInfoV2P6"):RefreshUiShow()
self:GetCharPanel("PanelCharacterUnOwnedInfoV2P6"):Open()
if self:CheckPanelExsit("PanelCharacterOwnedInfoV2P6") then
self:GetCharPanel("PanelCharacterOwnedInfoV2P6"):Close()
end
else
self:GetCharPanel("PanelCharacterOwnedInfoV2P6"):RefreshUiShow()
self:GetCharPanel("PanelCharacterOwnedInfoV2P6"):Open()
if self:CheckPanelExsit("PanelCharacterUnOwnedInfoV2P6") then
self:GetCharPanel("PanelCharacterUnOwnedInfoV2P6"):Close()
end
end
end
function XUiCharacterV2P6:OnBtnTeachingClick()
XDataCenter.PracticeManager.OpenUiFubenPractice(self.CurCharacter.Id)
end
function XUiCharacterV2P6:OnBtnFashionClick()
XLuaUiManager.Open("UiFashion", self.CurCharacter.Id)
end
function XUiCharacterV2P6:OnBtnOwnedDetailClick()
XLuaUiManager.Open("UiCharacterDetail", self.CurCharacter.Id)
end
return XUiCharacterV2P6