miduo_client/Assets/ManagedResources/~Lua/Modules/ActivityGift/FestevalPanel.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