270 lines
11 KiB
Lua
270 lines
11 KiB
Lua
require("Base/BasePanel")
|
|
FestevalPanel = Inherit(BasePanel)
|
|
local GlobalActivityConfig = ConfigManager.GetConfig(ConfigName.GlobalActivity)
|
|
local ActivityRewardConfig = ConfigManager.GetConfig(ConfigName.ActivityRewardConfig)
|
|
--初始化组件(用于子类重写)
|
|
function FestevalPanel:InitComponent()
|
|
self.spLoader = SpriteLoader.New()
|
|
self.closePanel = Util.GetGameObject(self.gameObject, "mask")
|
|
self.liveRoot = Util.GetGameObject(self.closePanel, "root")
|
|
self.title = Util.GetGameObject(self.closePanel, "title"):GetComponent("Image")
|
|
self.tipDi = Util.GetGameObject(self.closePanel, "tipDi"):GetComponent("Image")
|
|
self.tip = Util.GetGameObject(self.tipDi.transform, "tip"):GetComponent("Text")
|
|
self.grid = Util.GetGameObject(self.gameObject, "content/grid")
|
|
self.contentHeight = Util.GetGameObject(self.gameObject, "content"):GetComponent("RectTransform").rect.height
|
|
self.singleLinePre = Util.GetGameObject(self.gameObject, "singleLinePre")
|
|
self.singleLinePreHeight = self.singleLinePre:GetComponent("RectTransform").rect.height
|
|
self.gridLayoutCom = self.grid:GetComponent("VerticalLayoutGroup")
|
|
self.lineList = {}
|
|
|
|
self.time = Util.GetGameObject(self.gameObject, "timeDi/time"):GetComponent("Text")
|
|
self.gridPos = self.grid:GetComponent("RectTransform").anchoredPosition
|
|
|
|
self.UI_effect_RecruitPanel_particle = Util.GetGameObject(self.gameObject, "UI_effect_RecruitPanel_particle")
|
|
end
|
|
|
|
--绑定事件(用于子类重写)
|
|
function FestevalPanel:BindEvent()
|
|
Util.AddClick(self.closePanel, function()
|
|
self:ClosePanel()
|
|
end)
|
|
end
|
|
|
|
--添加事件监听(用于子类重写)
|
|
function FestevalPanel:AddListener()
|
|
|
|
end
|
|
|
|
--移除事件监听(用于子类重写)
|
|
function FestevalPanel:RemoveListener()
|
|
|
|
end
|
|
|
|
--界面打开时调用(用于子类重写)
|
|
function FestevalPanel:OnOpen(...)
|
|
|
|
end
|
|
|
|
--界面打开或者重新打开后,界面刷新时调用(用于子类重写)
|
|
function FestevalPanel:OnShow()
|
|
Util.SetParticleSortLayer(self.UI_effect_RecruitPanel_particle, self.sortingOrder + 1)
|
|
self.actData = ActivityGiftManager.GetActivityTypeInfo(ActivityTypeDef.qiandaohaoli)
|
|
if not self.actData then
|
|
self:ClosePanel()
|
|
return
|
|
end
|
|
self.actId = self.actData.activityId
|
|
if self.live then
|
|
poolManager:UnLoadLive(self.live.gameObject.name, self.live)
|
|
self.live = nil
|
|
end
|
|
|
|
if GlobalActivityConfig[self.actId].ShowArt and GlobalActivityConfig[self.actId].ShowArt > 0 then
|
|
local data = ConfigManager.GetConfigData(ConfigName.HeroConfig, GlobalActivityConfig[self.actId].ShowArt)
|
|
self.live = poolManager:LoadLive(GetResourcePath(data.Live), self.liveRoot.transform,
|
|
Vector3.one * data.Scale, Vector3.New(data.Position[1], data.Position[2], 0))
|
|
local SkeletonGraphic = self.live:GetComponent("SkeletonGraphic")
|
|
SkeletonGraphic.AnimationState:SetAnimation(0, "idle", true)
|
|
end
|
|
|
|
self.tempData = string.split(GlobalActivityConfig[self.actId].ExpertDec, "#")
|
|
self.title.sprite = self.spLoader:LoadSprite(self.tempData[1])
|
|
self.title:SetNativeSize()
|
|
self.title.transform.localPosition = Vector3.New(tonumber(self.tempData[2]), tonumber(self.tempData[3]),
|
|
tonumber(self.tempData[4]))
|
|
LogGreen("self.tempData[5]:" .. self.tempData[5])
|
|
self.tipDi.sprite = self.spLoader:LoadSprite(self.tempData[5])
|
|
self.tipDi:SetNativeSize()
|
|
self.tipDi.transform.localPosition = Vector3.New(tonumber(self.tempData[6]), tonumber(self.tempData[7]),
|
|
tonumber(self.tempData[8]))
|
|
if self.tempData[9] then
|
|
self.tip.text = self.tempData[9]
|
|
else
|
|
self.tip.text = self.tempData[9]
|
|
end
|
|
self.curDay = math.ceil((CalculateSecondsNowTo_N_OClock(0) + GetTimeStamp() - self.actData.startTime) / 86400)
|
|
self:RefreshData()
|
|
self:SetSelect()
|
|
self:RemainTimeDown()
|
|
end
|
|
|
|
function FestevalPanel:RefreshData()
|
|
for i = 1, #self.lineList do
|
|
self.lineList[i].go.gameObject:SetActive(false)
|
|
for j = 1, #self.lineList[i].items do
|
|
self.lineList[i].items[j].go.gameObject:SetActive(false)
|
|
end
|
|
end
|
|
local row, cum
|
|
table.sort(self.actData.mission, function(a, b) return a.missionId < b.missionId end)
|
|
LogError("#self.actData.mission==" .. #self.actData.mission)
|
|
local len = 0
|
|
if #self.actData.mission > 7 then
|
|
len = 7
|
|
else
|
|
len = #self.actData.mission
|
|
end
|
|
for i = 1, len do
|
|
row, cum = self:Getrow(i)
|
|
if not self.lineList[row] then
|
|
self.lineList[row] = {}
|
|
self.lineList[row].go = newObjToParent(self.singleLinePre, self.grid)
|
|
self.lineList[row].go.gameObject:SetActive(false)
|
|
self.lineList[row].items = {}
|
|
for j = 1, 4 do
|
|
self.lineList[row].items[j] = {}
|
|
self.lineList[row].items[j].go = Util.GetGameObject(self.lineList[row].go, "dayPre" .. j)
|
|
self.lineList[row].items[j].select = Util.GetGameObject(self.lineList[row].items[j].go, "bg/select")
|
|
self.lineList[row].items[j].gray = Util.GetGameObject(self.lineList[row].items[j].go, "bg/gray")
|
|
self.lineList[row].items[j].title = Util.GetGameObject(self.lineList[row].items[j].go, "title")
|
|
:GetComponent("Text")
|
|
self.lineList[row].items[j].itempPos = Util.GetGameObject(self.lineList[row].items[j].go, "itempPos")
|
|
self.lineList[row].items[j].get = Util.GetGameObject(self.lineList[row].items[j].itempPos, "get")
|
|
self.lineList[row].items[j].redpoint = Util.GetGameObject(self.lineList[row].items[j].go, "redpoint")
|
|
self.lineList[row].items[j].name = Util.GetGameObject(self.lineList[row].items[j].go, "name")
|
|
:GetComponent("Text")
|
|
self.lineList[row].items[j].itemview = SubUIManager.Open(SubUIConfig.ItemView,
|
|
self.lineList[row].items[j].itempPos.transform)
|
|
self.lineList[row].items[j].itemview.transform:SetAsFirstSibling()
|
|
self.lineList[row].items[j].data = {}
|
|
self.lineList[row].items[j].go.gameObject:SetActive(false)
|
|
end
|
|
end
|
|
self.lineList[row].go.gameObject:SetActive(true)
|
|
self:RefreshSingleData(self.lineList[row].items[cum], self.actData.mission[i])
|
|
end
|
|
end
|
|
|
|
function FestevalPanel:Getrow(index)
|
|
local cum, row, group, sub_group
|
|
if index % 7 == 0 then
|
|
cum = 4
|
|
row = (math.ceil(index / 7)) * 2
|
|
else
|
|
group = math.floor(index / 7)
|
|
sub_group = index % 7
|
|
if sub_group % 3 == 0 then
|
|
cum = 3
|
|
else
|
|
cum = sub_group % 3
|
|
end
|
|
row = (group) * 2 + math.ceil(sub_group / 3)
|
|
end
|
|
return row, cum
|
|
end
|
|
|
|
function FestevalPanel:SetSelect()
|
|
self.gridHeight = GetPreferredHeight(self.grid.transform)
|
|
local day = self.curDay
|
|
for i = 1, #self.actData.mission do
|
|
local config = ActivityRewardConfig[self.actData.mission[i].missionId]
|
|
if self.actData.mission[i].state == 0 and self.curDay >= config.Values[1][1] then
|
|
day = config.Values[1][1]
|
|
break
|
|
end
|
|
end
|
|
local row, cum = self:Getrow(day)
|
|
--local h = -((row - 0.5) * self.singleLinePreHeight + (row - 1) * self.gridLayoutCom.spacing - 14)
|
|
|
|
local h = (row - 1) * self.singleLinePreHeight + (row - 1) * self.gridLayoutCom.spacing
|
|
if h < 0 then
|
|
self.gridPos.y = 0
|
|
elseif h > self.gridHeight - self.contentHeight then
|
|
self.gridPos.y = self.gridHeight - self.contentHeight
|
|
else
|
|
self.gridPos.y = h
|
|
end
|
|
self.grid:GetComponent("RectTransform").anchoredPosition = self.gridPos
|
|
end
|
|
|
|
function FestevalPanel:RefreshSingleData(obj, data)
|
|
obj.data = data
|
|
obj.go.gameObject:SetActive(true)
|
|
local config = ActivityRewardConfig[data.missionId]
|
|
obj.title.text = string.format(Language[10021], config.Values[1][1])
|
|
obj.name.text = GetLanguageStrById(config.ContentsShow)
|
|
obj.itemview:OnOpen(false, config.Reward[1], 1.05, false, false, false, self.sortingOrder)
|
|
obj.select.gameObject:SetActive(false)
|
|
obj.gray.gameObject:SetActive(false)
|
|
obj.get.gameObject:SetActive(false)
|
|
obj.redpoint.gameObject:SetActive(false)
|
|
obj.itemview.frameBtn:GetComponent("Button").enabled = true
|
|
if obj.data.state == 0 then
|
|
if self.curDay >= config.Values[1][1] then
|
|
obj.redpoint.gameObject:SetActive(true)
|
|
obj.select.gameObject:SetActive(true)
|
|
obj.itemview.frameBtn:GetComponent("Button").enabled = false
|
|
end
|
|
-- if self.curDay == config.Values[1][1] then
|
|
-- obj.select.gameObject:SetActive(true)
|
|
-- end
|
|
else
|
|
obj.gray.gameObject:SetActive(true)
|
|
obj.get.gameObject:SetActive(true)
|
|
end
|
|
Util.AddOnceClick(obj.go, function()
|
|
if obj.data.state == 0 then
|
|
if self.curDay >= config.Values[1][1] then
|
|
NetManager.GetActivityRewardRequest(obj.data.missionId, self.actId, function(drop)
|
|
UIManager.OpenPanel(UIName.RewardItemPopup, drop, 1, function()
|
|
obj.data.state = 1
|
|
self:RefreshSingleData(obj, data)
|
|
CheckRedPointStatus(RedPointType.FestevalRed)
|
|
end)
|
|
end)
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
|
|
function FestevalPanel:OnSortingOrderChange()
|
|
Util.SetParticleSortLayer(self.UI_effect_RecruitPanel_particle, self.sortingOrder + 1)
|
|
end
|
|
|
|
--刷新倒计时显示
|
|
function FestevalPanel:RemainTimeDown()
|
|
self.time.text = string.format(Language[10022] ..
|
|
ActivityGiftManager.GetTimeStartToEnd1(ActivityTypeDef.qiandaohaoli))
|
|
--不显示倒计时
|
|
self.time.gameObject:SetActive(false)
|
|
local timeDu = self.actData.endTime - GetTimeStamp()
|
|
local s = function()
|
|
timeDu = timeDu - 1
|
|
if timeDu <= 0 then
|
|
self:ClosePanel()
|
|
end
|
|
end
|
|
s()
|
|
if self.timer then
|
|
self.timer:Stop()
|
|
self.timer = nil
|
|
end
|
|
self.timer = Timer.New(s, 1, -1, false)
|
|
self.timer:Start()
|
|
end
|
|
|
|
--界面关闭时调用(用于子类重写)
|
|
function FestevalPanel:OnClose()
|
|
if self.timer then
|
|
self.timer:Stop()
|
|
self.timer = nil
|
|
end
|
|
if self.live then
|
|
poolManager:UnLoadLive(self.live.gameObject.name, self.live)
|
|
self.live = nil
|
|
end
|
|
end
|
|
|
|
--界面销毁时调用(用于子类重写)
|
|
function FestevalPanel:OnDestroy()
|
|
for i = 1, #self.lineList do
|
|
self.lineList[i].go.gameObject:SetActive(false)
|
|
for j = 1, #self.lineList[i].items do
|
|
SubUIManager.Close(self.lineList[i].items[j].itemview)
|
|
end
|
|
end
|
|
self.lineList = {}
|
|
end
|
|
|
|
return FestevalPanel
|