miduo_client/Assets/ManagedResources/~Lua/Modules/SevenDayCarnival/SevenDayCarnivalPanel.lua

499 lines
18 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

--[[
* @ClassName SevenDayCarnivalPanel
* @Description 开服七天狂欢
* @Date 2019/7/30 20:42
* @Author MagicianJoker, fengliudianshao@outlook.com
* @Copyright Copyright (c) 2019, MagicianJoker
--]]
--去看SevenDayCarnivalPanelV2吧应该不用了
local SevenDayCarnivalHalfPricePage = require("Modules/SevenDayCarnival/SevenDayCarnivalHalfPricePage")
local SevenDayCarnivalTaskItem = require("Modules/SevenDayCarnival/SevenDayCarnivalTaskItem")
---@class SevenDayCarnivalPanel
local SevenDayCarnivalPanel = quick_class("SevenDayCarnivalPanel", BasePanel)
local kDayNumber, kMaxTaskCount = 6, 20
local kScoreTaskType = 38
local TypeActDifIcon = {
[10] = { bgIcon = "r_qrkh_BG", title = "r_qrkh_kfkh" },
[25] = { bgIcon = "r_qrkh_BG_2", title = "r_qrkh_jlqd" }
}
local dayTabColor = {
[1] = Color(106 / 255, 79 / 255, 62 / 255, 1),
[2] = Color(250 / 255, 245 / 255, 215 / 255, 1)
}
local groupTabColor = {
[1] = Color(156 / 255, 156 / 255, 156 / 255, 1),
[2] = Color(252 / 255, 250 / 255, 237 / 255, 1)
}
function SevenDayCarnivalPanel:InitComponent()
self.spLoader = SpriteLoader.New()
self.backBtn = Util.GetGameObject(self.transform, "bg/btnBack")
--换期部分
self.bg = Util.GetGameObject(self.transform, "bg"):GetComponent("Image")
self.title = Util.GetGameObject(self.transform, "bg/title/Image"):GetComponent("Image")
self.dayTabs = {}
for i = 1, kDayNumber do
self.dayTabs[i] = Util.GetGameObject(self.transform, "bg/daysTabBg/tabsGroup/day_" .. i)
end
self.selectDayTab = -1
self.actRemainTime = Util.GetGameObject(self.transform, "bg/actRemainTime"):GetComponent("Text")
self.finalTargetProgress = Util.GetGameObject(self.transform, "bg/finalTarget/progressbar/progress"):GetComponent("Image")
self.finalTargetValue = Util.GetGameObject(self.transform, "bg/finalTarget/progressbar/value"):GetComponent("Text")
self.rewardBoxBtn = Util.GetGameObject(self.transform, "bg/finalTarget/rewardBoxBtn")
self.rewardBoxRedPoint = Util.GetGameObject(self.rewardBoxBtn, "redPoint")
self.rewardBoxEffect = Util.GetGameObject(self.rewardBoxBtn, "effect_box")
--taskList
self.taskPart = Util.GetGameObject(self.transform, "bg/taskList")
self.taskList = {}
self.taskContent = Util.GetGameObject(self.taskPart, "viewPort/content"):GetComponent("RectTransform")
self.taskItemPro = Util.GetGameObject(self.taskContent.transform, "itemPro")
self.taskItemPro:SetActive(false)
for i = 1, kMaxTaskCount do
self.taskList[i] = SevenDayCarnivalTaskItem.create(self, self.taskItemPro, self.taskContent.transform)
end
self.sorting=0
--halfPage
self.halfPricePage = SevenDayCarnivalHalfPricePage.new(self, Util.GetGameObject(self.transform, "bg/halfPriceBuy"))
self.tabsList = {}
self.tabsContent = Util.GetGameObject(self.transform, "bg/bottomTabs/content")
self.tabPro = Util.GetGameObject(self.tabsContent, "tabPro")
self.tabPro:SetActive(false)
self.tabIndex = -1
--- 生成页签
self:CreateTab()
self.lastIndex = 1
self.UpView = SubUIManager.Open(SubUIConfig.UpView, self.transform, { showType = UpViewOpenType.ShowLeft })
end
function SevenDayCarnivalPanel:BindEvent()
Util.AddClick(self.backBtn, function()
self:ClosePanel()
end)
Util.AddClick(self.rewardBoxBtn, function()
self:OnRewardBoxBtnClicked()
end)
for idx, dayTab in ipairs(self.dayTabs) do
Util.AddClick(dayTab, function()
self:OnDayTabClicked(idx)
end)
end
for k, v in pairs(self.tabsList) do
Util.AddClick(v.tabItem, function()
self:ShowInfoByTab(v.type, v.tabItem)
end)
end
end
function SevenDayCarnivalPanel:AddListener()
Game.GlobalEvent:AddEvent(GameEvent.MissionDaily.OnMissionDailyChanged, self.ChangeTaskList, self)
Game.GlobalEvent:AddEvent(GameEvent.Activity.OnActivityProgressStateChange, self.SetFinalTarget, self)
end
function SevenDayCarnivalPanel:RemoveListener()
Game.GlobalEvent:RemoveEvent(GameEvent.MissionDaily.OnMissionDailyChanged, self.ChangeTaskList, self)
Game.GlobalEvent:RemoveEvent(GameEvent.Activity.OnActivityProgressStateChange, self.SetFinalTarget, self)
end
function SevenDayCarnivalPanel:OnOpen()
self:SatisfyActivity()
self.UpView:OnOpen({ showType = UpViewOpenType.ShowLeft, panelType = PanelType.Main })
--local currentDay = SevenDayCarnivalManager.GetCurrentDayNumber()
--if currentDay >= kDayNumber then
-- self.selectDayTab = kDayNumber
--else
-- self.selectDayTab = currentDay
--end
self.selectDayTab = SevenDayCarnivalManager.GetPriorityDayNumber()
self:SetFinalTarget()
self.enableReceive = true
self.hadRequestState = false
end
function SevenDayCarnivalPanel:OnShow()
self:OnDayTabChanged()
self:ShowInfoByTab(1)
self:SetRemainTimes()
self:RefreshRedPoint()
self:ClickBottomTab(self:GetPriorityGroup())
-- 刷新天数文字显示
self:RefreshDayShow()
self:RefreshGroupTask()
end
function SevenDayCarnivalPanel:OnSortingOrderChange()
for i = 1, #self.taskList do
self.taskList[i]:OnSortingOrderChange(self.sortingOrder)
end
self.halfPricePage:OnSortingOrderChange(self.sortingOrder)
Util.AddParticleSortLayer(Util.GetGameObject(self.transform, "bg/effect"), self.sortingOrder-self.sorting)
Util.AddParticleSortLayer(self.rewardBoxEffect, self.sortingOrder-self.sorting)
self.sorting=self.sortingOrder
end
function SevenDayCarnivalPanel:OnClose()
if self.timer then
self.timer:Stop()
self.timer = nil
end
self.lastIndex = 1
end
function SevenDayCarnivalPanel:OnDestroy()
self.spLoader:Destroy()
SubUIManager.Close(self.UpView)
self.tabsList = {}
end
-- 刷新天数页签天数显示
function SevenDayCarnivalPanel:RefreshDayShow()
local currentDay = SevenDayCarnivalManager.GetCurrentDayNumber()
for day, tab in ipairs(self.dayTabs) do
local txt = Util.GetGameObject(tab, "Text"):GetComponent("Text")
if day <= currentDay then
txt.text = string.format(Language[11874], day)
elseif day == currentDay + 1 then
txt.text = Language[11875]
else
txt.text = Language[11876]
end
end
end
function SevenDayCarnivalPanel:OnDayTabClicked(index)
local currentDay = SevenDayCarnivalManager.GetCurrentDayNumber()
if index > currentDay + 1 then
PopupTipPanel.ShowTip(Language[11877])
return
end
if index == self.selectDayTab then
return
end
self.selectDayTab = index
self:OnDayTabChanged()
self:ClickBottomTab(self.lastIndex)
end
---生成下面的页签
function SevenDayCarnivalPanel:CreateTab()
local tabItemTarget = newObjToParent(self.tabPro, self.tabsContent)
local tabItem = newObjToParent(self.tabPro, self.tabsContent)
table.insert(self.tabsList, { tabItem = tabItemTarget, groupTask = 1, type = 1, })
table.insert(self.tabsList, { tabItem = tabItem, type = 2 })
end
function SevenDayCarnivalPanel:OnDayTabChanged()
--- 这是为啥,为啥每次切换天数你都要删除
-- table.walk(self.tabsList, function(tabInfo)
-- destroy(tabInfo.tabItem.gameObject)
-- end)
-- self.tabsList = {}
--- 设置天数的选中状态
for idx, dayTabItem in ipairs(self.dayTabs) do
Util.GetGameObject(dayTabItem, "selected"):SetActive(idx == self.selectDayTab)
Util.GetGameObject(dayTabItem, "Text"):GetComponent("Text").color = idx == self.selectDayTab and dayTabColor[2] or dayTabColor[1]
end
local activityId = ActivityGiftManager.IsActivityTypeOpen(ActivityTypeDef.SevenDayCarnival)
local sevenDaysConfigs = ConfigManager.GetAllConfigsDataByDoubleKey(ConfigName.SevenDaysActivity, "BelongDay", self.selectDayTab, "ActivityId", activityId)
local name
local id
for _, dayInfo in ipairs(sevenDaysConfigs) do
name = GetLanguageStrById(dayInfo.GroupShow)
id = dayInfo.Id
end
-- 更新页签ID以及更新显示
for k, v in pairs(self.tabsList) do
if v.type == 1 then
v.groupTask = id
Util.GetGameObject(v.tabItem, "name"):GetComponent("Text").text = name
else
Util.GetGameObject(v.tabItem, "name"):GetComponent("Text").text = Language[11878]
end
end
self:RefreshGroupTask()
self:ShowInfoByTab(self.lastIndex, self.tabsList[self.lastIndex].tabItem)
-- for _, dayInfo in ipairs(sevenDaysConfigs) do
-- local tabItem = newObjToParent(self.tabPro, self.tabsContent)
-- Util.GetGameObject(tabItem, "name"):GetComponent("Text").text = dayInfo.GroupShow
-- Util.AddClick(tabItem, function()
-- self:SetBottomTabSelect(tabItem)
-- self:SetTaskPartShow(true)
-- self:OnBottomTabClicked(dayInfo.Id)
-- end)
-- table.insert(self.tabsList, { tabItem = tabItem, groupTask = dayInfo.Id, type = 1, })
-- end
-- local tabItem = newObjToParent(self.tabPro, self.tabsContent)
-- Util.GetGameObject(tabItem, "name"):GetComponent("Text").text = "半价抢购"
-- Util.AddClick(tabItem, function()
-- self:SetBottomTabSelect(tabItem)
-- self:SetTaskPartShow(false)
-- -- local activityId = ActivityGiftManager.IsActivityTypeOpen(ActivityTypeDef.SevenDayCarnival)
-- PlayerPrefs.SetInt(PlayerManager.uid .. "_SevenDay" .. "_" .. activityId .. "_" .. self.selectDayTab, 1)
-- Util.GetGameObject(tabItem, "redPoint"):SetActive(false)
-- self:RefreshDayTabRedPoint(self.selectDayTab)
-- CheckRedPointStatus(RedPointType.SevenDayCarnival)
-- end)
-- table.insert(self.tabsList, { tabItem = tabItem, type = 2 })
-- self:RefreshGroupTask()
end
-- 根据选择的页签显示数据 1-->正常任务 2-->半价购买
function SevenDayCarnivalPanel:ShowInfoByTab(index, item)
self.lastIndex = index
local activityId = ActivityGiftManager.IsActivityTypeOpen(ActivityTypeDef.SevenDayCarnival)
local tabItem = item or self.tabsList[1].tabItem
if index == 1 then
self:SetBottomTabSelect(tabItem)
self:SetTaskPartShow(true)
self:OnBottomTabClicked(self.tabsList[index].groupTask)
else
self:SetBottomTabSelect(tabItem)
self:SetTaskPartShow(false)
PlayerPrefs.SetInt(PlayerManager.uid .. "_SevenDay" .. "_" .. activityId .. "_" .. self.selectDayTab, 1)
Util.GetGameObject(tabItem, "redPoint"):SetActive(false)
self:RefreshDayTabRedPoint(self.selectDayTab)
CheckRedPointStatus(RedPointType.SevenDayCarnival)
end
end
function SevenDayCarnivalPanel:ClickBottomTab(index)
if index == self.lastIndex then return end
if index == 1 then
self:SetTaskPartShow(true)
local tabInfo = self.tabsList[index]
self:SetBottomTabSelect(tabInfo.tabItem)
self.tabIndex = tabInfo.groupTask
self:OnBottomTabChanged()
else
local tabItemInfo = self.tabsList[#self.tabsList]
self:SetBottomTabSelect(tabItemInfo.tabItem)
self:SetTaskPartShow(false)
local activityId = ActivityGiftManager.IsActivityTypeOpen(ActivityTypeDef.SevenDayCarnival)
PlayerPrefs.SetInt(PlayerManager.uid .. "_SevenDay_" .. activityId .. "_" .. self.selectDayTab, 1)
Util.GetGameObject(tabItemInfo.tabItem, "redPoint"):SetActive(false)
self:RefreshDayTabRedPoint(self.selectDayTab)
CheckRedPointStatus(RedPointType.SevenDayCarnival)
end
end
function SevenDayCarnivalPanel:SetBottomTabSelect(tabItem)
for _, groupTabInfo in ipairs(self.tabsList) do
Util.GetGameObject(groupTabInfo.tabItem, "selected"):SetActive(tabItem == groupTabInfo.tabItem)
Util.GetGameObject(groupTabInfo.tabItem, "name"):GetComponent("Text").color = tabItem == groupTabInfo.tabItem and groupTabColor[2] or groupTabColor[1]
end
end
function SevenDayCarnivalPanel:OnBottomTabClicked(taskGroup)
if taskGroup == self.tabIndex then
return
end
self.tabIndex = taskGroup
self:OnBottomTabChanged()
end
function SevenDayCarnivalPanel:OnBottomTabChanged()
self:SetTaskPartShow(true)
table.walk(self.taskList, function(taskItem)
taskItem:SetVisible(false)
end)
local GroupTaskList = {}
self.serverTaskList = TaskManager.GetTypeTaskList(TaskTypeDef.SevenDayCarnival)
table.walk(self.serverTaskList, function(taskInfo)
local treasureConfig = ConfigManager.GetConfigData(ConfigName.TreasureTaskConfig, taskInfo.missionId)
if treasureConfig.DayNum == self.selectDayTab and treasureConfig.TaskGroup == self.tabIndex then
table.insert(GroupTaskList, { serverData = taskInfo, localData = treasureConfig })
end
end)
table.sort(GroupTaskList, function(a, b)
if a.serverData.state == b.serverData.state then
return a.serverData.missionId < b.serverData.missionId
else
return TaskStateRankDef[a.serverData.state] < TaskStateRankDef[b.serverData.state]
end
end)
local currentDay = SevenDayCarnivalManager.GetCurrentDayNumber()
for i, treasureInfo in ipairs(GroupTaskList) do
self.taskList[i]:Init(treasureInfo.localData,self.sortingOrder)
self.taskList[i]:SetValue(self.selectDayTab <= currentDay)
self.taskList[i]:SetVisible(true)
end
self.taskContent.anchoredPosition = Vector2(0, 0)
end
function SevenDayCarnivalPanel:SetTaskPartShow(flag)
self.taskPart:SetActive(flag)
if flag then
self.halfPricePage:OnHide()
else
self.halfPricePage:OnShow()
end
end
function SevenDayCarnivalPanel:SetFinalTarget()
local currentActivityId = ActivityGiftManager.IsActivityTypeOpen(ActivityTypeDef.SevenDayCarnival)
local treasureTaskConfig = ConfigManager.GetConfigDataByDoubleKey(ConfigName.TreasureTaskConfig,
"ActivityId", currentActivityId, "TaskType", kScoreTaskType)
local currentScore = SevenDayCarnivalManager.GetSevenDayScore()
self.finalTargetProgress.fillAmount = currentScore / treasureTaskConfig.TaskValue[2][1]
self.finalTargetValue.text = currentScore .. "/" .. treasureTaskConfig.TaskValue[2][1]
self.rewardBoxRedPoint:SetActive(SevenDayCarnivalManager.GetBoxRedPointStatus())
self.rewardBoxEffect:SetActive(SevenDayCarnivalManager.GetBoxRedPointStatus())
end
function SevenDayCarnivalPanel:OnRewardBoxBtnClicked()
if self.enableReceive then
UIManager.OpenPanel(UIName.SevenDayRewardPreviewPanel)
else
PopupTipPanel.ShowTip(Language[11879])
end
end
function SevenDayCarnivalPanel:ChangeTaskList()
if self.halfPricePage:IsActive() then
return
end
self:OnBottomTabChanged()
self:RefreshDayTabRedPoint(self.selectDayTab)
self:RefreshGroupTask()
self:SetFinalTarget()
CheckRedPointStatus(RedPointType.SevenDayCarnival)
end
function SevenDayCarnivalPanel:SetRemainTimes()
local activityInfo = ActivityGiftManager.GetActivityTypeInfo(ActivityTypeDef.SevenDayCarnival)
local timeDown = activityInfo.endTime - GetTimeStamp()
if self.timer then
self.timer:Stop()
self.timer = nil
end
self:SetTimeTipsFormat(timeDown)
if timeDown <= 0 then
return
end
self.timer = Timer.New(function()
if timeDown <= 0 then
self.timer:Stop()
self.timer = nil
end
self:SetTimeTipsFormat(timeDown)
timeDown = timeDown - 1
end, 1, -1, true)
self.timer:Start()
end
function SevenDayCarnivalPanel:SetTimeTipsFormat(timeDown)
--#FFC054FF
if timeDown <= 0 then
self:SetTaskListDisable(false)
self.enableReceive = false
self.actRemainTime.text = Language[11880]
else
self.actRemainTime.text = Language[11881] .. DateUtils.GetTimeFormatV2(timeDown)
if timeDown > 0 and timeDown <= 86400 then
self:SetTaskListDisable(false)
self:UpDateFinalRewardState()
else
self:SetTaskListDisable(true)
end
end
end
function SevenDayCarnivalPanel:UpDateFinalRewardState()
if self.hadRequestState then
return
end
local activityId = ActivityGiftManager.IsActivityTypeOpen(ActivityTypeDef.SevenDayCarnival)
local treasureTaskConfig = ConfigManager.GetConfigDataByDoubleKey(ConfigName.TreasureTaskConfig,
"ActivityId", activityId, "TaskType", kScoreTaskType)
local taskInfo = TaskManager.GetTypeTaskInfo(TaskTypeDef.SevenDayCarnival, treasureTaskConfig.Id)
if taskInfo.state == VipTaskStatusDef.NotFinished then
self.hadRequestState = true
NetManager.RequestUpDateState(UpDateTypeState.SevenDayCarnival)
end
end
function SevenDayCarnivalPanel:RefreshRedPoint()
for i = 1, kDayNumber do
self:RefreshDayTabRedPoint(i)
end
self:RefreshGroupTask()
end
function SevenDayCarnivalPanel:RefreshDayTabRedPoint(dayNumber)
local redPoint = SevenDayCarnivalManager.GetDayNumberRedPointStatus(dayNumber)
Util.GetGameObject(self.dayTabs[dayNumber], "redPoint"):SetActive(redPoint)
end
function SevenDayCarnivalPanel:RefreshGroupTask()
table.walk(self.tabsList, function(tabInfo)
if tabInfo.groupTask then
local redPoint = SevenDayCarnivalManager.GetGroupRedPointStatus(tabInfo.groupTask)
Util.GetGameObject(tabInfo.tabItem, "redPoint"):SetActive(redPoint)
else
local status = SevenDayCarnivalManager.GetSevenDayHalfPriceRedPoint(self.selectDayTab)
Util.GetGameObject(tabInfo.tabItem, "redPoint"):SetActive(status)
end
end)
end
function SevenDayCarnivalPanel:GetPriorityGroup()
local index = 1
for i, tabInfo in ipairs(self.tabsList) do
if Util.GetGameObject(tabInfo.tabItem, "redPoint").activeSelf then
index = i < #self.tabsList and i or nil
break
end
end
return index
end
function SevenDayCarnivalPanel:SetTaskListDisable(flag)
if self.enableReceive then
table.walk(self.taskList, function(taskItem)
taskItem:SetDisabled(flag)
end)
end
end
function SevenDayCarnivalPanel:SatisfyActivity()
local activityInfo = ActivityGiftManager.GetActivityTypeInfo(ActivityTypeDef.SevenDayCarnival)
self.bg.sprite = self.spLoader:LoadSprite(TypeActDifIcon[activityInfo.activityId].bgIcon)
self.title.sprite = self.spLoader:LoadSprite(TypeActDifIcon[activityInfo.activityId].title)
self.title:SetNativeSize()
end
return SevenDayCarnivalPanel