PGRData/Resources/Scripts/XUi/XUiRoomTeamPrefab/XUiPanelTeamSelect.lua
2022-12-26 14:06:01 +05:30

180 lines
No EOL
5.5 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.

XUiPanelTeamSelect = XClass(nil, "XUiPanelTeamSelect")
function XUiPanelTeamSelect:Ctor(rootUi, ui)
self.RootUi = rootUi
self.GameObject = ui.gameObject
self.Transform = ui.transform
self:InitAutoScript()
self.CharacterGrids = {}
self:SetCharacterList()
end
-- auto
-- Automatic generation of code, forbid to edit
function XUiPanelTeamSelect:InitAutoScript()
self:AutoInitUi()
self:AutoAddListener()
end
function XUiPanelTeamSelect:AutoInitUi()
self.GridTeamCharacter = self.Transform:Find("CharacterList/Viewport/GridTeamCharacter")
self.PanelCharacterContent = self.Transform:Find("CharacterList/Viewport/PanelCharacterContent")
self.BtnCharDelete = self.Transform:Find("BtnCharDelete"):GetComponent("Button")
self.BtnCharSelect = self.Transform:Find("BtnCharSelect"):GetComponent("Button")
end
function XUiPanelTeamSelect:RegisterClickEvent(uiNode, func)
if func == nil then
XLog.Error("XUiPanelTeamSelect:RegisterClickEvent函数参数错误参数func不能为空")
return
end
if type(func) ~= "function" then
XLog.Error("XUiPanelTeamSelect:RegisterClickEvent函数错误, 参数func需要是function类型, func的类型是" .. type(func))
end
local listener = function(...)
func(self, ...)
end
CsXUiHelper.RegisterClickEvent(uiNode, listener)
end
function XUiPanelTeamSelect:AutoAddListener()
self:RegisterClickEvent(self.BtnCharDelete, self.OnBtnCharDeleteClick)
self:RegisterClickEvent(self.BtnCharSelect, self.OnBtnCharSelectClick)
end
-- auto
function XUiPanelTeamSelect:ShowPanel(curPos, teamData, index, cb)
self.TeamSelectPos = curPos
self.TeamData = teamData
self.IndexTeamPrefab = index
self.Callback = cb
self.CurChangeId = self.TeamData.TeamData[self.TeamSelectPos]
self:UpdateCharaterInTeam()
self:UpdateTeamBtn()
self.GameObject:SetActive(true)
-- 播放界面动画
-- XUiHelper.PlayAnimation(parntUi, "RoomTeamPreTeamSelectIn", nil, nil)
end
function XUiPanelTeamSelect:SetCharacterList()
local baseItem = self.GridTeamCharacter
baseItem.gameObject:SetActive(false)
local charList = XDataCenter.CharacterManager.GetSpecilOwnCharacterList()
local count = #charList
for i = 1, count do
local char = charList[i]
local grid = self.CharacterGrids[char.Id]
if not grid then
local item = CS.UnityEngine.Object.Instantiate(baseItem)
grid = XUiGridCharacter.New(item, self.RootUi, char, function(character)
self:UpdateInfo(character)
end)
grid.GameObject.name = char.Id
grid.Transform:SetParent(self.PanelCharacterContent, false)
self.CharacterGrids[char.Id] = grid
else
grid:UpdateGrid(char)
grid.GameObject.name = char.Id
end
grid:SetSelect(false)
grid.GameObject:SetActive(true)
grid.Transform:SetAsLastSibling()
end
end
function XUiPanelTeamSelect:UpdateInfo(character)
if character then
self.CurCharacter = character
end
if self.CurCharacterGrid then
self.CurCharacterGrid:SetSelect(false)
end
self.CurCharacterGrid = self.CharacterGrids[self.CurCharacter.Id]
self.CurCharacterGrid:UpdateGrid()
self.CurCharacterGrid:SetSelect(true)
self:UpdateTeamBtn()
end
function XUiPanelTeamSelect:UpdateTeamBtn()
if not self.CurCharacter then
self.BtnCharDelete.gameObject:SetActive(false)
self.BtnCharSelect.gameObject:SetActive(false)
return
end
local isInTeam = self.CurChangeId == self.CurCharacter.Id
self.BtnCharDelete.gameObject:SetActive(isInTeam)
self.BtnCharSelect.gameObject:SetActive(not isInTeam)
end
function XUiPanelTeamSelect:UpdateCharaterInTeam()
for _, item in pairs(self.CharacterGrids) do
local isInTeam = false
for _, v in pairs(self.TeamData.TeamData) do
if item.Character.Id == v then
isInTeam = true
break
end
end
item:SetInTeam(isInTeam)
end
end
function XUiPanelTeamSelect:HidePanel(cb)
-- 播放界面动画
-- local onFinish = function()
-- self.GameObject:SetActive(false)
-- if cb then cb() end
-- end
-- XUiHelper.PlayAnimation(parntUi, "RoomTeamPreTeamSelectOut", nil, onFinish)
self.GameObject:SetActive(false)
if cb then cb() end
end
function XUiPanelTeamSelect:OnBtnCharSelectClick()
-- 判断编队中是否有此角色
local teamMap = self.TeamData.TeamData
local isHave = false
local exchagePos = 0
for k, v in pairs(teamMap) do
if self.CurCharacter.Id == v then
isHave = true
exchagePos = k
break
end
end
-- 设置角色对换
if isHave then
self.TeamData.TeamData[exchagePos] = self.TeamData.TeamData[self.TeamSelectPos]
end
self:OnService(false, exchagePos)
end
function XUiPanelTeamSelect:OnBtnCharDeleteClick()
self:OnService(true, 0)
end
function XUiPanelTeamSelect:OnService(isDelete, exchagePos)
self.TeamData.TeamData[self.TeamSelectPos] = isDelete and 0 or self.CurCharacter.Id
self.CurChangeId = self.TeamData.TeamData[self.TeamSelectPos]
XDataCenter.TeamManager.SetPlayerTeam(self.TeamData, true, function()
self:UpdateCharaterInTeam()
self:UpdateTeamBtn()
if self.Callback then
self.Callback(self.TeamSelectPos, self.TeamData, isDelete, self.IndexTeamPrefab, exchagePos)
end
end)
end