PGRData/Script/matrix/xui/xuifubenunionkill/XUiUnionKillMain.lua

507 lines
19 KiB
Lua
Raw Normal View History

local XUiUnionKillMain = XLuaUiManager.Register(XLuaUi, "UiUnionKillMain")
function XUiUnionKillMain:OnAwake()
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin)
self.BtnBack.CallBack = function()
self:OnBtnBackClick()
end
self.BtnMainUi.CallBack = function() self:OnBtnMainUiClick() end
self.BtnMatch.CallBack = function() self:OnBtnMatchClick() end
self.BtnCancelMatch.CallBack = function() self:OnBtnCancelMatchClick() end
self.BtnCreateRoom.CallBack = function() self:OnBtnCreateRoomClick() end
self.BtnThumbsUp.CallBack = function() self:OnBtnThumbsUpClick() end
self.BtnKillNumber.CallBack = function() self:OnBtnKillNumberClick() end
self.BtnBlackSquare.CallBack = function() self:OnBtnBlackSquareClick() end
self.BtnReward.CallBack = function() self:OnBtnRewardClick() end
self.BtnHelp.CallBack = function() self:OnBtnHelpClick() end
self:BindHelpBtnOnly(self.BtnHelp)
self.RewardCommon = {}
self:AddEventListeners()
end
function XUiUnionKillMain:OnDestroy()
self:StopActivityCountDown()
self:RemoveEventListeners()
end
function XUiUnionKillMain:AddEventListeners()
XEventManager.AddEventListener(XEventId.EVENT_UNIONKILL_BOSSCOUNTCHANGE, self.SyncBossCountChanged, self)
XEventManager.AddEventListener(XEventId.EVENT_UNIONKILLROOM_MATCHRESULT, self.OnMatchResult, self)
XEventManager.AddEventListener(XEventId.EVENT_UNIONKILL_ACTIVITYINFO, self.OnActivityInfoChanged, self)
end
function XUiUnionKillMain:RemoveEventListeners()
XEventManager.RemoveEventListener(XEventId.EVENT_UNIONKILL_BOSSCOUNTCHANGE, self.SyncBossCountChanged, self)
XEventManager.RemoveEventListener(XEventId.EVENT_UNIONKILLROOM_MATCHRESULT, self.OnMatchResult, self)
XEventManager.RemoveEventListener(XEventId.EVENT_UNIONKILL_ACTIVITYINFO, self.OnActivityInfoChanged, self)
end
-- 击杀boss次数变化
function XUiUnionKillMain:SyncBossCountChanged()
if not self.UnionKillInfo then return end
local sectionId = self.UnionKillInfo.CurSectionId
local curSectionInfo = XDataCenter.FubenUnionKillManager.GetSectionInfoById(sectionId)
local curSectionTemplate = XFubenUnionKillConfigs.GetUnionSectionById(sectionId)
if not curSectionTemplate then return end
self.TxtCondition.gameObject:SetActiveEx(false)
self.BtnReward.gameObject:SetActiveEx(false)
self.TxtTaskProgress.gameObject:SetActiveEx(false)
local syncCount = XDataCenter.FubenUnionKillManager.GetBossKillCount(sectionId)
if not curSectionInfo then
self.TxtTaskProgress.text = CS.XTextManager.GetText("UnionResetText", syncCount, curSectionTemplate.KillBossCount)
-- 可领取
if syncCount >= curSectionTemplate.KillBossCount then
self.BtnReward:ShowReddot(true)
self.BtnReward:ShowTag(false)
self.BtnReward.gameObject:SetActiveEx(true)
else
-- 不可领取
self.BtnReward:ShowReddot(false)
self.BtnReward:ShowTag(true)
self.TxtTaskProgress.gameObject:SetActiveEx(true)
end
else
local killBossCount = curSectionInfo.KillBoss or 0
syncCount = killBossCount > syncCount and killBossCount or syncCount
self.TxtTaskProgress.text = CS.XTextManager.GetText("UnionResetText", syncCount, curSectionTemplate.KillBossCount)
-- 未领取
if curSectionInfo.RewardStatus == 0 then
-- 可领取
if syncCount >= curSectionTemplate.KillBossCount then
self.BtnReward:ShowReddot(true)
self.BtnReward.gameObject:SetActiveEx(true)
else
-- 不可领取
self.BtnReward:ShowReddot(false)
self.TxtTaskProgress.gameObject:SetActiveEx(true)
end
self.BtnReward:ShowTag(false)
else
-- 已领取
self.BtnReward:ShowReddot(false)
self.BtnReward:ShowTag(true)
self.TxtCondition.gameObject:SetActiveEx(true)
end
end
end
function XUiUnionKillMain:OnStart()
self.UnionKillInfo = XDataCenter.FubenUnionKillManager.GetUnionKillInfo()
if self.UnionKillInfo == nil then return end
if self.UnionKillInfo.Id == nil or self.UnionKillInfo.Id == 0 then return end
self.CurrentUnionActivityConfig = XFubenUnionKillConfigs.GetUnionActivityConfigById(self.UnionKillInfo.Id)
self.CurrentUnionActivityTemplate = XFubenUnionKillConfigs.GetUnionActivityById(self.UnionKillInfo.Id)
self:InitUnionSectionView()
self:SetMainInfo()
self:SyncBossCountChanged()
local firstShowKey = string.format("%s_%s_%d", XFubenUnionKillConfigs.FirstShowHelp, tostring(XPlayer.Id), self.UnionKillInfo.Id)
self:PlayAnimation("AnimStartEnable", function()
XLuaUiManager.SetMask(false)
-- 首次弹帮助说明
local cacheValue = XDataCenter.FubenUnionKillManager.GetUnionKillStringPrefs(firstShowKey, "0")
if cacheValue == "0" then
XUiManager.ShowHelpTip("UnionKillMainHelp")
XDataCenter.FubenUnionKillManager.SaveUnionKillStringPrefs(firstShowKey, "1")
end
end, function()
XLuaUiManager.SetMask(true)
end)
XRedPointManager.AddRedPointEvent(self.RedTask, self.RefreshTaskLimited, self, { XRedPointConditions.Types.CONDITION_TASK_LIMIT_TYPE }, self.CurrentUnionActivityTemplate.TaskLimitId)
end
function XUiUnionKillMain:RefreshTaskLimited(count)
self.RedTask.gameObject:SetActiveEx(count >= 0)
end
function XUiUnionKillMain:OnEnable()
self:CheckActivityEnd(false)
end
function XUiUnionKillMain:SetMainInfo()
self.TxtTitle.text = self.CurrentUnionActivityConfig.Name
local weatherConfig = XFubenUnionKillConfigs.GetUnionWeatherConfigById(self.UnionKillInfo.WeatherId)
self.TxtShuXing.text = string.format("(%s%s)", weatherConfig.Name, weatherConfig.Description)
self:StartActivityCountDown()
end
-- 启动活动结束倒计时
function XUiUnionKillMain:StartActivityCountDown()
self:StopActivityCountDown()
local _, endTime = XFubenUnionKillConfigs.GetUnionActivityTimes(self.UnionKillInfo.Id)
local _, tmpSectionEndTime = XFubenUnionKillConfigs.GetUnionSectionTimes(self.UnionKillInfo.CurSectionId)
local now = XTime.GetServerNowTimestamp()
if not endTime then return end
self.TxtDay.text = XUiHelper.GetTime(endTime - now, XUiHelper.TimeFormatType.ACTIVITY)
local invalidTime = CS.XTextManager.GetText("UnionMainOverdue")
if now <= tmpSectionEndTime then
self.TxtSectionDay.text = CS.XTextManager.GetText("UnionRewardResetTime", XUiHelper.GetTime(tmpSectionEndTime - now, XUiHelper.TimeFormatType.ACTIVITY))
else
self.TxtSectionDay.text = CS.XTextManager.GetText("UnionRewardResetTime", invalidTime)
end
self.UnionKillTimer =
XScheduleManager.ScheduleForever(function()
now = XTime.GetServerNowTimestamp()
if now > endTime then
self:StopActivityCountDown()
self:CheckActivityEnd(true)
return
end
self.TxtDay.text = XUiHelper.GetTime(endTime - now, XUiHelper.TimeFormatType.ACTIVITY)
if now <= tmpSectionEndTime then
self.TxtSectionDay.text = CS.XTextManager.GetText("UnionRewardResetTime", XUiHelper.GetTime(tmpSectionEndTime - now, XUiHelper.TimeFormatType.ACTIVITY))
else
self.TxtSectionDay.text = CS.XTextManager.GetText("UnionRewardResetTime", invalidTime)
end
if self.IsMatching and self.BeginMatchingTime then
local tmpNow = XTime.GetServerNowTimestamp()
self.TxtMatchTime.text = XUiHelper.GetTime(tmpNow - self.BeginMatchingTime)
end
end, XScheduleManager.SECOND, 0)
end
-- 关闭活动结束倒计时
function XUiUnionKillMain:StopActivityCountDown()
if self.UnionKillTimer ~= nil then
XScheduleManager.UnSchedule(self.UnionKillTimer)
self.UnionKillTimer = nil
end
end
function XUiUnionKillMain:OnBtnHelpClick()
if XDataCenter.FubenUnionKillRoomManager.IsMatching() then
return
end
XUiManager.ShowHelpTip("UnionKillMainHelp")
end
-- 活动任务
function XUiUnionKillMain:OnBtnBlackSquareClick()
if XDataCenter.FubenUnionKillRoomManager.IsMatching() then
return
end
XLuaUiManager.Open("UiUnionKillTask")
end
-- 奖励
function XUiUnionKillMain:OnBtnRewardClick()
if XDataCenter.FubenUnionKillRoomManager.IsMatching() then
return
end
-- 获得奖励逻辑
if not self.UnionKillInfo then return end
local sectionId = self.UnionKillInfo.CurSectionId
local curSectionInfo = XDataCenter.FubenUnionKillManager.GetSectionInfoById(sectionId)
local curSectionTemplate = XFubenUnionKillConfigs.GetUnionSectionById(sectionId)
if not curSectionInfo then return end
if not curSectionTemplate then return end
if curSectionInfo.RewardStatus == 1 then
XUiManager.TipMsg(CS.XTextManager.GetText("UnionMainRewardHasClick"))
return
end
local syncCount = XDataCenter.FubenUnionKillManager.GetBossKillCount(sectionId)
local killBossCount = curSectionInfo and curSectionInfo.KillBoss or 0
syncCount = killBossCount > syncCount and killBossCount or syncCount
if syncCount < curSectionTemplate.KillBossCount then
XUiManager.TipMsg(CS.XTextManager.GetText("UnionMainKillLimited"))
return
end
XDataCenter.FubenUnionKillManager.GetUnionBoxReward(sectionId, function()
curSectionInfo.RewardStatus = 1
self:SyncBossCountChanged()
end)
end
-- 击杀排行
function XUiUnionKillMain:OnBtnKillNumberClick()
if not self.UnionKillInfo then return end
if XDataCenter.FubenUnionKillRoomManager.IsMatching() then
return
end
local sectionId = self.UnionKillInfo.CurSectionId
local sectionInfo = XDataCenter.FubenUnionKillManager.GetSectionInfoById(sectionId)
if not sectionInfo then return end
local rankLevel = sectionInfo.RankLevel
local rankLevelInfos = XDataCenter.FubenUnionKillManager.GetKillRankInfosByLevel(rankLevel)
local now = XTime.GetServerNowTimestamp()
if not rankLevelInfos or now - rankLevelInfos.LastModify > XFubenUnionKillConfigs.RankRequestInterval then
XDataCenter.FubenUnionKillManager.GetUnionKillRankData(sectionInfo.RankLevel, function()
XLuaUiManager.Open("UiUnionKillRank", XFubenUnionKillConfigs.UnionRankType.KillNumber)
end)
else
XLuaUiManager.Open("UiUnionKillRank", XFubenUnionKillConfigs.UnionRankType.KillNumber)
end
end
-- 点赞排行
function XUiUnionKillMain:OnBtnThumbsUpClick()
if XDataCenter.FubenUnionKillRoomManager.IsMatching() then
return
end
local rankPraiseInfos = XDataCenter.FubenUnionKillManager.GetPraiseRankInfos()
local now = XTime.GetServerNowTimestamp()
if not rankPraiseInfos or now - rankPraiseInfos.LastModify > XFubenUnionKillConfigs.RankRequestInterval then
XDataCenter.FubenUnionKillManager.GetPraiseRankData(function()
XLuaUiManager.Open("UiUnionKillRank", XFubenUnionKillConfigs.UnionRankType.ThumbsUp)
end)
else
XLuaUiManager.Open("UiUnionKillRank", XFubenUnionKillConfigs.UnionRankType.ThumbsUp)
end
end
-- 创建房间
function XUiUnionKillMain:OnBtnCreateRoomClick()
if XDataCenter.FubenUnionKillRoomManager.IsMatching() then
XUiManager.TipMsg(CS.XTextManager.GetText("UnionInMatching"))
return
end
XDataCenter.FubenUnionKillRoomManager.CreateUnionRoom(true, function()
XLuaUiManager.Open("UiUnionKillRoom")
end)
end
-- 匹配
function XUiUnionKillMain:OnBtnMatchClick()
XDataCenter.FubenUnionKillRoomManager.MatchUnionRoom(function()
self.IsMatching = true
self.BeginMatchingTime = XTime.GetServerNowTimestamp()
self.TxtMatchTime.text = XUiHelper.GetTime(0)
self.PiPeiGroup.gameObject:SetActiveEx(true)
self.BtnMatch.gameObject:SetActiveEx(false)
self.BtnMatching.gameObject:SetActiveEx(true)
end)
end
-- 取消匹配
function XUiUnionKillMain:OnBtnCancelMatchClick()
XDataCenter.FubenUnionKillRoomManager.CancelUnionMatch(function()
self.IsMatching = false
self.PiPeiGroup.gameObject:SetActiveEx(false)
self.BtnMatch.gameObject:SetActiveEx(true)
self.BtnMatching.gameObject:SetActiveEx(false)
end)
end
-- 匹配到结果
function XUiUnionKillMain:OnMatchResult()
self.IsMatching = false
self.PiPeiGroup.gameObject:SetActiveEx(false)
self.BtnMatch.gameObject:SetActiveEx(true)
self.BtnMatching.gameObject:SetActiveEx(false)
end
-- 天气、章节变化
function XUiUnionKillMain:OnActivityInfoChanged()
if not self.UnionKillInfo then return end
if not self.CurrentUnionActivityTemplate then return end
-- 天气
local weatherConfig = XFubenUnionKillConfigs.GetUnionWeatherConfigById(self.UnionKillInfo.WeatherId)
self.TxtWeather.text = weatherConfig.Name
self.TxtShuXing.text = weatherConfig.Description
if weatherConfig.Icon ~= "" then
self:SetUiSprite(self.ImgWeatherIcon, weatherConfig.Icon)
end
-- 章节切换
local sectionId = self.UnionKillInfo.CurSectionId
local selectIndex = self.CurrentSelectedSection
local allSectionIds = self.CurrentUnionActivityTemplate.SectionId
for index, id in pairs(allSectionIds) do
if id == sectionId then
selectIndex = index
break
end
end
self:OnSectionSelected(selectIndex)
-- boss条件
self:SyncBossCountChanged()
end
-- 右切
function XUiUnionKillMain:OnBtnBgQiehuanRightClcik()
end
-- 左切
function XUiUnionKillMain:OnBtnBgQiehuanLeftClick()
end
-- 初始化切换点
function XUiUnionKillMain:InitUnionSectionView()
if not self.CurrentUnionActivityTemplate then return end
if not self.UnionKillInfo then return end
local sectionId = self.UnionKillInfo.CurSectionId
-- Switch
self.CurrentSelectedSection = 1
local allSectionIds = self.CurrentUnionActivityTemplate.SectionId
for i = 1, #allSectionIds do
if allSectionIds[i] == sectionId then
self.CurrentSelectedSection = i
end
end
self:OnSectionSelected(self.CurrentSelectedSection)
end
function XUiUnionKillMain:OnSectionSelected(index)
self.CurrentSelectedSection = index
self:UpdateSectionInfo(self.CurrentSelectedSection)
end
-- 更新当前选中的章节
function XUiUnionKillMain:UpdateSectionInfo(index)
if not self.CurrentUnionActivityTemplate then return end
if not self.UnionKillInfo then return end
local selectSectoinId = self.CurrentUnionActivityTemplate.SectionId[index]
local selectSectionTemplate = XFubenUnionKillConfigs.GetUnionSectionById(selectSectoinId)
if not selectSectionTemplate or not selectSectoinId or selectSectoinId <= 0 then return end
local sectionConfig = XFubenUnionKillConfigs.GetUnionSectionConfigById(selectSectoinId)
self:SwitchBackground(sectionConfig)
-- 过期、时间未到
local sectionId = self.UnionKillInfo.CurSectionId
local curOpenIndex = 1
for i = 1, #self.CurrentUnionActivityTemplate.SectionId do
if self.CurrentUnionActivityTemplate.SectionId[i] == sectionId then
curOpenIndex = i
break
end
end
self.PassPanel.gameObject:SetActiveEx(curOpenIndex ~= index)
self.TxtWeiKaiQi.gameObject:SetActiveEx(curOpenIndex < index)
self.TxtYiTongGuo.gameObject:SetActiveEx(curOpenIndex > index)
if curOpenIndex < index then
local now = XTime.GetServerNowTimestamp()
local beginTime = XFubenUnionKillConfigs.GetUnionSectionTimes(selectSectoinId)
self.TxtWeiKaiQi.text = CS.XTextManager.GetText("UnionSectionIsComing", XUiHelper.GetTime(beginTime - now, XUiHelper.TimeFormatType.ACTIVITY))
end
-- 隐藏多余数据
local isOpen = curOpenIndex == index
self.RewardGroup.gameObject:SetActiveEx(isOpen)
self.BtnBlackSquare.gameObject:SetActiveEx(isOpen)
self.BtnBottomRight.gameObject:SetActiveEx(isOpen)
self.WeatherGroup.gameObject:SetActiveEx(isOpen)
self.BtnRight.gameObject:SetActiveEx(isOpen)
-- 显示奖励
local rewards = XRewardManager.GetRewardList(selectSectionTemplate.BoxRewardId)
for i = 1, #rewards do
if not self.RewardCommon[i] then
local ui = CS.UnityEngine.Object.Instantiate(self.GridCommonPopUp)
ui.transform:SetParent(self.PanelRewrds, false)
self.RewardCommon[i] = XUiGridCommon.New(self, ui)
end
self.RewardCommon[i]:Refresh(rewards[i])
end
for i = #rewards + 1, #self.RewardCommon do
self.RewardCommon[i].GameObject:SetActiveEx(false)
end
end
function XUiUnionKillMain:CheckActivityEnd(isCheckPanel)
if not self.UnionKillInfo or self.UnionKillInfo.Id <= 0 then
XLuaUiManager.RunMain()
XUiManager.TipMsg(CS.XTextManager.GetText("UnionKillMainNotInActivity"))
-- 退出
return
end
if not XFubenUnionKillConfigs.UnionKillInActivity(self.UnionKillInfo.Id) and not CS.XFight.IsRunning then
if isCheckPanel and XLuaUiManager.IsUiShow("UiUnionKillMain") then
-- 退出
XLuaUiManager.RunMain()
XUiManager.TipMsg(CS.XTextManager.GetText("UnionKillMainNotInActivity"))
return
end
-- 退出
XLuaUiManager.RunMain()
XUiManager.TipMsg(CS.XTextManager.GetText("UnionKillMainNotInActivity"))
end
end
function XUiUnionKillMain:SwitchBackground(sectionConfig)
if not sectionConfig then return end
for i = 1, #sectionConfig.SectionIcon do
self[string.format("RImgBg%d", i)]:SetRawImage(sectionConfig.SectionIcon[i])
end
end
function XUiUnionKillMain:OnBtnBackClick()
if XDataCenter.FubenUnionKillRoomManager.IsMatching() then
local title = CS.XTextManager.GetText("TipTitle")
local cancelMatchMsg = CS.XTextManager.GetText("OnlineInstanceCancelMatch")
XUiManager.DialogTip(title, cancelMatchMsg, XUiManager.DialogType.Normal, nil, function()
XDataCenter.FubenUnionKillRoomManager.CancelUnionMatch(function()
self.IsMatching = false
self.PiPeiGroup.gameObject:SetActiveEx(false)
self.BtnMatch.gameObject:SetActiveEx(true)
self.BtnMatching.gameObject:SetActiveEx(false)
self:Close()
end)
end)
else
self:Close()
end
end
function XUiUnionKillMain:OnBtnMainUiClick()
if XDataCenter.FubenUnionKillRoomManager.IsMatching() then
local title = CS.XTextManager.GetText("TipTitle")
local cancelMatchMsg = CS.XTextManager.GetText("OnlineInstanceCancelMatch")
XUiManager.DialogTip(title, cancelMatchMsg, XUiManager.DialogType.Normal, nil, function()
XDataCenter.FubenUnionKillRoomManager.CancelUnionMatch(function()
self.IsMatching = false
self.PiPeiGroup.gameObject:SetActiveEx(false)
self.BtnMatch.gameObject:SetActiveEx(true)
self.BtnMatching.gameObject:SetActiveEx(false)
XLuaUiManager.RunMain()
end)
end)
else
XLuaUiManager.RunMain()
end
end