263 lines
10 KiB
Lua
263 lines
10 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("第%s天",config.Values[1][1])
|
|
obj.name.text = 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[10584]..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 |