PGRData/Script/matrix/xui/xuispecialtrainsnow/XUiFubenSnowGame.lua
2024-09-01 22:49:41 +02:00

349 lines
No EOL
12 KiB
Lua

local XUiGridFubenSnowGameDayTask = require("XUi/XUiSpecialTrainSnow/XUiGridFubenSnowGameDayTask")
local XUiPanelRoleModel = require("XUi/XUiCharacter/XUiPanelRoleModel")
local XSpecialTrainActionRandom = require("XUi/XUiSpecialTrainBreakthrough/XSpecialTrainActionRandom")
---@class XUiFubenSnowGame : XLuaUi
---@field SpecialTrainActionRandom XSpecialTrainActionRandom
---@field RankProgress UnityEngine.UI.Image
local XUiFubenSnowGame = XLuaUiManager.Register(XLuaUi, "UiFubenSnowGame")
local CameraType = {
Main = 1,
Character = 2,
}
local EffectPlayTime = 0.35
function XUiFubenSnowGame:OnAwake()
self:RegisterButtonClick()
self:InitUiPanelRoleModel()
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 XUiFubenSnowGame:OnStart()
self.ActivityConfig = XFubenSpecialTrainConfig.GetActivityConfigById(XDataCenter.FubenSpecialTrainManager.GetCurActivityId())
self.StageIds = XDataCenter.FubenSpecialTrainManager.GetStagesByActivityId(self.ActivityConfig.Id)
-- 只有一个关卡
self.CurrentStageId = self.StageIds[1] or 0
self.SpecialTrainActionRandom = XSpecialTrainActionRandom.New()
self.HelpDataFunc = function()
return self:GetHelpDataFunc()
end
self:BindHelpBtnNew(self.BtnHelp, self.HelpDataFunc)
if not XTool.UObjIsNil(self.PanelModelAnim) then
self.PanelModelAnim:PlayTimelineAnimation()
end
-- 开启自动关闭检查
self.EndTime = XFunctionManager.GetEndTimeByTimeId(self.ActivityConfig.TimeId)
self:SetAutoCloseInfo(self.EndTime,function(isClose)
if isClose then
XDataCenter.FubenSpecialTrainManager.HandleActivityEndTime()
else
self:UpdateRefreshTime()
self:RefreshDayTaskTime()
end
end)
end
function XUiFubenSnowGame:OnEnable()
self.Super.OnEnable(self)
self:UpdateRefreshTime()
self:RefreshDayTaskTime()
self:RefreshRankDara()
self:RefreshDayTask()
self:RefreshRoleModel()
self:RefreshCamera(CameraType.Main)
self:RefreshRedPoint()
self:AutoGetReward()
end
function XUiFubenSnowGame:OnGetEvents()
return {
XEventId.EVENT_FINISH_TASK,
XEventId.EVENT_TASK_SYNC,
XEventId.EVENT_FUBEN_SPECIAL_TEAIN_RANK_SCORE_CHANGE,
}
end
function XUiFubenSnowGame:OnNotify(event,...)
if event == XEventId.EVENT_FINISH_TASK or event == XEventId.EVENT_TASK_SYNC then
self:RefreshRedPoint()
self:RefreshDayTask()
elseif event == XEventId.EVENT_FUBEN_SPECIAL_TEAIN_RANK_SCORE_CHANGE then
self:RefreshRankDara()
end
end
function XUiFubenSnowGame:OnDisable()
self.Super.OnDisable(self)
self.SpecialTrainActionRandom:Stop()
end
function XUiFubenSnowGame: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)
self.SpecialTrainActionRandom:Stop()
end
function XUiFubenSnowGame:RegisterButtonClick()
self.BtnBack.CallBack = function()
self:Close()
end
self.BtnMainUi.CallBack = function()
XLuaUiManager.RunMain()
end
self.BtnTask.CallBack = function()
self:OnClickBtnTask()
end
self.BtnCreateRoom.CallBack = function()
self:OnClickBtnCreateRoom()
end
self.BtnMatch.CallBack = function()
self:OnClickBtnMatch()
end
self.RankBtnHelp.CallBack = function()
self:OnClickRankBtnHelp()
end
self.BtnChange.CallBack = function()
self:OnClickBtnChange()
end
end
--任务
function XUiFubenSnowGame:OnClickBtnTask()
XLuaUiManager.Open("UiFubenSnowGameTask")
end
--创建地图
function XUiFubenSnowGame:OnClickBtnCreateRoom()
XDataCenter.RoomManager.CreateRoom(self.CurrentStageId)
end
--快速匹配
function XUiFubenSnowGame:OnClickBtnMatch()
self:Match(true)
end
--段位帮助按钮
function XUiFubenSnowGame:OnClickRankBtnHelp()
XLuaUiManager.Open("UiFubenSnowGameMedalTips", self.CurRankId)
end
function XUiFubenSnowGame:OnClickBtnChange()
XLuaUiManager.Open("UiFubenSnowGameCharacter", handler(self, self.RefreshRoleModel), handler(self, self.SwitchCameraMain))
self:RefreshCamera(CameraType.Character)
self:PlayAnimation("UiDisable")
end
function XUiFubenSnowGame:Match(needMatchCountCheck)
--根据关卡ID匹配
XDataCenter.RoomManager.MultiMatch({ self.CurrentStageId }, function()
self:OnBeginMatch()
XLuaUiManager.Open("UiOnLineMatching", self.CurrentStageId)
end, needMatchCountCheck)
end
function XUiFubenSnowGame:RefreshRankDara()
local curScore = XDataCenter.FubenSpecialTrainManager.GetCurScore()
--当前段位Id、是否是最高段位、下一段位id
local curRankId, isHighestGrade, nextRankId = XDataCenter.FubenSpecialTrainManager.GetCurIdAndNextIdByScore(curScore)
self.CurRankId = curRankId
local curIcon = XFubenSpecialTrainConfig.GetRankIconById(curRankId)
self.RankIcon:SetRawImage(curIcon)
if isHighestGrade then
self.RankText.text = CSXTextManagerGetText("SnowHighestGrade")
self.RankScore.text = curScore
self.RankProgress.fillAmount = 1
else
self.RankText.text = CSXTextManagerGetText("SnowNextGrade")
local nextScore = XFubenSpecialTrainConfig.GetRankScoreById(nextRankId)
self.RankScore.text = CSXTextManagerGetText("SnowGradeScore", curScore, nextScore)
self.RankProgress.fillAmount = curScore / nextScore
end
end
function XUiFubenSnowGame:RefreshDayTaskTime()
if XTool.UObjIsNil(self.TxtDayTime) then
return
end
local refreshTime = XTime.GetSeverNextRefreshTime()
local currentTime = XTime.GetServerNowTimestamp()
local remainTime = refreshTime - currentTime
local timeDesc = XUiHelper.GetTime(remainTime, XUiHelper.TimeFormatType.DAY_HOUR)
self.TxtDayTime.text = timeDesc
end
function XUiFubenSnowGame:RefreshDayTask()
local dayTaskData = XDataCenter.FubenSpecialTrainManager.GetSnowGameDailyTaskGroup()
self:RefreshTemplateGrids(self.GridTask, dayTaskData, self.PanelTask, XUiGridFubenSnowGameDayTask, "GridDayTaskList")
end
function XUiFubenSnowGame:OnBeginMatch()
self.Mask.gameObject:SetActiveEx(true)
self.BtnMatching.gameObject:SetActiveEx(true)
self.BtnMatch.gameObject:SetActiveEx(false)
end
function XUiFubenSnowGame:OnCancelMatch()
self.Mask.gameObject:SetActiveEx(false)
self.BtnMatching.gameObject:SetActiveEx(false)
self.BtnMatch.gameObject:SetActiveEx(true)
end
--匹配人数过多
function XUiFubenSnowGame:OnMatchPlayers(recommendStageId)
self:OnCancelMatch()
local title = XUiHelper.GetText("SpecialTrainSnowMatchTipTitle")
local content = XUiHelper.GetText("SpecialTrainSnowMatchTipContent")
XUiManager.DialogTip(title, content, XUiManager.DialogType.Normal,
function()
self:Match(false)
end, function()
-- 根据服务端下方的id创建房间
XDataCenter.RoomManager.CreateRoom(recommendStageId)
end)
end
function XUiFubenSnowGame:RefreshRedPoint()
local isShowRedDot = XDataCenter.FubenSpecialTrainManager.CheckTaskAchieved()
self.BtnTask:ShowReddot(isShowRedDot)
end
function XUiFubenSnowGame: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 XUiFubenSnowGame:UpdateRefreshTime()
if XTool.UObjIsNil(self.TxtTime) then
return
end
local leftTime = self.EndTime - XTime.GetServerNowTimestamp()
if leftTime <= 0 then
leftTime = 0
end
local timeDesc = XUiHelper.GetTime(leftTime, XUiHelper.TimeFormatType.ACTIVITY)
self.TxtTime.text = timeDesc
end
function XUiFubenSnowGame:InitUiPanelRoleModel()
local root = self.UiModelGo.transform
self.CameraFar = {
[CameraType.Main] = root:FindTransform("UiCamFarMain"),
[CameraType.Character] = root:FindTransform("UiCamFarCharacter")
}
self.CameraNear = {
[CameraType.Main] = root:FindTransform("UiCamNearMain"),
[CameraType.Character] = root:FindTransform("UiCamNearCharacter")
}
self.PanelModelAnim = root:FindTransform("AnimEnable")
self.PanelRoleModel = root:FindTransform("PanelModel")
---@type XUiPanelRoleModel
self.UiPanelRoleModel = XUiPanelRoleModel.New(self.PanelRoleModel, self.Name, nil, true, nil, true)
end
function XUiFubenSnowGame:RefreshRoleModel()
local robotId = XDataCenter.FubenSpecialTrainManager.GetSnowGameRobotId()
if not XTool.IsNumberValid(robotId) then
return
end
local robotCfg = XRobotManager.GetRobotTemplate(robotId)
if not robotCfg then
return
end
self:OnModelLoadBegin()
local needDisplayController = XCharacterCuteConfig.GetNeedDisplayController(self.CurrentStageId)
self.UiPanelRoleModel:UpdateCuteModel(robotId, robotCfg.CharacterId, nil, robotCfg.FashionId, nil, function()
self:OnModelLoadCallback()
end, needDisplayController)
end
function XUiFubenSnowGame:OnModelLoadCallback()
local needDisplayController = XCharacterCuteConfig.GetNeedDisplayController(self.CurrentStageId)
if not needDisplayController then
return
end
local actionArray = XCharacterCuteConfig.GetModelRandomAction(self.UiPanelRoleModel:GetCurRoleName())
self.SpecialTrainActionRandom:SetAnimator(self.UiPanelRoleModel:GetAnimator(), actionArray, self.UiPanelRoleModel)
self.SpecialTrainActionRandom:Play()
end
function XUiFubenSnowGame:OnModelLoadBegin()
self.SpecialTrainActionRandom:Stop()
end
function XUiFubenSnowGame:RefreshCamera(camera)
if not self.CameraFar or not self.CameraNear then
return
end
for _, type in pairs(CameraType) do
local nearCamera = self.CameraNear[type]
if not XTool.UObjIsNil(nearCamera) then
nearCamera.gameObject:SetActiveEx(type == camera)
end
local farCamera = self.CameraFar[type]
if not XTool.UObjIsNil(farCamera) then
farCamera.gameObject:SetActiveEx(type == camera)
end
end
end
function XUiFubenSnowGame:SwitchCameraMain()
self:RefreshCamera(CameraType.Main)
self:PlayAnimation("UiEnable")
end
function XUiFubenSnowGame:AutoGetReward()
local taskList = XDataCenter.FubenSpecialTrainManager.GetSnowGameDailyTaskGroup()
local taskIdList = {}
for _, data in pairs(taskList) do
if XDataCenter.TaskManager.CheckTaskAchieved(data.Id) then
taskIdList[#taskIdList + 1] = data.Id
end
end
self.EffectStar.gameObject:SetActiveEx(false)
if XTool.IsTableEmpty(taskIdList) then
return
end
self.Mask.gameObject:SetActiveEx(true)
RunAsyn(function()
-- 等待进入动画播放完成
asynWaitSecond(1)
-- 特效播放
self:PlayGridEffectAnimation(taskIdList)
asynWaitSecond(EffectPlayTime)
self.EffectStar.gameObject:SetActiveEx(true)
self.Mask.gameObject:SetActiveEx(false)
self:ReceiveTask(taskIdList)
end)
end
function XUiFubenSnowGame:PlayGridEffectAnimation(taskIdList)
for i = 1, 3 do
---@type XUiGridFubenSnowGameDayTask
local grid = self:GetGrid(i, "GridDayTaskList")
local id = grid:GetId()
if table.contains(taskIdList, id) then
grid:PlayEffectAnimation(self.EffectStar.transform.position, EffectPlayTime)
end
end
end
function XUiFubenSnowGame:ReceiveTask(taskIdList)
XDataCenter.TaskManager.FinishMultiTaskRequest(taskIdList, function(rewardGoodsList)
XLuaUiManager.Open("UiPassportTips", rewardGoodsList, "", XUiHelper.GetText("SnowGameGetReward"))
end)
end
return XUiFubenSnowGame