270 lines
9.3 KiB
Lua
270 lines
9.3 KiB
Lua
|
local XUiFubenYuanXiao = XLuaUiManager.Register(XLuaUi, "UiFubenYuanXiao")
|
||
|
|
||
|
function XUiFubenYuanXiao:OnAwake()
|
||
|
self:RegisterButtonClick()
|
||
|
XEventManager.AddEventListener(XEventId.EVENT_ROOM_ENTER_ROOM, self.OnCancelMatch, self)
|
||
|
XEventManager.AddEventListener(XEventId.EVENT_ROOM_CANCEL_MATCH, self.OnCancelMatch, self)
|
||
|
XEventManager.AddEventListener(XEventId.EVENT_ROOM_MATCH_PLAYERS, self.OnMatchPlayers, self)
|
||
|
end
|
||
|
|
||
|
function XUiFubenYuanXiao:OnStart()
|
||
|
self.ActivityConfig = XFubenSpecialTrainConfig.GetActivityConfigById(XDataCenter.FubenSpecialTrainManager.GetCurActivityId())
|
||
|
self.EndTime = XFunctionManager.GetEndTimeByTimeId(self.ActivityConfig.TimeId)
|
||
|
self.HelpDataFunc = function()
|
||
|
return self:GetHelpDataFunc()
|
||
|
end
|
||
|
self:BindHelpBtnNew(self.BtnHelp, self.HelpDataFunc)
|
||
|
end
|
||
|
|
||
|
function XUiFubenYuanXiao:OnEnable()
|
||
|
self:RefreshStageId()
|
||
|
self:RefreshMapData()
|
||
|
self:RefreshPattern()
|
||
|
self:RefreshRankDara()
|
||
|
self:RefreshRedPoint()
|
||
|
self:StartTimer()
|
||
|
end
|
||
|
|
||
|
function XUiFubenYuanXiao:OnGetEvents()
|
||
|
return {
|
||
|
XEventId.EVENT_FINISH_TASK,
|
||
|
XEventId.EVENT_TASK_SYNC,
|
||
|
XEventId.EVENT_FUBEN_SPECIAL_TEAIN_RANK_SCORE_CHANGE,
|
||
|
}
|
||
|
end
|
||
|
|
||
|
function XUiFubenYuanXiao:OnNotify(event,...)
|
||
|
if event == XEventId.EVENT_FINISH_TASK or event == XEventId.EVENT_TASK_SYNC then
|
||
|
self:RefreshRedPoint()
|
||
|
elseif event == XEventId.EVENT_FUBEN_SPECIAL_TEAIN_RANK_SCORE_CHANGE then
|
||
|
self:RefreshRankDara()
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiFubenYuanXiao:OnDisable()
|
||
|
self:StopTimer()
|
||
|
end
|
||
|
|
||
|
function XUiFubenYuanXiao:OnDestroy()
|
||
|
XEventManager.RemoveEventListener(XEventId.EVENT_ROOM_ENTER_ROOM, self.OnCancelMatch, self)
|
||
|
XEventManager.RemoveEventListener(XEventId.EVENT_ROOM_CANCEL_MATCH, self.OnCancelMatch, self)
|
||
|
XEventManager.RemoveEventListener(XEventId.EVENT_ROOM_MATCH_PLAYERS, self.OnMatchPlayers, self)
|
||
|
end
|
||
|
|
||
|
function XUiFubenYuanXiao:RegisterButtonClick()
|
||
|
self.BtnBack.CallBack = function()
|
||
|
self:Close()
|
||
|
end
|
||
|
self.BtnMainUi.CallBack = function()
|
||
|
XLuaUiManager.RunMain()
|
||
|
end
|
||
|
self.BtnTask.CallBack = function()
|
||
|
self:OnClickBtnTask()
|
||
|
end
|
||
|
self.BtnPattern.CallBack = function()
|
||
|
self:OnClickBtnPattern()
|
||
|
end
|
||
|
self.BtnCreateRoom.CallBack = function()
|
||
|
self:OnClickBtnCreateRoom()
|
||
|
end
|
||
|
self.BtnMatch.CallBack = function()
|
||
|
self:OnClickBtnMatch()
|
||
|
end
|
||
|
self.BtnSwitch.CallBack = function()
|
||
|
self:OnClickBtnSwitch()
|
||
|
end
|
||
|
self.RankBtnHelp.CallBack = function()
|
||
|
self:OnClickRankBtnHelp()
|
||
|
end
|
||
|
end
|
||
|
--任务
|
||
|
function XUiFubenYuanXiao:OnClickBtnTask()
|
||
|
XLuaUiManager.Open("UiFubenYuanXiaoTask")
|
||
|
end
|
||
|
--困难模式
|
||
|
function XUiFubenYuanXiao:OnClickBtnPattern()
|
||
|
self.IsHellMode = self.BtnPattern:GetToggleState()
|
||
|
XDataCenter.FubenSpecialTrainManager.SetIsHellMode(self.IsHellMode)
|
||
|
end
|
||
|
--创建地图
|
||
|
function XUiFubenYuanXiao:OnClickBtnCreateRoom()
|
||
|
if self.IsRandomStage then
|
||
|
XUiManager.TipMsg(CSXTextManagerGetText("YuanXiaoRandomMapTip"))
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local stageId = self.CurrentStageId
|
||
|
if self.IsHellMode then
|
||
|
stageId = XFubenSpecialTrainConfig.GetHellStageId(self.CurrentStageId)
|
||
|
end
|
||
|
|
||
|
XDataCenter.RoomManager.CreateRoom(stageId)
|
||
|
end
|
||
|
--快速匹配
|
||
|
function XUiFubenYuanXiao:OnClickBtnMatch()
|
||
|
self:Match(true)
|
||
|
end
|
||
|
--切换地图
|
||
|
function XUiFubenYuanXiao:OnClickBtnSwitch()
|
||
|
XLuaUiManager.Open("UiFubenYuanXiaoMapTips", self.CurrentStageId, true, handler(self, self.BtnSwitchCallback))
|
||
|
end
|
||
|
--段位帮助按钮
|
||
|
function XUiFubenYuanXiao:OnClickRankBtnHelp()
|
||
|
XLuaUiManager.Open("UiFubenYuanXiaoMedalTips")
|
||
|
end
|
||
|
|
||
|
function XUiFubenYuanXiao:Match(needMatchCountCheck)
|
||
|
if self.IsRandomStage then
|
||
|
--随机关卡匹配
|
||
|
local stageIds = XDataCenter.FubenSpecialTrainManager.GetStageIdsByHellMode(self.IsHellMode)
|
||
|
XDataCenter.RoomManager.MultiMatch(stageIds, function()
|
||
|
self:OnBeginMatch()
|
||
|
XLuaUiManager.Open("UiOnLineMatching")
|
||
|
end, needMatchCountCheck)
|
||
|
else
|
||
|
--根据关卡ID匹配
|
||
|
local stageId = self.CurrentStageId
|
||
|
if self.IsHellMode then
|
||
|
stageId = XFubenSpecialTrainConfig.GetHellStageId(self.CurrentStageId)
|
||
|
end
|
||
|
XDataCenter.RoomManager.MultiMatch({ stageId }, function()
|
||
|
self:OnBeginMatch()
|
||
|
XLuaUiManager.Open("UiOnLineMatching", stageId)
|
||
|
end, needMatchCountCheck)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiFubenYuanXiao:BtnSwitchCallback(stageId)
|
||
|
self.CurrentStageId = stageId
|
||
|
self:RefreshMapData()
|
||
|
end
|
||
|
|
||
|
function XUiFubenYuanXiao:RefreshStageId()
|
||
|
self.StageIds = XDataCenter.FubenSpecialTrainManager.GetAllStageIdByActivityId(self.ActivityConfig.Id, true)
|
||
|
local stageId = XDataCenter.FubenSpecialTrainManager.GetCurrentStageId()
|
||
|
self.CurrentStageId = stageId or self.StageIds[1]
|
||
|
end
|
||
|
|
||
|
function XUiFubenYuanXiao:RefreshMapData()
|
||
|
XDataCenter.FubenSpecialTrainManager.SetCurrentStageId(self.CurrentStageId)
|
||
|
-- 当前选择的关卡是否为随机关卡
|
||
|
self.IsRandomStage = XDataCenter.FubenSpecialTrainManager.CheckHasRandomStage(self.CurrentStageId)
|
||
|
self.BtnCreateRoom:SetButtonState(self.IsRandomStage and CS.UiButtonState.Disable or CS.UiButtonState.Normal)
|
||
|
|
||
|
if not self.IsRandomStage then
|
||
|
local stageCfg = XDataCenter.FubenManager.GetStageCfg(self.CurrentStageId)
|
||
|
self.TextMapName.text = stageCfg.Name
|
||
|
self.TextMapDesc.text = stageCfg.Description
|
||
|
self.IconEffect = XFubenSpecialTrainConfig.GetIconEffectByStageId(self.CurrentStageId)
|
||
|
else
|
||
|
self.TextMapName.text = XFubenSpecialTrainConfig.GetRandomStageNameById(self.CurrentStageId)
|
||
|
self.TextMapDesc.text = XFubenSpecialTrainConfig.GetRandomStageDescriptionById(self.CurrentStageId)
|
||
|
self.IconEffect = XFubenSpecialTrainConfig.GetRandomStageIconEffectById(self.CurrentStageId)
|
||
|
end
|
||
|
self.BgMap.gameObject:LoadPrefab(self.IconEffect)
|
||
|
end
|
||
|
|
||
|
function XUiFubenYuanXiao:RefreshPattern()
|
||
|
self.IsHellMode = XDataCenter.FubenSpecialTrainManager.GetIsHellMode()
|
||
|
self.BtnPattern:SetButtonState(self.IsHellMode and CS.UiButtonState.Select or CS.UiButtonState.Normal)
|
||
|
end
|
||
|
|
||
|
function XUiFubenYuanXiao:RefreshRankDara()
|
||
|
local curScore = XDataCenter.FubenSpecialTrainManager.GetCurScore()
|
||
|
--当前段位Id、是否是最高段位、下一段位id
|
||
|
local curRankId, isHighestGrade, nextRankId = XDataCenter.FubenSpecialTrainManager.GetCurIdAndNextIdByScore(curScore)
|
||
|
local curIcon = XFubenSpecialTrainConfig.GetRankIconById(curRankId)
|
||
|
self.RankIcon:SetRawImage(curIcon)
|
||
|
if isHighestGrade then
|
||
|
self.RankText.text = CSXTextManagerGetText("YuanXiaoHighestGrade")
|
||
|
self.RankScore.text = curScore
|
||
|
else
|
||
|
self.RankText.text = CSXTextManagerGetText("YuanXiaoNextGrade")
|
||
|
local nextScore = XFubenSpecialTrainConfig.GetRankScoreById(nextRankId)
|
||
|
self.RankScore.text = CSXTextManagerGetText("YuanXiaoGradeScore", curScore, nextScore)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiFubenYuanXiao:OnBeginMatch()
|
||
|
self.Mask.gameObject:SetActiveEx(true)
|
||
|
self.BtnMatching.gameObject:SetActiveEx(true)
|
||
|
self.BtnMatch.gameObject:SetActiveEx(false)
|
||
|
end
|
||
|
|
||
|
function XUiFubenYuanXiao:OnCancelMatch()
|
||
|
self.Mask.gameObject:SetActiveEx(false)
|
||
|
self.BtnMatching.gameObject:SetActiveEx(false)
|
||
|
self.BtnMatch.gameObject:SetActiveEx(true)
|
||
|
end
|
||
|
|
||
|
--匹配人数过多
|
||
|
function XUiFubenYuanXiao:OnMatchPlayers(recommendStageId)
|
||
|
self:OnCancelMatch()
|
||
|
XUiManager.DialogTip(CS.XTextManager.GetText("SpecialTrainYuanXiaoMatchTipTitle"), CS.XTextManager.GetText("SpecialTrainYuanXiaoMatchTipContent"), XUiManager.DialogType.Normal,
|
||
|
function()
|
||
|
self:Match(false)
|
||
|
end, function()
|
||
|
--根据服务端下方的id创建房间
|
||
|
XDataCenter.RoomManager.CreateRoom(recommendStageId)
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
function XUiFubenYuanXiao:RefreshRedPoint()
|
||
|
local isShowRedDot = XDataCenter.FubenSpecialTrainManager.CheckTaskAchieved()
|
||
|
self.BtnTask:ShowReddot(isShowRedDot)
|
||
|
end
|
||
|
|
||
|
function XUiFubenYuanXiao:GetHelpDataFunc()
|
||
|
local helpIds = {}
|
||
|
local chapterConfig = XFubenSpecialTrainConfig.GetChapterConfigById(self.ActivityConfig.ChapterIds[1])
|
||
|
for _, var in ipairs(chapterConfig.HelpId) do
|
||
|
table.insert(helpIds, var)
|
||
|
end
|
||
|
|
||
|
if not helpIds then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local helpConfigs = {}
|
||
|
for i = 1, #helpIds do
|
||
|
helpConfigs[i] = XHelpCourseConfig.GetHelpCourseTemplateById(helpIds[i])
|
||
|
end
|
||
|
|
||
|
return helpConfigs
|
||
|
end
|
||
|
|
||
|
function XUiFubenYuanXiao:StartTimer()
|
||
|
if self.Timer then
|
||
|
self:StopTimer()
|
||
|
end
|
||
|
self:UpdateRefreshTime()
|
||
|
self.Timer = XScheduleManager.ScheduleForever(function()
|
||
|
self:UpdateRefreshTime()
|
||
|
end, XScheduleManager.SECOND)
|
||
|
end
|
||
|
|
||
|
function XUiFubenYuanXiao:UpdateRefreshTime()
|
||
|
if XTool.UObjIsNil(self.TxtTime) then
|
||
|
self:StopTimer()
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local now = XTime.GetServerNowTimestamp()
|
||
|
if now >= self.EndTime then
|
||
|
self:StopTimer()
|
||
|
XDataCenter.FubenSpecialTrainManager.HandleActivityEndTime()
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local timeDesc = XUiHelper.GetTime(self.EndTime - now, XUiHelper.TimeFormatType.ACTIVITY)
|
||
|
self.TxtTime.text = timeDesc
|
||
|
end
|
||
|
|
||
|
function XUiFubenYuanXiao:StopTimer()
|
||
|
if self.Timer then
|
||
|
XScheduleManager.UnSchedule(self.Timer)
|
||
|
self.Timer = nil
|
||
|
end
|
||
|
end
|
||
|
|
||
|
return XUiFubenYuanXiao
|