forked from endernon/PGRData
210 lines
No EOL
8.4 KiB
Lua
210 lines
No EOL
8.4 KiB
Lua
local XUiAwarenessDeploy = XLuaUiManager.Register(XLuaUi, "UiAwarenessDeploy")
|
||
local AutoCheckTeamTrigger = nil
|
||
|
||
local table = table
|
||
local ipairs = ipairs
|
||
|
||
local XUiGridAwarenessDeployTeam = require("XUi/XUiAwareness/Grid/XUiGridAwarenessDeployTeam")
|
||
local XUiPanelAwarenessFormation = require("XUi/XUiAwareness/Grid/XUiPanelAwarenessFormation")
|
||
|
||
function XUiAwarenessDeploy:OnAwake()
|
||
self:InitComponent()
|
||
end
|
||
|
||
function XUiAwarenessDeploy:OnStart(chapterId)
|
||
AutoCheckTeamTrigger = true
|
||
self.ChapterId = chapterId
|
||
self:InitGroupInfo()
|
||
end
|
||
|
||
function XUiAwarenessDeploy:OnEnable()
|
||
if AutoCheckTeamTrigger then
|
||
AutoCheckTeamTrigger = nil
|
||
self:AutoCheckTeamToRefresh()
|
||
end
|
||
self:RefreshTeamGrid()
|
||
|
||
self.TextDesc.text = CS.XTextManager.GetText("AwarenessHintText")
|
||
end
|
||
|
||
function XUiAwarenessDeploy:InitComponent()
|
||
self.FormationPanel = XUiPanelAwarenessFormation.New(self, self.PanelFormation)
|
||
self.FormationPanel:Close()
|
||
self.GridDeployTeam.gameObject:SetActiveEx(false)
|
||
self:RegisterClickEvent(self.BtnBack, self.OnBtnBackClick)
|
||
self:RegisterClickEvent(self.BtnMainUi, self.OnBtnMainUiClick)
|
||
self.BtnAutoTeam.CallBack = function() self:OnBtnAutoTeamClick() end
|
||
self.BtnFight.CallBack = function() self:OnBtnFightClick() end
|
||
self.BtnFormation.CallBack = function() self:OnBtnFormationClick() end
|
||
self.BtnFormation:SetButtonState(XUiButtonState.Disable)
|
||
end
|
||
|
||
function XUiAwarenessDeploy:OnGetEvents()
|
||
return { XEventId.EVENT_FUBEN_ASSIGN_FORMATION_CONFIRM, XEventId.EVENT_ON_ASSIGN_TEAM_CHANGED, XEventId.EVENT_ASSIGN_REFRESH_FORMATION }
|
||
end
|
||
|
||
--事件监听
|
||
function XUiAwarenessDeploy:OnNotify(evt)
|
||
if evt == XEventId.EVENT_FUBEN_ASSIGN_FORMATION_CONFIRM then
|
||
self:OnFormationConfirm()
|
||
elseif evt == XEventId.EVENT_ON_ASSIGN_TEAM_CHANGED then
|
||
self:RefreshTeamGrid()
|
||
elseif evt == XEventId.EVENT_ASSIGN_REFRESH_FORMATION then
|
||
self.FormationPanel:RefreshForAnim()
|
||
end
|
||
end
|
||
|
||
function XUiAwarenessDeploy:InitGroupInfo()
|
||
local data = XDataCenter.FubenAwarenessManager.GetChapterDataById(self.ChapterId)
|
||
self.TeamGridList = {}
|
||
self.ListData = data:GetTeamInfoId()
|
||
self.StageListData = data:GetStageId()
|
||
for _, _ in ipairs(self.ListData) do
|
||
local ui = CS.UnityEngine.Object.Instantiate(self.GridDeployTeam)
|
||
ui.transform:SetParent(self.PanelTeamContent, false)
|
||
ui.gameObject:SetActiveEx(true)
|
||
local grid = XUiGridAwarenessDeployTeam.New(self, ui)
|
||
table.insert(self.TeamGridList, grid)
|
||
end
|
||
end
|
||
|
||
function XUiAwarenessDeploy:AutoCheckTeamToRefresh()
|
||
-- 先检查队伍是否为空
|
||
-- 若为空则往前查找有队伍信息的group
|
||
if not XDataCenter.FubenAwarenessManager.CheckChapterHadRecordTeam(self.ChapterId) then
|
||
-- 且自动填充前清除队伍数据
|
||
for k, teamId in pairs(self.ListData) do
|
||
local teamData = teamId and XDataCenter.FubenAwarenessManager.GetTeamDataById(teamId) or nil
|
||
if teamData then
|
||
teamData:SetMemberList(nil)
|
||
end
|
||
end
|
||
|
||
local targetPreGroupTeamData = nil
|
||
local teamRecords = XDataCenter.FubenAwarenessManager.GetChapterTeamRecords()
|
||
for i = 1, #teamRecords do
|
||
local chapterTeamRecordData = teamRecords[i]
|
||
if not XTool.IsTableEmpty(chapterTeamRecordData) then
|
||
targetPreGroupTeamData = XTool.Clone(chapterTeamRecordData)
|
||
break
|
||
end
|
||
end
|
||
-- 如果找到了,copy到这一group,并同步服务器
|
||
if targetPreGroupTeamData then
|
||
-- copy前要检查队伍兼容性
|
||
-- 如果被copy的队伍比该group需要的队伍多,剔除掉多的
|
||
-- 如果相同位置的队伍 人数也比当前的多, 剔除掉多的
|
||
for i = 1, #targetPreGroupTeamData.TeamInfoList, 1 do
|
||
local teamId = self.ListData[i]
|
||
local teamData = teamId and XDataCenter.FubenAwarenessManager.GetTeamDataById(teamId) or nil
|
||
-- 处理成员
|
||
local teamList = targetPreGroupTeamData.TeamInfoList[i]
|
||
if teamData then
|
||
for index, charId in pairs(teamList) do
|
||
if index > teamData:GetNeedCharacter() then
|
||
-- table.remove(teamList, index)
|
||
teamList[index] = nil
|
||
end
|
||
end
|
||
end
|
||
|
||
-- 处理首发位
|
||
local firstFightPosListNum = targetPreGroupTeamData.FirstFightPosList[i]
|
||
if teamData and firstFightPosListNum > teamData:GetNeedCharacter() then
|
||
targetPreGroupTeamData.FirstFightPosList[i] = 1
|
||
end
|
||
|
||
-- 处理队长位
|
||
local captainPosListNum = targetPreGroupTeamData.CaptainPosList[i]
|
||
if teamData and captainPosListNum > teamData:GetNeedCharacter() then
|
||
targetPreGroupTeamData.CaptainPosList[i] = 1
|
||
end
|
||
|
||
-- 清除多余队伍
|
||
if i > #self.ListData then
|
||
-- table.remove(targetPreGroupTeamData.TeamInfoList, i)
|
||
-- table.remove(targetPreGroupTeamData.FirstFightPosList, i)
|
||
-- table.remove(targetPreGroupTeamData.CaptainPosList, i)
|
||
targetPreGroupTeamData.TeamInfoList[i] = nil
|
||
targetPreGroupTeamData.FirstFightPosList[i] = nil
|
||
targetPreGroupTeamData.CaptainPosList[i] = nil
|
||
end
|
||
|
||
-- 设置修改后的数据
|
||
if teamData then
|
||
teamData:SetMemberList(targetPreGroupTeamData.TeamInfoList[i])
|
||
teamData:SetFirstFightIndex(targetPreGroupTeamData.FirstFightPosList[i])
|
||
teamData:SetLeaderIndex(targetPreGroupTeamData.CaptainPosList[i])
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
end
|
||
|
||
function XUiAwarenessDeploy:RefreshTeamGrid()
|
||
local memberCount = XDataCenter.FubenAwarenessManager.GetChapterMemberCount(self.ChapterId)
|
||
self.BtnFormation.gameObject:SetActiveEx(memberCount > 0)
|
||
self.BtnFormation:SetButtonState(XUiButtonState.Normal)
|
||
|
||
for i, grid in ipairs(self.TeamGridList) do
|
||
if self.ListData[i] then
|
||
grid.GameObject:SetActiveEx(true)
|
||
grid:Refresh(self.ChapterId, i, self.ListData[i])
|
||
else
|
||
grid.GameObject:SetActiveEx(false)
|
||
end
|
||
end
|
||
end
|
||
|
||
function XUiAwarenessDeploy:OnBtnFightClick()
|
||
-- 检查队伍
|
||
local allTeamHasMember, teamCharList, captainPosList, firstFightPosList = XDataCenter.FubenAwarenessManager.TryGetFightTeamCharList(self.ChapterId)
|
||
if not allTeamHasMember then
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("AssignFightNoMember"))
|
||
return
|
||
end
|
||
|
||
-- 设置队伍
|
||
XDataCenter.FubenAwarenessManager.AwarenessSetTeamRequest(self.ChapterId, teamCharList, captainPosList, firstFightPosList, function()
|
||
local targetIndex = 1
|
||
local targetStageId = nil
|
||
local groupData = XDataCenter.FubenAwarenessManager.GetChapterDataById(self.ChapterId)
|
||
local stageIdList = groupData:GetStageId()
|
||
for i = 1, #stageIdList, 1 do
|
||
local stageId = stageIdList[i]
|
||
if not XDataCenter.FubenAwarenessManager.CheckStageFinish(stageId) then
|
||
targetIndex = i
|
||
targetStageId = stageId
|
||
break
|
||
end
|
||
end
|
||
|
||
-- 进入战斗
|
||
local chapterData = XDataCenter.FubenAwarenessManager.GetChapterDataById(self.ChapterId)
|
||
XDataCenter.FubenAwarenessManager.SetEnterLoadingData(targetIndex, teamCharList[targetIndex], groupData, chapterData, true)
|
||
XDataCenter.FubenManager.EnterAwarenessFight(targetStageId, teamCharList[targetIndex], captainPosList[targetStageId], nil, nil, firstFightPosList[targetIndex])
|
||
XDataCenter.FubenAwarenessManager.AwarenessGetDataRequest() -- 同步队伍数据
|
||
end)
|
||
end
|
||
|
||
function XUiAwarenessDeploy:OnBtnFormationClick()
|
||
self.FormationPanel:Show(self.ChapterId)
|
||
end
|
||
|
||
function XUiAwarenessDeploy:OnBtnAutoTeamClick()
|
||
XDataCenter.FubenAwarenessManager.AutoTeam(self.ChapterId)
|
||
self:RefreshTeamGrid()
|
||
end
|
||
|
||
function XUiAwarenessDeploy:OnBtnBackClick()
|
||
self:Close()
|
||
end
|
||
|
||
function XUiAwarenessDeploy:OnBtnMainUiClick()
|
||
XLuaUiManager.RunMain()
|
||
end
|
||
|
||
function XUiAwarenessDeploy:OnFormationConfirm()
|
||
self:RefreshTeamGrid()
|
||
end |