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.singleLinePre = Util.GetGameObject(self.gameObject,"singleLinePre") self.singleLinePreHeight = self.singleLinePre:GetComponent("RectTransform").rect.height self.lineList = {} self.time = Util.GetGameObject(self.gameObject,"timeDi/time"):GetComponent("Text") self.gridPos = self.grid:GetComponent("RectTransform").anchoredPosition 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() 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:RemainTimeDown() local row,cum = self:Getrow(self.curDay) local h = (row - 2) * self.singleLinePreHeight if h < 0 then self.gridPos.y = 0 elseif h > (#self.lineList - 2) * self.singleLinePreHeight then self.gridPos.y = (#self.lineList - 2) * self.singleLinePreHeight else self.gridPos.y = h end self.grid:GetComponent("RectTransform").anchoredPosition = self.gridPos 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 for i = 1, #self.actData.mission 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(parent) 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, 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) if obj.data.state == 0 then if self.curDay >= config.Values[1][1] then obj.redpoint.gameObject:SetActive(true) 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() end --刷新倒计时显示 function FestevalPanel:RemainTimeDown() self.time.text = string.format(Language[10584]..ActivityGiftManager.GetTimeStartToEnd1(ActivityTypeDef.qiandaohaoli)) 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