PGRData/Script/matrix/xui/xuimission/XUiMissionTeamSelect.lua

172 lines
5.3 KiB
Lua
Raw Normal View History

local XUiMissionTeamSelect = XLuaUiManager.Register(XLuaUi, "UiMissionTeamSelect")
function XUiMissionTeamSelect:OnAwake()
self:InitAutoScript()
end
function XUiMissionTeamSelect:OnStart(characterIds, memberCount, index, callback)
self.Index = index
self:Init(characterIds)
self.MemberLimit = memberCount
self.CallBack = callback
self.CurSelectGrid = nil
self:SetupCharacterList()
self:PlayAnimation("AniMissionTeamSelectBegin")
end
function XUiMissionTeamSelect:Init(characterIds)
--self.SelectCount = #characterIds
self.CharacterIds = {}
for i,v in pairs(characterIds) do
self.CharacterIds[i] = v
end
self.SelectedIdMap = {}
for i, v in pairs(characterIds) do
if self.Index ~= i then
self.SelectedIdMap[v] = i
end
end
self.DynamicTable = XDynamicTableNormal.New(self.PanelScrollView)
self.DynamicTable:SetProxy(XUiGridMisssionTeam)
self.DynamicTable:SetDelegate(self)
end
-- 角色信息面板 begin --
function XUiMissionTeamSelect:SetupCharacterList()
local charlist = XDataCenter.TaskForceManager.GetOwnCharacterList()
if not charlist then
XLog.Error("XUiMissionTeamSelect:SetupCharacterList error: character list is nil")
return
end
self.CharList = {}
for _, v in ipairs(charlist) do
if self.CharacterIds and self.CharacterIds[self.Index] and self.CharacterIds[self.Index] == v.Id then
table.insert(self.CharList, 1, v)
else
table.insert(self.CharList, v)
end
end
self.DynamicTable:SetDataSource(self.CharList)
self.DynamicTable:ReloadDataASync()
end
--动态列表事件
function XUiMissionTeamSelect:OnDynamicTableEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
grid:Init(self)
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
local data = self.CharList[index]
grid:Reset()
grid:UpdateGrid(data)
if self.CharacterIds[self.Index] and self.CharacterIds[self.Index] == data.Id then
self.CurSelectGrid = grid
grid:SetSelect(true)
else
grid:SetSelect(false)
end
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
local charData = self.CharList[index]
if charData.IsWorking and charData.IsWorking > 0 then
return
end
if self.CharacterIds[self.Index] and self.CharacterIds[self.Index] == charData.Id then
self.CurSelectGrid:SetSelect(false)
self.CharacterIds[self.Index] = nil
return
end
if self.CurSelectGrid then
self.CurSelectGrid:SetSelect(false)
end
self.CharacterIds[self.Index] = charData.Id
self.CurSelectGrid = grid
self.CurSelectGrid:SetSelect(true)
end
end
-- auto
-- Automatic generation of code, forbid to edit
function XUiMissionTeamSelect:InitAutoScript()
self:AutoInitUi()
self.SpecialSoundMap = {}
self:AutoAddListener()
end
function XUiMissionTeamSelect:AutoInitUi()
-- self.BtnBg = self.Transform:Find("FullScreenBackground/BtnBg"):GetComponent("Button")
-- self.PanelMissionTeamSelect = self.Transform:Find("SafeAreaContentPane/PanelMissionTeamSelect")
-- self.PanelScrollView = self.Transform:Find("SafeAreaContentPane/PanelMissionTeamSelect/PanelScrollView")
-- self.GridMisssionTeam = self.Transform:Find("SafeAreaContentPane/PanelMissionTeamSelect/PanelScrollView/Viewport/GridMisssionTeam")
-- self.BtnSure = self.Transform:Find("SafeAreaContentPane/PanelMissionTeamSelect/BtnSure"):GetComponent("Button")
end
function XUiMissionTeamSelect:GetAutoKey(uiNode, eventName)
if not uiNode then return end
return eventName .. uiNode:GetHashCode()
end
function XUiMissionTeamSelect:RegisterListener(uiNode, eventName, func)
local key = self:GetAutoKey(uiNode, eventName)
if not key then return end
local listener = self.AutoCreateListeners[key]
if listener ~= nil then
uiNode[eventName]:RemoveListener(listener)
end
if func ~= nil then
if type(func) ~= "function" then
XLog.Error("XUiMissionTeamSelect:RegisterListener函数错误, 参数func需要是function类型, func的类型是" .. type(func))
end
listener = function(...)
XSoundManager.PlayBtnMusic(self.SpecialSoundMap[key], eventName)
func(self, ...)
end
uiNode[eventName]:AddListener(listener)
self.AutoCreateListeners[key] = listener
end
end
function XUiMissionTeamSelect:AutoAddListener()
self.AutoCreateListeners = {}
self:RegisterClickEvent(self.BtnBg, self.OnBtnBgClick)
self:RegisterClickEvent(self.BtnSure, self.OnBtnSureClick)
end
-- auto
function XUiMissionTeamSelect:OnBtnBgClick()
self:PlayAnimation("AniMissionTeamSelectEnd", function()
self:Close()
end)
end
function XUiMissionTeamSelect:OnBtnSureClick()
local id = self.CharacterIds[self.Index]
if id then
local index = self.SelectedIdMap[id]
if index ~= nil then
self.CharacterIds[index] = nil
end
end
self:PlayAnimation("AniMissionTeamSelectEnd", function()
if self.CallBack then
self.CallBack(self.CharacterIds)
end
self:Close()
end)
end