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