377 lines
14 KiB
Lua
377 lines
14 KiB
Lua
|
local CSUnityEngineObjectInstantiate = CS.UnityEngine.Object.Instantiate
|
|||
|
local CSXTextManagerGetText = CS.XTextManager.GetText
|
|||
|
local GRID_CONDITION_MAX_COUNT = 3
|
|||
|
local IsNumberValid = XTool.IsNumberValid
|
|||
|
|
|||
|
local XUiMoeWarPrepareConditionGrid = require("XUi/XUiMoeWar/Prepare/XUiMoeWarPrepareConditionGrid")
|
|||
|
|
|||
|
--赛事筹备关卡
|
|||
|
local XUiMoeWarPrepare = XLuaUiManager.Register(XLuaUi, "UiMoeWarPrepare")
|
|||
|
|
|||
|
function XUiMoeWarPrepare:OnAwake()
|
|||
|
self.GridConditions = {}
|
|||
|
self.RewardGrids = {}
|
|||
|
self.ExtraRewardGrids = {}
|
|||
|
self.GridCondition.gameObject:SetActiveEx(false)
|
|||
|
self.RewardGrid.gameObject:SetActiveEx(false)
|
|||
|
self.ExtraRewardGrid.gameObject:SetActiveEx(false)
|
|||
|
self.FillConditionCount = 0 --当前选择的角色符合条件的数量
|
|||
|
self.FillConditionIndexDic = {} --当前选择的角色符合条件的index字典
|
|||
|
self:AutoAddListener()
|
|||
|
XEventManager.AddEventListener(XEventId.EVENT_FIGHT_RESULT_WIN, self.HandlerFightResult, self)
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:OnStart(stageId, currSelectStageIndex)
|
|||
|
self.CurrSelectStageIndex = currSelectStageIndex
|
|||
|
self.AllOpenStageIdList = XDataCenter.MoeWarManager.GetPreparationAllOpenStageIdList()
|
|||
|
self:UpdateStageId(stageId)
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:OnEnable()
|
|||
|
if self.IsFightWinCloseView then
|
|||
|
self:Close()
|
|||
|
return
|
|||
|
end
|
|||
|
self:CheckHelperOverExpiredHint()
|
|||
|
XDataCenter.MoeWarManager.CheckAllOwnHelpersIsResetStatus()
|
|||
|
self:Refresh()
|
|||
|
XDataCenter.MoeWarManager.JudgeGotoMainWhenFightOver()
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:OnDisable()
|
|||
|
self:StopLastTimer()
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:OnDestroy()
|
|||
|
XDataCenter.MoeWarManager.ClearPrepareTeamData()
|
|||
|
XEventManager.RemoveEventListener(XEventId.EVENT_FIGHT_RESULT_WIN, self.Close, self)
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:OnGetEvents()
|
|||
|
return {
|
|||
|
XEventId.EVENT_MOE_WAR_PREPARATION_UPDATE,
|
|||
|
}
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:OnNotify(event, ...)
|
|||
|
if event == XEventId.EVENT_MOE_WAR_PREPARATION_UPDATE then
|
|||
|
self:Close()
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:AutoAddListener()
|
|||
|
self:RegisterClickEvent(self.BtnTanchuangClose, self.Close)
|
|||
|
self:RegisterClickEvent(self.BtnChoubei, self.OnBtnChoubeiClick)
|
|||
|
self:RegisterClickEvent(self.BtnJoin, self.OpenCharacter)
|
|||
|
self:RegisterClickEvent(self.BtnOccupy, self.OpenCharacter)
|
|||
|
self:RegisterClickEvent(self.BtnArrorLeft, self.OnBtnArrorLeftClick)
|
|||
|
self:RegisterClickEvent(self.BtnArrorRight, self.OnBtnArrorRightClick)
|
|||
|
if self.BtnAssist then
|
|||
|
self:RegisterClickEvent(self.BtnAssist, self.OnBtnAssistClick)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:HandlerFightResult()
|
|||
|
self.IsFightWinCloseView = true
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:UpdateStageId(stageId)
|
|||
|
self.StageId = stageId
|
|||
|
self.IsFightWinCloseView = false
|
|||
|
if self.TextTitle then
|
|||
|
self.TextTitle.text = XFubenConfigs.GetStageName(stageId)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:OpenCharacter()
|
|||
|
local robotIdList = XDataCenter.MoeWarManager.GetPreparationOwnHelperRobotIdList()
|
|||
|
if XTool.IsTableEmpty(robotIdList) then
|
|||
|
XUiManager.TipText("MoeWarPrepareNotHelpter")
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local teamCharIdMap = XDataCenter.MoeWarManager.GetPrepareTeamData(self.StageId)
|
|||
|
local charPos = 1
|
|||
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(self.StageId)
|
|||
|
local isHideQuitButton = false
|
|||
|
local characterLimitType = XFubenConfigs.GetStageCharacterLimitType(self.StageId)
|
|||
|
local limitBuffId = XFubenConfigs.GetStageCharacterLimitBuffId(self.StageId)
|
|||
|
XLuaUiManager.Open("UiMoeWarCharacter", teamCharIdMap, charPos, function(resTeam)
|
|||
|
XDataCenter.MoeWarManager.SetPrepareTeamData(resTeam)
|
|||
|
self:Refresh()
|
|||
|
end, stageInfo.Type, isHideQuitButton, characterLimitType, limitBuffId, nil, robotIdList, nil, self.StageId)
|
|||
|
end
|
|||
|
|
|||
|
--进入战斗
|
|||
|
function XUiMoeWarPrepare:OnBtnChoubeiClick()
|
|||
|
if XDataCenter.MoeWarManager.CheckRespondItemIsMax() then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local stage = XDataCenter.FubenManager.GetStageCfg(self.StageId)
|
|||
|
local teamData = XDataCenter.MoeWarManager.GetPrepareTeamData(stage.StageId)
|
|||
|
local charId = teamData[1]
|
|||
|
if not charId or charId <= 0 then
|
|||
|
XUiManager.TipText("MoeWarPrepareFightNotCharcter")
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local curTeam = {
|
|||
|
TeamData = teamData,
|
|||
|
CaptainPos = 1,
|
|||
|
FirstFightPos = 1
|
|||
|
}
|
|||
|
|
|||
|
local labelIds = XMoeWarConfig.GetPreparationStageLabelIds(self.StageId)
|
|||
|
if #labelIds ~= self.FillConditionCount then
|
|||
|
XUiManager.DialogTip(CSXTextManagerGetText("TipTitle"), CSXTextManagerGetText("MoeWarConditionNotAllComplete"), XUiManager.DialogType.Normal, nil, function()
|
|||
|
XDataCenter.FubenManager.EnterMoeWarFight(stage, curTeam)
|
|||
|
end)
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
XDataCenter.FubenManager.EnterMoeWarFight(stage, curTeam)
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:OnBtnArrorLeftClick()
|
|||
|
self:OnBtnArrorClick(self.CurrSelectStageIndex - 1)
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:OnBtnArrorRightClick()
|
|||
|
self:OnBtnArrorClick(self.CurrSelectStageIndex + 1)
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:OnBtnArrorClick(stageIndex)
|
|||
|
if self:CheckStageIndexOutOfRange(stageIndex) then
|
|||
|
return
|
|||
|
end
|
|||
|
self:PlayAnimation("QieHuan")
|
|||
|
self.CurrSelectStageIndex = stageIndex
|
|||
|
self:UpdateStageId(self.AllOpenStageIdList[stageIndex])
|
|||
|
self:Refresh()
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:OnBtnAssistClick()
|
|||
|
XLuaUiManager.Open("UiMoeWarRecruit")
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:CheckStageIndexOutOfRange(stageIndex)
|
|||
|
if stageIndex <= 0 then
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
local maxStageCount = #self.AllOpenStageIdList
|
|||
|
if stageIndex > maxStageCount then
|
|||
|
return true
|
|||
|
end
|
|||
|
|
|||
|
return false
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:Refresh()
|
|||
|
self:CheckClearPrepareTeamData()
|
|||
|
self:RefreshBtnArror()
|
|||
|
self:RefreshHelperId()
|
|||
|
self:RefreshHelperCondition()
|
|||
|
self:RefreshReward()
|
|||
|
self:RefreshOccupy()
|
|||
|
self:CheckLastTimer()
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:RefreshBtnArror()
|
|||
|
local maxStageCount = #self.AllOpenStageIdList
|
|||
|
self.BtnArrorLeft.gameObject:SetActiveEx(self.CurrSelectStageIndex > 1)
|
|||
|
self.BtnArrorRight.gameObject:SetActiveEx(self.CurrSelectStageIndex < maxStageCount)
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:RefreshHelperId()
|
|||
|
local teamData = XDataCenter.MoeWarManager.GetPrepareTeamData(self.StageId)
|
|||
|
local charId = teamData[1]
|
|||
|
self.HelperId = XDataCenter.MoeWarManager.GetPrepareOwnHelperId(charId)
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:RefreshOccupy()
|
|||
|
local teamData = XDataCenter.MoeWarManager.GetPrepareTeamData(self.StageId)
|
|||
|
local charId = XRobotManager.GetCharacterId(teamData[1])
|
|||
|
local isHaveHelper = charId > 0 and true or false
|
|||
|
self.BtnOccupyMember.gameObject:SetActiveEx(not isHaveHelper)
|
|||
|
self.BtnOccupy.gameObject:SetActiveEx(isHaveHelper)
|
|||
|
|
|||
|
if isHaveHelper then
|
|||
|
local icon = XDataCenter.CharacterManager.GetCharHalfBodyBigImage(charId)
|
|||
|
self.RImgRole:SetRawImage(icon)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:CheckClearPrepareTeamData()
|
|||
|
if not IsNumberValid(self.HelperId) then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local expirationTime = XDataCenter.MoeWarManager.GetRecruitHelperExpirationTime(self.HelperId)
|
|||
|
local nowServerTime = XTime.GetServerNowTimestamp()
|
|||
|
if IsNumberValid(expirationTime) and nowServerTime >= expirationTime then
|
|||
|
XDataCenter.MoeWarManager.ClearPrepareTeamData()
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:CheckLastTimer()
|
|||
|
self:StopLastTimer()
|
|||
|
|
|||
|
local expirationTime = XDataCenter.MoeWarManager.GetRecruitHelperExpirationTime(self.HelperId)
|
|||
|
local nowServerTime = XTime.GetServerNowTimestamp()
|
|||
|
if not self.HelperId or self.HelperId == 0 or nowServerTime >= expirationTime then
|
|||
|
self.TextLastTime.text = ""
|
|||
|
self:SetImgLastTimeIsActive(false)
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
self:SetImgLastTimeIsActive(true)
|
|||
|
|
|||
|
local timeLimit = expirationTime - nowServerTime
|
|||
|
local timeLimitStr = XUiHelper.GetTime(timeLimit, XUiHelper.TimeFormatType.CHATEMOJITIMER)
|
|||
|
self.TextLastTime.text = CSXTextManagerGetText("MoeWarHelperTimeLimit", timeLimitStr)
|
|||
|
self.LastTimer = XScheduleManager.ScheduleForever(function()
|
|||
|
nowServerTime = XTime.GetServerNowTimestamp()
|
|||
|
timeLimit = expirationTime - nowServerTime
|
|||
|
if timeLimit <= 0 then
|
|||
|
self:StopLastTimer()
|
|||
|
self:Refresh()
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
timeLimitStr = XUiHelper.GetTime(timeLimit, XUiHelper.TimeFormatType.CHATEMOJITIMER)
|
|||
|
self.TextLastTime.text = CSXTextManagerGetText("MoeWarHelperTimeLimit", timeLimitStr)
|
|||
|
end, XScheduleManager.SECOND)
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:SetImgLastTimeIsActive(isActive)
|
|||
|
if self.ImgLastTime then
|
|||
|
self.ImgLastTime.gameObject:SetActiveEx(isActive)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:StopLastTimer()
|
|||
|
if self.LastTimer then
|
|||
|
XScheduleManager.UnSchedule(self.LastTimer)
|
|||
|
self.LastTimer = nil
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:RefreshExtraReward()
|
|||
|
local rewardIds = XMoeWarConfig.GetPreparationStageShowExtraRewardIds(self.StageId)
|
|||
|
local rewardDic = {}
|
|||
|
local rewards
|
|||
|
for index, rewardId in ipairs(rewardIds) do
|
|||
|
rewards = XRewardManager.GetRewardList(rewardId)
|
|||
|
if not rewardDic[rewardId] then
|
|||
|
rewardDic[rewardId] = XTool.Clone(rewards[1])
|
|||
|
rewardDic[rewardId].Count = 0
|
|||
|
end
|
|||
|
if self.FillConditionIndexDic[index] then
|
|||
|
rewardDic[rewardId].Count = rewardDic[rewardId].Count + rewards[1].Count
|
|||
|
end
|
|||
|
end
|
|||
|
local extraRewardGridCount = 1
|
|||
|
for _, reward in pairs(rewardDic) do
|
|||
|
local grid = self.ExtraRewardGrids[extraRewardGridCount]
|
|||
|
if not grid then
|
|||
|
grid = XUiGridCommon.New(self, self.ExtraRewardGrid)
|
|||
|
grid.Transform:SetParent(self.PaneExtralReward, false)
|
|||
|
self.ExtraRewardGrids[extraRewardGridCount] = grid
|
|||
|
end
|
|||
|
grid:Refresh(reward)
|
|||
|
grid.GameObject:SetActiveEx(true)
|
|||
|
end
|
|||
|
|
|||
|
if not self.HelperId or self.HelperId == 0 then
|
|||
|
self.TxtBonus.gameObject:SetActiveEx(true)
|
|||
|
self.TxtExtraBonus.gameObject:SetActiveEx(false)
|
|||
|
return
|
|||
|
end
|
|||
|
self.TxtBonus.gameObject:SetActiveEx(false)
|
|||
|
self.TxtExtraBonus.gameObject:SetActiveEx(true)
|
|||
|
|
|||
|
self.TxtEvaluation.text = XMoeWarConfig.GetPreparationStageEvaluationEvaluatioLabel(self.FillConditionCount)
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:RefreshReward()
|
|||
|
local rewardId = XMoeWarConfig.GetPreparationStageShowBaseRewardId(self.StageId)
|
|||
|
local rewards = XTool.IsNumberValid(rewardId) and XRewardManager.GetRewardList(rewardId) or {}
|
|||
|
local itemId = XDataCenter.ItemManager.ItemId.MoeWarCommunicateItemId
|
|||
|
local communicateItemCount = 0
|
|||
|
for i, v in ipairs(rewards) do
|
|||
|
local grid = self.RewardGrids[i]
|
|||
|
if not grid then
|
|||
|
local obj = i == 1 and self.RewardGrid or CSUnityEngineObjectInstantiate(self.RewardGrid, self.PanelReward)
|
|||
|
grid = XUiGridCommon.New(self, obj)
|
|||
|
grid.Transform:SetParent(self.PanelReward, false)
|
|||
|
self.RewardGrids[i] = grid
|
|||
|
end
|
|||
|
grid:Refresh(v)
|
|||
|
grid.GameObject:SetActiveEx(true)
|
|||
|
|
|||
|
if v.TemplateId == itemId then
|
|||
|
communicateItemCount = v.Count
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
for i = #rewards + 1, #self.RewardGrids do
|
|||
|
self.RewardGrids[i].GameObject:SetActiveEx(false)
|
|||
|
end
|
|||
|
|
|||
|
local showSpecialRewardId = XMoeWarConfig.GetPreparationStageShowSpecialRewardId(self.StageId)
|
|||
|
local showSpecialRewardIds = showSpecialRewardId > 0 and XRewardManager.GetRewardList(showSpecialRewardId) or {}
|
|||
|
local showSpecialItemId = showSpecialRewardIds[1] and showSpecialRewardIds[1].TemplateId
|
|||
|
local showSpecialItemCount = showSpecialRewardIds[1] and showSpecialRewardIds[1].Count or 0
|
|||
|
if self.TxtRewardName then
|
|||
|
local itemName = showSpecialItemId and XDataCenter.ItemManager.GetItemName(showSpecialItemId)
|
|||
|
self.TxtRewardName.text = itemName and itemName .. ":" or ""
|
|||
|
end
|
|||
|
|
|||
|
local goodsShowParams = showSpecialItemId and XGoodsCommonManager.GetGoodsShowParamsByTemplateId(showSpecialItemId)
|
|||
|
if XTool.IsTableEmpty(goodsShowParams) then
|
|||
|
self.RewardIcon.gameObject:SetActiveEx(false)
|
|||
|
self.TxtRewardNumber.text = ""
|
|||
|
else
|
|||
|
self.RewardIcon:SetRawImage(goodsShowParams.Icon)
|
|||
|
self.RewardIcon.gameObject:SetActiveEx(true)
|
|||
|
self.TxtRewardNumber.text = "+" .. showSpecialItemCount
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:RefreshHelperCondition()
|
|||
|
local labelIds = XMoeWarConfig.GetPreparationStageLabelIds(self.StageId)
|
|||
|
self.FillConditionCount = 0
|
|||
|
self.FillConditionIndexDic = {}
|
|||
|
for i, stageLabelId in ipairs(labelIds) do
|
|||
|
local grid = self.GridConditions[i]
|
|||
|
if not grid then
|
|||
|
local gridCondition = 1 == i and self.GridCondition or CSUnityEngineObjectInstantiate(self.GridCondition, self.PanelConditions)
|
|||
|
grid = XUiMoeWarPrepareConditionGrid.New(gridCondition, i)
|
|||
|
self.GridConditions[i] = grid
|
|||
|
end
|
|||
|
grid:Refresh(self.StageId, stageLabelId, self.HelperId)
|
|||
|
grid:SetActive(true)
|
|||
|
if XMoeWarConfig.IsFillPreparationStageLabel(stageLabelId, self.HelperId) then
|
|||
|
self.FillConditionCount = self.FillConditionCount + 1
|
|||
|
self.FillConditionIndexDic[i] = true
|
|||
|
end
|
|||
|
end
|
|||
|
self:RefreshExtraReward()
|
|||
|
|
|||
|
for i = #labelIds + 1, GRID_CONDITION_MAX_COUNT do
|
|||
|
if self.GridConditions[i] then
|
|||
|
self.GridConditions[i]:SetActive(false)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiMoeWarPrepare:CheckHelperOverExpiredHint()
|
|||
|
local teamData = XDataCenter.MoeWarManager.GetPrepareTeamData(self.StageId)
|
|||
|
local charId = teamData[1]
|
|||
|
local helperId = XDataCenter.MoeWarManager.GetPrepareOwnHelperId(charId)
|
|||
|
if XDataCenter.MoeWarManager.IsHelperExpired(helperId) then
|
|||
|
XUiManager.TipText("MoeWarHelperOverExpired")
|
|||
|
end
|
|||
|
end
|