forked from endernon/PGRData
355 lines
12 KiB
Lua
355 lines
12 KiB
Lua
|
local XUiPanelRoleModel = require("XUi/XUiCharacter/XUiPanelRoleModel")
|
||
|
local XUiGuildWarCharacterSelectSelf = require("XUi/XUiGuildWar/Assistant/XUiGuildWarCharacterSelectSelf")
|
||
|
local XUiGuildWarCharacterSelectAssistant = require("XUi/XUiGuildWar/Assistant/XUiGuildWarCharacterSelectAssistant")
|
||
|
local XUiGuildWarCharacterFilter = require("XUi/XUiGuildWar/Assistant/Filter/XUiGuildWarCharacterFilter")
|
||
|
|
||
|
local TabBtnIndex = {
|
||
|
Normal = 1,
|
||
|
Isomer = 2,
|
||
|
Assistant = 3
|
||
|
}
|
||
|
|
||
|
local FilterKey = {
|
||
|
GuildWarSelfNormal = "GuildWarSelfNormal",
|
||
|
GuildWarSelfIsomer = "GuildWarSelfIsomer",
|
||
|
GuildWarOthers = "GuildWarAssistant"
|
||
|
}
|
||
|
|
||
|
---@class XUiGuildWarCharacterSelect:XLuaUi@refer to XUiStrongholdRoomCharacter
|
||
|
local XUiGuildWarCharacterSelect = XLuaUiManager.Register(XLuaUi, "UiGuildWarCharacterSelect")
|
||
|
|
||
|
function XUiGuildWarCharacterSelect:Ctor()
|
||
|
self._CurrentCharacterId = false
|
||
|
self._TabIndex = TabBtnIndex.Normal
|
||
|
self._Team = false
|
||
|
self._Pos = false
|
||
|
self._isDefaultSelect = true
|
||
|
end
|
||
|
|
||
|
function XUiGuildWarCharacterSelect:OnStart(team, pos)
|
||
|
self._Team = team or XDataCenter.GuildWarManager.GetBattleManager():GetTeam()
|
||
|
self._Pos = pos or 1
|
||
|
self:Init()
|
||
|
self:InitSceneRoot()
|
||
|
XDataCenter.GuildWarManager.RequestAssistCharacterList()
|
||
|
self:UpdateDataSource()
|
||
|
end
|
||
|
|
||
|
function XUiGuildWarCharacterSelect:Init()
|
||
|
-- model
|
||
|
local panelModel = self.UiModelGo.transform:FindTransform("PanelRoleModel")
|
||
|
self.UiPanelRoleModel = XUiPanelRoleModel.New(panelModel, self.Name, nil, true)
|
||
|
|
||
|
-- main and back
|
||
|
self:BindExitBtns(self.BtnBack, self.BtnMainUi)
|
||
|
|
||
|
-- PanelAsset
|
||
|
local ItemId = XDataCenter.ItemManager.ItemId
|
||
|
XUiPanelAsset.New(self, self.PanelAsset,
|
||
|
ItemId.FreeGem,
|
||
|
ItemId.ActionPoint,
|
||
|
ItemId.Coin)
|
||
|
|
||
|
-- 独域机体
|
||
|
if self:IsIsomerLock() then
|
||
|
self.BtnTabShougezhe:SetDisable(true)
|
||
|
end
|
||
|
|
||
|
-- 角色类型按钮组
|
||
|
self.PanelCharacterTypeBtns:Init(
|
||
|
{
|
||
|
[TabBtnIndex.Normal] = self.BtnTabGouzaoti,
|
||
|
[TabBtnIndex.Isomer] = self.BtnTabShougezhe,
|
||
|
[TabBtnIndex.Assistant] = self.BtnTabHelp,
|
||
|
},
|
||
|
function(tabIndex)
|
||
|
self:OnBtnGroupCharacterTypeClicked(tabIndex)
|
||
|
end
|
||
|
)
|
||
|
|
||
|
local closeUiFunc = handler(self, self.Close)
|
||
|
local playAnimationCb = function(animName)
|
||
|
self:PlayAnimationWithMask(animName)
|
||
|
end
|
||
|
|
||
|
local path = CS.XGame.ClientConfig:GetString("UiPanelCommonCharacterFilterV2P6")
|
||
|
local parentTransform = self.PanelCharacterFilter.transform
|
||
|
local filterUi = parentTransform:LoadPrefab(path)
|
||
|
|
||
|
---@type XUiGuildWarCharacterFilter
|
||
|
self._Filter = XUiGuildWarCharacterFilter.New(filterUi, self)
|
||
|
|
||
|
-- assistant characters
|
||
|
---@type XUiGuildWarCharacterSelectAssistant
|
||
|
self.OthersPanel = XUiGuildWarCharacterSelectAssistant.New(self.PanelOthers, handler(self, self.OnSelectCharacterData), closeUiFunc, playAnimationCb,
|
||
|
self._Team, self._Pos, self, self._Filter
|
||
|
)
|
||
|
-- my characters
|
||
|
---@type XUiGuildWarCharacterSelectSelf
|
||
|
self.SelfPanel = XUiGuildWarCharacterSelectSelf.New(self.PanelSelf, handler(self, self.OnSelectCharacter), closeUiFunc, playAnimationCb,
|
||
|
self._Team, self._Pos)
|
||
|
|
||
|
self:InitFilter()
|
||
|
|
||
|
-- button click
|
||
|
self:RegisterClickEvent(self.BtnTeaching, self.OnBtnTeachingClick)
|
||
|
self.BtnTeaching:ShowReddot(false)
|
||
|
|
||
|
-- filter
|
||
|
self.BtnFilter.gameObject:SetActiveEx(true)
|
||
|
self:RegisterClickEvent(self.BtnFilter, self.OnBtnFilterClick)
|
||
|
end
|
||
|
|
||
|
function XUiGuildWarCharacterSelect:OnEnable()
|
||
|
if self._TabIndex == TabBtnIndex.Normal then
|
||
|
self.SelfPanel:UpdateCharacter()
|
||
|
end
|
||
|
XEventManager.AddEventListener(XEventId.EVENT_GUILDWAR_ASSISTANT_UPDATE_CHARACTER_LIST, self.UpdateAssistantCharacterList, self)
|
||
|
end
|
||
|
|
||
|
function XUiGuildWarCharacterSelect:OnDisable()
|
||
|
XEventManager.RemoveEventListener(XEventId.EVENT_GUILDWAR_ASSISTANT_UPDATE_CHARACTER_LIST, self.UpdateAssistantCharacterList, self)
|
||
|
self.OthersPanel:OnDisable()
|
||
|
end
|
||
|
|
||
|
function XUiGuildWarCharacterSelect:InitFilter()
|
||
|
local XUiGuildWarCharacterSelectAssistantGrid = require("XUi/XUiGuildWar/Assistant/XUiGuildWarCharacterSelectAssistantGrid")
|
||
|
local XUiGuildWarCharacterSelectSelfGrid = require("XUi/XUiGuildWar/Assistant/XUiGuildWarCharacterSelectSelfGrid")
|
||
|
self._Filter:InitDynamicTable(XUiGuildWarCharacterSelectSelfGrid, XUiGuildWarCharacterSelectAssistantGrid, self.SelfPanel.SViewCharacterList, self.OthersPanel.SViewCharacterList)
|
||
|
self:ImportAssistantCharacterList()
|
||
|
|
||
|
self._Filter:InitData(function(t)
|
||
|
if self._Filter:IsTagSupport() then
|
||
|
self:OnSelectCharacterData(t)
|
||
|
self.OthersPanel:UpdateCharacterData(t)
|
||
|
else
|
||
|
---@type XCharacter
|
||
|
local character = t
|
||
|
self:OnSelectCharacter(character:GetId(), XPlayer.Id)
|
||
|
self.SelfPanel:UpdateCharacterData(character)
|
||
|
end
|
||
|
|
||
|
end, function(targetBtn)
|
||
|
self._Filter:ChangeDynamicTable()
|
||
|
if self._Filter:IsTagSupport() then
|
||
|
self.OthersPanel:Show()
|
||
|
self.SelfPanel:Hide()
|
||
|
local list = self:ImportAssistantCharacterList()
|
||
|
|
||
|
local isValid = #list > 0
|
||
|
self.OthersPanel:UpdateEmpty(isValid)
|
||
|
self.BtnTeaching.gameObject:SetActiveEx(isValid)
|
||
|
else
|
||
|
if XTool.IsTableEmpty(self._Filter:GetCurShowList()) then
|
||
|
self.BtnTeaching.gameObject:SetActiveEx(false)
|
||
|
self.SelfPanel:Hide()
|
||
|
else
|
||
|
self.BtnTeaching.gameObject:SetActiveEx(true)
|
||
|
self.SelfPanel:Show()
|
||
|
end
|
||
|
self.OthersPanel:Hide()
|
||
|
end
|
||
|
|
||
|
end, nil, function(index, grid, char)
|
||
|
if self._Filter:IsTagSupport() then
|
||
|
---@type XUiGuildWarCharacterSelectAssistantGrid
|
||
|
local g = grid
|
||
|
g:Refresh(char)
|
||
|
else
|
||
|
---@type XUiGuildWarCharacterSelectSelfGrid
|
||
|
local g = grid
|
||
|
---@type XCharacter
|
||
|
local character = char
|
||
|
local characterId = character:GetId()
|
||
|
g:Refresh(characterId)
|
||
|
g:SetInTeam(self._Team:GetEntityIdIsInTeam(characterId, XPlayer.Id))
|
||
|
end
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
function XUiGuildWarCharacterSelect:UpdateDataSource()
|
||
|
local list = XMVCA.XCharacter:GetCharacterList()
|
||
|
self._Filter:ImportList(list)
|
||
|
end
|
||
|
|
||
|
function XUiGuildWarCharacterSelect:IsIsomerLock()
|
||
|
return not XFunctionManager.JudgeOpen(XFunctionManager.FunctionName.Isomer)
|
||
|
end
|
||
|
|
||
|
function XUiGuildWarCharacterSelect:OnBtnGroupCharacterTypeClicked(tabIndex)
|
||
|
-- 检查功能是否开启
|
||
|
if tabIndex == TabBtnIndex.Isomer and
|
||
|
not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.Isomer)
|
||
|
then
|
||
|
return
|
||
|
end
|
||
|
self._TabIndex = tabIndex
|
||
|
if self._isDefaultSelect then
|
||
|
self._isDefaultSelect = false
|
||
|
local member = self._Team:GetMember(self._Pos)
|
||
|
self:UpdateDataSource(member and member:GetEntityId())
|
||
|
return
|
||
|
end
|
||
|
self:UpdateDataSource()
|
||
|
end
|
||
|
|
||
|
function XUiGuildWarCharacterSelect:OnSelectCharacter(characterId, playerId)
|
||
|
self._CurrentCharacterId = characterId
|
||
|
if not characterId then
|
||
|
self.RoleModelPanel:HideRoleModel()
|
||
|
self.BtnTeaching.gameObject:SetActiveEx(false)
|
||
|
return
|
||
|
end
|
||
|
self.BtnTeaching.gameObject:SetActiveEx(true)
|
||
|
self.RoleModelPanel:ShowRoleModel()
|
||
|
self.PlayerId = playerId
|
||
|
self:UpdateRoleModel()
|
||
|
end
|
||
|
|
||
|
function XUiGuildWarCharacterSelect:OnSelectCharacterData(data)
|
||
|
if not data then
|
||
|
self.RoleModelPanel:HideRoleModel()
|
||
|
self.BtnTeaching.gameObject:SetActiveEx(false)
|
||
|
return
|
||
|
end
|
||
|
self.BtnTeaching.gameObject:SetActiveEx(true)
|
||
|
self.RoleModelPanel:ShowRoleModel()
|
||
|
local characterId = data.FightNpcData.Character.Id
|
||
|
self._CurrentCharacterId = characterId
|
||
|
self.PlayerId = data.PlayerId
|
||
|
self:UpdateRoleModel()
|
||
|
end
|
||
|
|
||
|
function XUiGuildWarCharacterSelect:UpdateRoleModel()
|
||
|
local playerId = self.PlayerId
|
||
|
|
||
|
local characterId = self._CurrentCharacterId
|
||
|
|
||
|
if not XTool.IsNumberValid(characterId) then
|
||
|
self.RoleModelPanel.GameObject:SetActiveEx(false)
|
||
|
return
|
||
|
end
|
||
|
self.RoleModelPanel.GameObject:SetActiveEx(true)
|
||
|
|
||
|
local targetPanelRole = self.PanelRoleModel
|
||
|
local targetUiName = self.Name
|
||
|
local cb = function(model)
|
||
|
if not model then
|
||
|
return
|
||
|
end
|
||
|
self.PanelDrag.Target = model.transform
|
||
|
if self.SelectTabIndex == TabBtnIndex.Normal then
|
||
|
self.ImgEffectHuanren.gameObject:SetActiveEx(true)
|
||
|
elseif self.SelectTabIndex == TabBtnIndex.Isomer then
|
||
|
self.ImgEffectHuanren1.gameObject:SetActiveEx(true)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local fashionId = nil
|
||
|
local growUpLevel = nil
|
||
|
if XTool.IsNumberValid(playerId) and playerId ~= XPlayer.Id then
|
||
|
--别人的角色信息
|
||
|
fashionId = XDataCenter.GuildWarManager.GetAssistantCharacterFashion(characterId, playerId)
|
||
|
growUpLevel = XDataCenter.GuildWarManager.GetAssistantCharacterLiberateLv(characterId, playerId)
|
||
|
end
|
||
|
|
||
|
self.ImgEffectHuanren.gameObject:SetActiveEx(false)
|
||
|
self.ImgEffectHuanren1.gameObject:SetActiveEx(false)
|
||
|
self.RoleModelPanel:UpdateCharacterModel(
|
||
|
characterId,
|
||
|
targetPanelRole,
|
||
|
targetUiName,
|
||
|
cb,
|
||
|
nil,
|
||
|
fashionId,
|
||
|
growUpLevel
|
||
|
)
|
||
|
end
|
||
|
|
||
|
function XUiGuildWarCharacterSelect:InitSceneRoot()
|
||
|
local root = self.UiModelGo.transform
|
||
|
|
||
|
-- if self.PanelRoleModel then
|
||
|
-- self.PanelRoleModel:DestroyChildren()
|
||
|
-- end
|
||
|
self.PanelRoleModel = root:FindTransform("PanelRoleModel")
|
||
|
self.ImgEffectHuanren = root:FindTransform("ImgEffectHuanren")
|
||
|
self.ImgEffectHuanren1 = root:FindTransform("ImgEffectHuanren1")
|
||
|
self.ImgEffectLogoGouzao = root:FindTransform("ImgEffectLogoGouzao")
|
||
|
self.ImgEffectLogoGanran = root:FindTransform("ImgEffectLogoGanran")
|
||
|
self.CameraFar = {
|
||
|
root:FindTransform("UiCamFarLv"),
|
||
|
root:FindTransform("UiCamFarGrade"),
|
||
|
root:FindTransform("UiCamFarQuality"),
|
||
|
root:FindTransform("UiCamFarSkill"),
|
||
|
root:FindTransform("UiCamFarrExchange"),
|
||
|
root:FindTransform("UiCamFarEnhanceSkill"),
|
||
|
}
|
||
|
self.CameraNear = {
|
||
|
root:FindTransform("UiCamNearLv"),
|
||
|
root:FindTransform("UiCamNearGrade"),
|
||
|
root:FindTransform("UiCamNearQuality"),
|
||
|
root:FindTransform("UiCamNearSkill"),
|
||
|
root:FindTransform("UiCamNearrExchange"),
|
||
|
root:FindTransform("UiCamNearEnhanceSkill"),
|
||
|
}
|
||
|
self.RoleModelPanel = XUiPanelRoleModel.New(self.PanelRoleModel, self.Name, nil, true, nil, true)
|
||
|
end
|
||
|
|
||
|
function XUiGuildWarCharacterSelect:Close(updated, memberData)
|
||
|
if updated then
|
||
|
self:EmitSignal("UpdateEntityId", memberData)
|
||
|
end
|
||
|
XUiGuildWarCharacterSelect.Super.Close(self)
|
||
|
end
|
||
|
|
||
|
function XUiGuildWarCharacterSelect:UpdateAssistantCharacterList()
|
||
|
self:ImportAssistantCharacterList()
|
||
|
self._Filter:RefreshList()
|
||
|
end
|
||
|
|
||
|
function XUiGuildWarCharacterSelect:ImportAssistantCharacterList()
|
||
|
local list = self.OthersPanel:GetEntities()
|
||
|
self._Filter:ImportSupportList(list)
|
||
|
return list
|
||
|
end
|
||
|
|
||
|
function XUiGuildWarCharacterSelect:OnBtnTeachingClick()
|
||
|
XDataCenter.PracticeManager.OpenUiFubenPractice(self._CurrentCharacterId)
|
||
|
end
|
||
|
|
||
|
function XUiGuildWarCharacterSelect:GetFilterKey()
|
||
|
if self._TabIndex == TabBtnIndex.Normal then
|
||
|
return FilterKey.GuildWarSelfNormal
|
||
|
end
|
||
|
if self._TabIndex == TabBtnIndex.Isomer then
|
||
|
return FilterKey.GuildWarSelfIsomer
|
||
|
end
|
||
|
if self._TabIndex == TabBtnIndex.Assistant then
|
||
|
return FilterKey.GuildWarOthers
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiGuildWarCharacterSelect:OnBtnFilterClick()
|
||
|
local panel
|
||
|
if self._TabIndex == TabBtnIndex.Normal then
|
||
|
panel = self.SelfPanel
|
||
|
end
|
||
|
if self._TabIndex == TabBtnIndex.Isomer then
|
||
|
panel = self.SelfPanel
|
||
|
end
|
||
|
if self._TabIndex == TabBtnIndex.Assistant then
|
||
|
panel = self.OthersPanel
|
||
|
end
|
||
|
XLuaUiManager.Open("UiCommonCharacterFilterTipsOptimization", panel:GetEntities(true), self:GetFilterKey(), function()
|
||
|
self:UpdateDataSource()
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
function XUiGuildWarCharacterSelect:OnDestroy()
|
||
|
XUiGuildWarCharacterSelect.Super.OnDestroy(self)
|
||
|
XDataCenter.CommonCharacterFiltManager.ClearCacheData()
|
||
|
end
|
||
|
|
||
|
return XUiGuildWarCharacterSelect
|