PGRData/Script/matrix/xui/xuifubenchallengemap/XUiFubenChallengeMap.lua

377 lines
15 KiB
Lua
Raw Normal View History

local XUiFubenChallengeMap = XLuaUiManager.Register(XLuaUi, "UiFubenChallengeMap")
local MAX_PLAYER_GRID_COUNT = 4
local LOCAL_CHALLENGE_TIMER_NAME = "XUiFubenChallengeMapTitleTimer"
function XUiFubenChallengeMap:OnAwake()
self:InitAutoScript()
end
function XUiFubenChallengeMap:OnStart(challenge, timeOutCb)
self.TimeOutCb = timeOutCb
self:InitWithCfg(challenge)
XEventManager.AddEventListener(XEventId.EVENT_FUBEN_DAILY_REFRESH, self.RefreshReward, self)
XEventManager.AddEventListener(XEventId.EVENT_ROOM_CANCEL_MATCH, self.RefreshMatching, self)
end
function XUiFubenChallengeMap:OnDestroy()
XCountDown.RemoveTimer(LOCAL_CHALLENGE_TIMER_NAME)
XEventManager.RemoveEventListener(XEventId.EVENT_FUBEN_DAILY_REFRESH, self.RefreshReward, self)
XEventManager.RemoveEventListener(XEventId.EVENT_ROOM_CANCEL_MATCH, self.RefreshMatching, self)
end
-- auto
-- Automatic generation of code, forbid to edit
function XUiFubenChallengeMap:InitAutoScript()
self:AutoInitUi()
self.SpecialSoundMap = {}
self:AutoAddListener()
end
function XUiFubenChallengeMap:AutoInitUi()
self.PanelContent = self.Transform:Find("FullScreenBackground/PanelContent")
self.PanelBottom = self.Transform:Find("SafeAreaContentPane/LayerWrap/PanelBottom")
self.BtnReward = self.Transform:Find("SafeAreaContentPane/LayerWrap/PanelBottom/GameObject/BtnReward"):GetComponent("Button")
self.ImgSlide = self.Transform:Find("SafeAreaContentPane/LayerWrap/PanelBottom/GameObject/ImgSlide"):GetComponent("Image")
self.TxtProgress = self.Transform:Find("SafeAreaContentPane/LayerWrap/PanelBottom/GameObject/TxtProgress"):GetComponent("Text")
self.Panelreceived = self.Transform:Find("SafeAreaContentPane/LayerWrap/PanelBottom/GameObject/Panelreceived")
self.PanelEffect = self.Transform:Find("SafeAreaContentPane/LayerWrap/PanelBottom/GameObject/PanelEffect")
self.BtnBack = self.Transform:Find("SafeAreaContentPane/LayerWrap/Top/BtnBack"):GetComponent("Button")
self.PanelAsset = self.Transform:Find("SafeAreaContentPane/LayerWrap/PanelAsset")
self.PanelTip = self.Transform:Find("SafeAreaContentPane/LayerWrap/PanelTip")
self.BtnCancelMatch = self.Transform:Find("SafeAreaContentPane/LayerWrap/PanelTip/BtnCancelMatch"):GetComponent("Button")
self.TxtPipei = self.Transform:Find("SafeAreaContentPane/LayerWrap/PanelTip/TxtPipei"):GetComponent("Text")
self.PanelEvent = self.Transform:Find("SafeAreaContentPane/LayerWrap/PanelEvent")
self.TxtEventDesc = self.Transform:Find("SafeAreaContentPane/LayerWrap/PanelEvent/head/TxtEventDesc"):GetComponent("Text")
self.PanelTitle = self.Transform:Find("SafeAreaContentPane/LayerWrap/PanelTitle")
self.BtnActDesc = self.Transform:Find("SafeAreaContentPane/LayerWrap/PanelTitle/BtnActDesc"):GetComponent("Button")
self.TxtShuaxin = self.Transform:Find("SafeAreaContentPane/LayerWrap/PanelTitle/TxtShuaxin"):GetComponent("Text")
self.TxtCurTime = self.Transform:Find("SafeAreaContentPane/LayerWrap/PanelTitle/TxtCurTime"):GetComponent("Text")
self.TxtBt = self.Transform:Find("SafeAreaContentPane/LayerWrap/PanelTitle/TxtBt"):GetComponent("Text")
self.BtnMainUi = self.Transform:Find("SafeAreaContentPane/LayerWrap/Top/BtnMainUi"):GetComponent("Button")
end
function XUiFubenChallengeMap:GetAutoKey(uiNode, eventName)
if not uiNode then
return
end
return eventName .. uiNode:GetHashCode()
end
function XUiFubenChallengeMap: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("XUiFubenChallengeMap: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 XUiFubenChallengeMap:AutoAddListener()
self.AutoCreateListeners = {}
self:RegisterClickEvent(self.BtnReward, self.OnBtnRewardClick)
self:RegisterClickEvent(self.BtnBack, self.OnBtnBackClick)
self:RegisterClickEvent(self.BtnCancelMatch, self.OnBtnCancelMatchClick)
self:RegisterClickEvent(self.BtnActDesc, self.OnBtnActDescClick)
self:RegisterClickEvent(self.BtnMainUi, self.OnBtnMainUiClick)
end
-- auto
function XUiFubenChallengeMap:OnBtnRewardClick()
if not self.SectionCfg then
return
end
if self.isGetChallengeReward then
XUiManager.TipText("ChallengeRewardIsGetted")
else
if self.curFightNum >= self.SectionCfg.RewardNeedFinishCount then
XDataCenter.FubenDailyManager.ReceiveDailyReward(function(reward)
self.isGetChallengeReward = true
XUiManager.OpenUiObtain(reward, CS.XTextManager.GetText("Award"))
self:RefreshReward()
end, self.SectionCfg.Id)
else
local data = XRewardManager.GetRewardList(self.SectionCfg.RewardId)
XUiManager.OpenUiTipReward(data)
end
end
end
function XUiFubenChallengeMap:OnBtnActDescClick()
--详细介绍
XUiManager.UiFubenDialogTip("", self.ChallengeCfg.DetailDesc or "")
end
function XUiFubenChallengeMap:OnBtnCancelMatchClick()
XDataCenter.RoomManager.CancelMatch()
end
function XUiFubenChallengeMap:RefreshPlayerState()
if XDataCenter.RoomManager.UiRoom then
-- self.PanelPlayerState.gameObject:SetActive(true)
local roomData = XDataCenter.RoomManager.RoomData
local idx = 1
if roomData.PlayerDataList then
for i = 0, roomData.PlayerDataList.Count - 1 do
if roomData.PlayerDataList[i].Id ~= XPlayer.Id then
local grid = self.PlayerStateGridList[idx]
grid:SetActive(true)
grid:RefreshUI(roomData.PlayerDataList[i])
idx = idx + 1
end
end
end
for index = idx, MAX_PLAYER_GRID_COUNT do
local grid = self.PlayerStateGridList[index]
grid:SetActive(false)
end
--else
-- self.PanelPlayerState.gameObject:SetActive(false)
end
end
function XUiFubenChallengeMap:RefreshUI()
self:RefreshReward()
self:RefreshMatching()
self:RefreshShow()
end
function XUiFubenChallengeMap:RefreshShow()
self.PanelTitle.gameObject:SetActive(self.ChallengeCfg.Type ~= XDataCenter.FubenManager.ChapterType.Urgent)
self:RefreshPlayerState()
end
function XUiFubenChallengeMap:OnBtnBackClick()
local title = CS.XTextManager.GetText("TipTitle")
local cancelMatchMsg = CS.XTextManager.GetText("OnlineInstanceQuitRoom")
if XDataCenter.RoomManager.UiRoom then
CS.XUiManager.ViewManager:ShowNext()
else
if XDataCenter.RoomManager.Matching then
XUiManager.DialogTip(title, cancelMatchMsg, XUiManager.DialogType.Normal, nil, function()
XDataCenter.RoomManager.CancelMatch(function()
self:Close()
end)
end)
else
self:Close()
end
end
end
function XUiFubenChallengeMap:OnBtnMainUiClick()
local title = CS.XTextManager.GetText("TipTitle")
local quitRoomMsg = CS.XTextManager.GetText("OnlineInstanceQuitRoom")
local cancelMatchMsg = CS.XTextManager.GetText("OnlineInstanceCancelMatch")
if XDataCenter.RoomManager.UiRoom then
XUiManager.DialogTip(title, quitRoomMsg, XUiManager.DialogType.Normal, nil, function()
XLuaUiManager.RunMain()
end)
else
if XDataCenter.RoomManager.Matching then
XUiManager.DialogTip(title, cancelMatchMsg, XUiManager.DialogType.Normal, nil, function()
XDataCenter.RoomManager.CancelMatch(function()
XLuaUiManager.RunMain()
end)
end)
else
XLuaUiManager.RunMain()
end
end
end
function XUiFubenChallengeMap:InitTitle()
if self.ChallengeCfg.Type == XDataCenter.FubenManager.ChapterType.Urgent then
self.PanelTitle.gameObject:SetActive(false)
return
end
if self.TxtShuaxin then
self.TxtShuaxin.text = CS.XTextManager.GetText("FubenChallengeResetTime")
end
if self.ChallengeCfg.Type == XDataCenter.FubenManager.ChapterType.YSHTX or
self.ChallengeCfg.Type == XDataCenter.FubenManager.ChapterType.EMEX then
self.TxtBt.text = self.SectionCfg.Name or ""
end
XCountDown.CreateTimer(LOCAL_CHALLENGE_TIMER_NAME, XDataCenter.FubenDailyManager.GetDailyRemainTime(self.ChallengeCfg.Id))
XCountDown.BindTimer(self, LOCAL_CHALLENGE_TIMER_NAME, function(v)
if v > 0 then
self.TxtCurTime.text = XUiHelper.GetTime(v, XUiHelper.TimeFormatType.CHALLENGE)
else
if XLuaUiManager.IsUiShow("UiFubenChallengeMap") then
XUiManager.TipText("FubenDailyIsAlreadyReset")
self:Close()
if self.TimeOutCb then
self.TimeOutCb()
end
else
self:Remove()
end
end
end)
end
function XUiFubenChallengeMap:InitWithCfg(challenge)
self.ChallengeCfg = challenge
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin)
if self.ChallengeCfg.Type == XDataCenter.FubenManager.ChapterType.Urgent then
self.SectionCfg = nil
else
self.SectionCfg = XDataCenter.FubenDailyManager.GetDailySectionByChapterId(challenge.Id)
end
self:InitTitle()
self:InitChallengeEventDesc()
self:LoadContent()
self:InitRewardItem()
self:RefreshUI()
end
function XUiFubenChallengeMap:InitRewardItem()
self.Panelreceived.gameObject:SetActive(false)
self.PanelEffect.gameObject:SetActive(false)
self.curFightNum = 0
self.isGetChallengeReward = false
end
function XUiFubenChallengeMap:RefreshReward()
--TODO 临时删除奖励
self.PanelBottom.gameObject:SetActive(false)
-- local isGetChallengeReward = false
-- if not self.SectionCfg then
-- self.PanelBottom.gameObject:SetActive(false)
-- return
-- end
-- local sectionData = XDataCenter.FubenDailyManager.GetDailySectionData(self.SectionCfg.Id)
-- local curFightNum = 0
-- if sectionData then
-- curFightNum = sectionData.PassTimesToday
-- isGetChallengeReward = sectionData.ReceiveReward
-- end
-- local rewardNeedFinishCount = self.SectionCf .RewardNeedFinishCount or 0
-- if curFightNum > rewardNeedFinishCount then
-- curFightNum = rewardNeedFinishCount
-- end
-- self.ImgSlide.fillAmount = curFightNum / rewardNeedFinishCount
-- self.TxtProgress.text = (rewardNeedFinishCount - curFightNum) .. "/" .. rewardNeedFinishCount
-- if curFightNum >= rewardNeedFinishCount then
-- if isGetChallengeReward then
-- self.Panelreceived.gameObject:SetActive(true)
-- self.PanelEffect.gameObject:SetActive(false)
-- else
-- self.PanelEffect.gameObject:SetActive(true)
-- self.Panelreceived.gameObject:SetActive(false)
-- end
-- else
-- self.PanelEffect.gameObject:SetActive(false)
-- self.Panelreceived.gameObject:SetActive(false)
-- end
-- self.isGetChallengeReward = isGetChallengeReward
-- self.curFightNum = curFightNum
end
function XUiFubenChallengeMap:RefreshMatching()
self.PanelTip.gameObject:SetActive(XDataCenter.RoomManager.Matching)
end
function XUiFubenChallengeMap:LoadContent()
if self.ChallengeCfg.Type == XDataCenter.FubenManager.ChapterType.YSHTX then
self:OpenChildUi("UiFubenChallengeYSHTX", self, self.ChallengeCfg)
self.ContentViewInst = self:FindChildUiObj("UiFubenChallengeYSHTX")
elseif self.ChallengeCfg.Type == XDataCenter.FubenManager.ChapterType.EMEX then
self:OpenChildUi("UiFubenChallengeEMEX", self, self.ChallengeCfg)
self.ContentViewInst = self:FindChildUiObj("UiFubenChallengeEMEX")
elseif self.ChallengeCfg.Type == XDataCenter.FubenManager.ChapterType.Urgent then
self:OpenChildUi("UiFubenChallengeUrgent", self, self.ChallengeCfg)
self.ContentViewInst = self:FindChildUiObj("UiFubenChallengeUrgent")
end
end
function XUiFubenChallengeMap:OpenPanelStageDetail(stageCfg, stageInfo)
self.CurStageCfg = stageCfg
self.CurStageData = stageInfo
self.PanelAsset.gameObject:SetActive(false)
self.Stage = stageCfg
self.PanelEvent.gameObject:SetActive(false)
XLuaUiManager.Open("UiFubenStageDetail", stageCfg)
end
function XUiFubenChallengeMap:OnCloseStageDetail()
self.PanelAsset.gameObject:SetActive(true)
if self.ContentViewInst and self.ContentViewInst.OnCloseStageDetail then
self.ContentViewInst:OnCloseStageDetail()
end
if self.HasChallengeEvent then
self.PanelEvent.gameObject:SetActive(true)
else
self.PanelEvent.gameObject:SetActive(false)
end
end
function XUiFubenChallengeMap:InitChallengeEventDesc()
local envenId = 0
if self.ChallengeCfg.Type == XDataCenter.FubenManager.ChapterType.Urgent then
envenId = self.ChallengeCfg.UrgentInfo.EventId
end
if envenId > 0 then
local fightEventCfg = CS.XNpcManager.GetFightEventTemplate(envenId)
self.TxtEventDesc.text = fightEventCfg.Description
self.ChallengeEventCfg = fightEventCfg
self.PanelEvent.gameObject:SetActive(true)
self.HasChallengeEvent = true
else
self.PanelEvent.gameObject:SetActive(false)
end
end
function XUiFubenChallengeMap:EnterFight(stage)
local conditions
if self.ChallengeEventCfg and self.ChallengeEventCfg.ConditionId then
conditions = XTool.CsList2LuaTable(self.ChallengeEventCfg.ConditionId)
end
local data = {ForceConditionIds = conditions}
if XDataCenter.FubenManager.OpenRoomSingle(stage, data) then
if self.ContentViewInst and self.ContentViewInst.OnEnterFight then
self.ContentViewInst:OnEnterFight()
end
XLuaUiManager.Remove("UiFubenStageDetail")
self:OnCloseStageDetail()
end
end
function XUiFubenChallengeMap:OnGetEvents()
return { XEventId.EVENT_FUBEN_CLOSE_FUBENSTAGEDETAIL, XEventId.EVENT_FUBEN_ENTERFIGHT }
end
--事件监听
function XUiFubenChallengeMap:OnNotify(evt, ...)
local args = { ... }
if evt == XEventId.EVENT_FUBEN_CLOSE_FUBENSTAGEDETAIL then
self:OnCloseStageDetail()
elseif evt == XEventId.EVENT_FUBEN_ENTERFIGHT then
self:EnterFight(args[1])
end
end
return XUiFubenChallengeMap