237 lines
10 KiB
Lua
237 lines
10 KiB
Lua
|
local tableInsert = table.insert
|
||
|
local CSXTextManagerGetText = CS.XTextManager.GetText
|
||
|
|
||
|
local XUiFubenActivityPuzzle = XLuaUiManager.Register(XLuaUi, "UiFubenActivityPuzzle")
|
||
|
|
||
|
local XUiFubenActivityPuzzleRewardPanel = require("XUi/XUiFubenActivityPuzzle/XUiFubenActivityPuzzleRewardPanel")
|
||
|
local XUiFubenActivityPuzzleGamePanel = require("XUi/XUiFubenActivityPuzzle/XUiFubenActivityPuzzleGamePanel")
|
||
|
local XUiFubenActivityPuzzlePasswordRewardPanel = require("XUi/XUiFubenActivityPuzzle/XUiFubenActivityPuzzlePasswordRewardPanel")
|
||
|
|
||
|
function XUiFubenActivityPuzzle:OnAwake()
|
||
|
self.PanelReward = XUiFubenActivityPuzzleRewardPanel.New(self, self.LeftAwardPanel)
|
||
|
self.PanelGame = XUiFubenActivityPuzzleGamePanel.New(self, self.GamePanel)
|
||
|
self.PanelPasswordReward = XUiFubenActivityPuzzlePasswordRewardPanel.New(self, self.LeftAwardPassWordPanel)
|
||
|
end
|
||
|
|
||
|
function XUiFubenActivityPuzzle:OnStart()
|
||
|
self.RedPointIdArr = {}
|
||
|
self:AutoRegisterBtn()
|
||
|
self.AssetPanel = XUiPanelActivityAsset.New(self.PanelAsset, true)
|
||
|
self.AssetPanel:Refresh({ XDataCenter.FubenActivityPuzzleManager.GetActivityInfo().ItemId })
|
||
|
self:InitBtnGroup()
|
||
|
end
|
||
|
|
||
|
function XUiFubenActivityPuzzle:OnEnable()
|
||
|
self:RefreshBtnTab()
|
||
|
self:StartActivityTimer()
|
||
|
local defaultTabIndex = XDataCenter.FubenActivityPuzzleManager.FindDefaultSelectTabIndex()
|
||
|
self.isEnable = true
|
||
|
self.PanelTab:SelectIndex(defaultTabIndex)
|
||
|
self.CurrentSelectIndex = defaultTabIndex
|
||
|
self:CheckHelpHitFace()
|
||
|
end
|
||
|
|
||
|
function XUiFubenActivityPuzzle:OnDisable()
|
||
|
self:StopActivityTimer()
|
||
|
end
|
||
|
|
||
|
function XUiFubenActivityPuzzle:OnDestroy()
|
||
|
self:RemoveRedPointEvent()
|
||
|
end
|
||
|
|
||
|
function XUiFubenActivityPuzzle:OnGetEvents()
|
||
|
return {
|
||
|
XEventId.EVENT_DRAG_PUZZLE_GAME_GET_PIECE,
|
||
|
XEventId.EVENT_DRAG_PUZZLE_GAME_PUZZLE_CHANGED,
|
||
|
XEventId.EVENT_DRAG_PUZZLE_GAME_GOT_REWARD,
|
||
|
XEventId.EVENT_DRAG_PUZZLE_GAME_PUZZLE_COMPLETE,
|
||
|
XEventId.EVENT_DRAG_PUZZLE_GAME_PUZZLE_DECRYPTION,
|
||
|
XEventId.EVENT_DRAG_PUZZLE_GAME_PUZZLE_CHECK_WORD_ERROR,
|
||
|
}
|
||
|
end
|
||
|
|
||
|
function XUiFubenActivityPuzzle:OnNotify(evt, ...)
|
||
|
local puzzleTemplate = XDataCenter.FubenActivityPuzzleManager.GetPuzzleTemplateByIndex(self.CurrentSelectIndex)
|
||
|
if evt == XEventId.EVENT_DRAG_PUZZLE_GAME_GET_PIECE then
|
||
|
self.AssetPanel:Refresh({ XDataCenter.FubenActivityPuzzleManager.GetActivityInfo().ItemId })
|
||
|
self.PanelGame:RefreshChipPanel(...)
|
||
|
self.PanelGame:ShowSwitchPieceEffect()
|
||
|
elseif evt == XEventId.EVENT_DRAG_PUZZLE_GAME_PUZZLE_CHANGED then
|
||
|
self.PanelGame:RefreshPuzzlePanel(...)
|
||
|
self:RefreshLeftPanelByPuzzleType(puzzleTemplate.PuzzleType, ...)
|
||
|
elseif evt == XEventId.EVENT_DRAG_PUZZLE_GAME_GOT_REWARD then
|
||
|
self.PanelGame:RefreshPanel(...)
|
||
|
self:RefreshLeftPanelByPuzzleType(puzzleTemplate.PuzzleType, ...)
|
||
|
self:PlayVideoBtnAnimation(...)
|
||
|
elseif evt == XEventId.EVENT_DRAG_PUZZLE_GAME_PUZZLE_COMPLETE then
|
||
|
self:SetTabDisable()
|
||
|
XRedPointManager.Check(self.PanelGame.RedPointId)
|
||
|
self.PanelGame:SetComplete()
|
||
|
self.PanelGame:ShowPuzzleCompleteEffect()
|
||
|
self:RefreshLeftPanelByPuzzleType(puzzleTemplate.PuzzleType, ...)
|
||
|
self:PlayAnimation("Line")
|
||
|
self:ShowCompleteHintText(...)
|
||
|
if puzzleTemplate.PuzzleType == XFubenActivityPuzzleConfigs.PuzzleType.Decryption then
|
||
|
self:PlayAnimation("BgQieHuan", function ()
|
||
|
self.PanelGame.PuzzleImgBigPassword.gameObject:SetActiveEx(false)
|
||
|
end, function ()
|
||
|
self.PanelGame.PuzzleImgBigPassword.gameObject:SetActiveEx(true)
|
||
|
end)
|
||
|
end
|
||
|
elseif evt == XEventId.EVENT_DRAG_PUZZLE_GAME_PUZZLE_DECRYPTION then
|
||
|
self.PanelGame:SetDecryption()
|
||
|
self:RefreshLeftPanelByPuzzleType(puzzleTemplate.PuzzleType, ...)
|
||
|
XUiManager.TipText("DragPuzzleActivityTryDercyption")
|
||
|
elseif evt == XEventId.EVENT_DRAG_PUZZLE_GAME_PUZZLE_CHECK_WORD_ERROR then
|
||
|
self:RefreshLeftPanelByPuzzleType(puzzleTemplate.PuzzleType, ...)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiFubenActivityPuzzle:AutoRegisterBtn()
|
||
|
self.BtnBack.CallBack = function () self:Close() end
|
||
|
self.BtnMainUi.CallBack = function ()
|
||
|
XLuaUiManager.RunMain()
|
||
|
end
|
||
|
self:RegisterHelpBtn()
|
||
|
end
|
||
|
|
||
|
function XUiFubenActivityPuzzle:RegisterHelpBtn()
|
||
|
local helpId = XDataCenter.FubenActivityPuzzleManager.GetActivityInfo().HelpId
|
||
|
local template = XHelpCourseConfig.GetHelpCourseTemplateById(helpId)
|
||
|
self:BindHelpBtn(self.BtnHelp, template.Function)
|
||
|
end
|
||
|
|
||
|
function XUiFubenActivityPuzzle:InitBtnGroup()
|
||
|
local tmpBtnTabs = {self.BtnTab1, self.BtnTab2, self.BtnTab3, self.BtnTab4,}
|
||
|
self.BtnTabs = {}
|
||
|
local puzzleTemplates = XDataCenter.FubenActivityPuzzleManager.GetPuzzleTemplates()
|
||
|
for i=1, #tmpBtnTabs, 1 do
|
||
|
if i <= #puzzleTemplates then
|
||
|
tmpBtnTabs[i].gameObject:SetActiveEx(true)
|
||
|
tableInsert(self.BtnTabs, tmpBtnTabs[i])
|
||
|
local redPointId = XRedPointManager.AddRedPointEvent(tmpBtnTabs[i].ReddotObj, nil, nil, {XRedPointConditions.Types.CONDITION_DRAG_PUZZLE_GAME_TAB}, i, true)
|
||
|
tableInsert(self.RedPointIdArr, redPointId)
|
||
|
else
|
||
|
tmpBtnTabs[i].gameObject:SetActiveEx(false)
|
||
|
end
|
||
|
end
|
||
|
self.PanelTab:Init(self.BtnTabs, function (index) self:OnBtnTabClick(index) end)
|
||
|
end
|
||
|
|
||
|
function XUiFubenActivityPuzzle:OnBtnTabClick(index)
|
||
|
if XDataCenter.FubenActivityPuzzleManager.CheckPuzzleIsOpen(index) then
|
||
|
local puzzleTemplate = XDataCenter.FubenActivityPuzzleManager.GetPuzzleTemplateByIndex(index)
|
||
|
self:PlayAnimation("Refresh")
|
||
|
local puzzleId = XDataCenter.FubenActivityPuzzleManager.GetPuzzleTemplateByIndex(index).Id
|
||
|
self:RefreshLeftPanelByPuzzleType(puzzleTemplate.PuzzleType, puzzleId)
|
||
|
self.PanelGame:RefreshPanel(puzzleId)
|
||
|
if self.isEnable then
|
||
|
self.CGImage:SetRawImage(puzzleTemplate.BgUrl)
|
||
|
self.isEnable = false
|
||
|
else
|
||
|
self:PlayAnimation("Bgloading1", function ()
|
||
|
-- 切换背景
|
||
|
self.CGImage:SetRawImage(puzzleTemplate.BgUrl)
|
||
|
self:PlayAnimation("Bgloading2")
|
||
|
end)
|
||
|
end
|
||
|
self.CurrentSelectIndex = index
|
||
|
else
|
||
|
XUiManager.TipError(CSXTextManagerGetText("DragPuzzleActivityPuzzleNotOpen"))
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiFubenActivityPuzzle:RefreshBtnTab()
|
||
|
local puzzleTemplates = XDataCenter.FubenActivityPuzzleManager.GetPuzzleTemplates()
|
||
|
for index, btnTab in pairs(self.BtnTabs) do
|
||
|
btnTab:SetNameByGroup(0, string.format("%02d", index))
|
||
|
btnTab:SetNameByGroup(1, puzzleTemplates[index].SubName)
|
||
|
btnTab:SetNameByGroup(2, puzzleTemplates[index].Name)
|
||
|
end
|
||
|
self:SetTabDisable()
|
||
|
end
|
||
|
|
||
|
function XUiFubenActivityPuzzle:SetTabDisable()
|
||
|
for index, btnTab in pairs(self.BtnTabs) do
|
||
|
local isOpen = XDataCenter.FubenActivityPuzzleManager.CheckPuzzleIsOpen(index)
|
||
|
btnTab:SetDisable(not isOpen)
|
||
|
end
|
||
|
if self.CurrentSelectIndex and self.CurrentSelectIndex ~= 0 then
|
||
|
self.PanelTab:SelectIndex(self.CurrentSelectIndex)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiFubenActivityPuzzle:ShowCompleteHintText(puzzleId)
|
||
|
local puzzleTemplate = XFubenActivityPuzzleConfigs.GetPuzzleTemplateById(puzzleId)
|
||
|
if puzzleTemplate then
|
||
|
if puzzleTemplate.CompleteHintText and puzzleTemplate.CompleteHintText ~= "" then
|
||
|
XUiManager.TipMsg(puzzleTemplate.CompleteHintText)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiFubenActivityPuzzle:PlayVideoBtnAnimation(...)
|
||
|
local gotCompleteRewardState = XDataCenter.FubenActivityPuzzleManager.CheckCompleteRewardIsGot(...)
|
||
|
local isGotCompleteReward = gotCompleteRewardState == XFubenActivityPuzzleConfigs.CompleteRewardState.Rewarded
|
||
|
if isGotCompleteReward then self:PlayAnimation("PlayVideoBtnGroupEnable") end
|
||
|
end
|
||
|
|
||
|
function XUiFubenActivityPuzzle:RefreshLeftPanelByPuzzleType(puzzleType, puzzleId)
|
||
|
self.PanelReward:SetActiveEx(puzzleType == XFubenActivityPuzzleConfigs.PuzzleType.Define)
|
||
|
self.PanelPasswordReward:SetActiveEx(puzzleType == XFubenActivityPuzzleConfigs.PuzzleType.Decryption)
|
||
|
|
||
|
if puzzleType == XFubenActivityPuzzleConfigs.PuzzleType.Define then
|
||
|
self.PanelReward:RefreshPanel(puzzleId)
|
||
|
elseif puzzleType == XFubenActivityPuzzleConfigs.PuzzleType.Decryption then
|
||
|
self.PanelPasswordReward:RefreshPanel(puzzleId)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiFubenActivityPuzzle:CheckHelpHitFace()
|
||
|
local helpId = XDataCenter.FubenActivityPuzzleManager.GetActivityInfo().HelpId
|
||
|
local helpTemplate = XHelpCourseConfig.GetHelpCourseTemplateById(helpId)
|
||
|
local key = XFubenActivityPuzzleConfigs.HELP_HIT_FACE_KEY..helpId..XPlayer.Id
|
||
|
local hitFaceData = XSaveTool.GetData(key)
|
||
|
if not hitFaceData or hitFaceData == XFubenActivityPuzzleConfigs.HelpHitFaceState.UnHit then
|
||
|
XUiManager.ShowHelpTip(helpTemplate.Function)
|
||
|
XSaveTool.SaveData(key, XFubenActivityPuzzleConfigs.HelpHitFaceState.Hited)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiFubenActivityPuzzle:StartActivityTimer()
|
||
|
local timeId = XDataCenter.FubenActivityPuzzleManager.GetActivityInfo().TimeId
|
||
|
local startTime, endTime = XFunctionManager.GetTimeByTimeId(timeId)
|
||
|
local nowTime = XTime.GetServerNowTimestamp()
|
||
|
self.TxtDay.text = XUiHelper.GetTime(endTime - nowTime, XUiHelper.TimeFormatType.ACTIVITY)
|
||
|
if nowTime < startTime then
|
||
|
XUiManager.TipText("DragPuzzleActivityNotOpen")
|
||
|
self:Close()
|
||
|
elseif nowTime > endTime then
|
||
|
XUiManager.TipText("DragPuzzleActivityEnd")
|
||
|
self:Close()
|
||
|
else
|
||
|
self.ActivityTimer = XScheduleManager.ScheduleForever(function()
|
||
|
local time = XTime.GetServerNowTimestamp()
|
||
|
if time > endTime then
|
||
|
XLuaUiManager.RunMain()
|
||
|
XUiManager.TipError(CS.XTextManager.GetText("DragPuzzleActivityEnd"))
|
||
|
self:StopActivityTimer()
|
||
|
return
|
||
|
end
|
||
|
self.TxtDay.text = XUiHelper.GetTime(endTime - time, XUiHelper.TimeFormatType.ACTIVITY)
|
||
|
end, XScheduleManager.SECOND, 0)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiFubenActivityPuzzle:StopActivityTimer()
|
||
|
if self.ActivityTimer then
|
||
|
XScheduleManager.UnSchedule(self.ActivityTimer)
|
||
|
self.ActivityTimer = nil
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiFubenActivityPuzzle:RemoveRedPointEvent()
|
||
|
for _, redPointId in ipairs(self.RedPointIdArr) do
|
||
|
XRedPointManager.RemoveRedPointEvent(redPointId)
|
||
|
end
|
||
|
end
|