local HomeLand = quick_class("HomeLand", BasePanel) local HomeLandConfig = ConfigManager.GetConfig(ConfigName.HomeLand) local HomeLandLevel = ConfigManager.GetConfig(ConfigName.HomeLandLevel) local HomeLandTask = ConfigManager.GetConfig(ConfigName.HomeLandTask) local GlobalSystemConfig = ConfigManager.GetConfig(ConfigName.GlobalSystemConfig) local costStr = string.split(ConfigManager.GetConfigData(ConfigName.SpecialConfig,100).Value,"#") function HomeLand:InitComponent() self.spLoader = SpriteLoader.New() -- if not self.playerInfoView then -- self.playerInfoView = SubUIManager.Open(SubUIConfig.PlayerInfoView, self.transform) -- end self.UpView = SubUIManager.Open(SubUIConfig.UpView, self.transform) self.btnBack = Util.GetGameObject(self.gameObject,"btnBack") self.map = Util.GetGameObject(self.gameObject,"Map") self.Grid = Util.GetGameObject(self.map,"Grid") self.Bg = Util.GetGameObject(self.map,"Bg") self.Privi = Util.GetGameObject(self.map,"Privi") self.RightUp = Util.GetGameObject(self.map,"RightUp") self.RightDown = Util.GetGameObject(self.map,"RightDown") self.mapData = {} for i = 1, 7 do self.mapData[i] = {} self.mapData[i].Obj = Util.GetGameObject(self.Bg,"Map ("..i..")") self.mapData[i].Name = Util.GetGameObject(self.mapData[i].Obj,"Title/Text"):GetComponent("Text") self.mapData[i].CanGet = Util.GetGameObject(self.mapData[i].Obj,"CanGet") -- self.mapData[i].Icon = Util.GetGameObject(self.mapData[i].Obj,"Title/Image"):GetComponent("Image") self.mapData[i].Icon = Util.GetGameObject(self.mapData[i].Obj,"CanGet/Image"):GetComponent("Image") self.mapData[i].Btns = Util.GetGameObject(self.mapData[i].Obj,"Btns") self.mapData[i].OpenLimit = Util.GetGameObject(self.mapData[i].Obj,"OpenLimit") self.mapData[i].limitText = Util.GetGameObject(self.mapData[i].OpenLimit,"Text"):GetComponent("Text") self.mapData[i].upgradeImg = Util.GetGameObject(self.mapData[i].Obj,"Updating") self.mapData[i].updateTime = Util.GetGameObject(self.mapData[i].Obj,"updateTime") self.mapData[i].updateTimeText = Util.GetGameObject(self.mapData[i].updateTime,"Text"):GetComponent("Text") self.mapData[i].timeSlide = Util.GetGameObject(self.mapData[i].updateTime,"Slide/Image"):GetComponent("Image") self.mapData[i].btnDetail = Util.GetGameObject(self.mapData[i].Btns,"Detail") self.mapData[i].btnUpgrade = Util.GetGameObject(self.mapData[i].Btns,"Upgrade") self.mapData[i].btnCancel = Util.GetGameObject(self.mapData[i].Btns,"Cancel") self.mapData[i].btnSpeedUp = Util.GetGameObject(self.mapData[i].Btns,"Speed") self.mapData[i].leftTime = -1 self.mapData[i].showTime = -1 end self.curSelect = 0 end function HomeLand:BindEvent() --帮助按钮 -- Util.AddClick(self.helpBtn, function() -- UIManager.OpenPanel(UIName.HelpPopup, HELP_TYPE.HomeLand, self.helpPosition.x,self.helpPosition.y) -- end) Util.AddClick(self.btnBack, function() PlaySoundWithoutClick(SoundConfig.Sound_UICancel) self:ClosePanel() end) Util.AddClick(self.Bg, function() self.curSelect = 0 for j = 1, 5 do self.mapData[j].Btns:SetActive(false) end end) for i = 1, 5 do --打开菜单 Util.AddOnceClick(self.mapData[i].Obj,function () if self.curSelect ~= i then self.curSelect = i for j = 1, 5 do self.mapData[j].Btns:SetActive(false) end if HomeLandManager.BuildData[i].dataMain.IsOpen ~= 1 then PopupTipPanel.ShowTip(string.format("%s 暂未开放",HomeLandManager.BuildData[i].dataMain.Name)) return end if HomeLandConfig[i].UnlockLevel[1] == 2 and HomeLandManager.BuildData[5].level < HomeLandConfig[i].UnlockLevel[2] then PopupTipPanel.ShowTip(string.format("浮生殿到达%s级开启",HomeLandConfig[i].UnlockLevel[2])) return end self.mapData[i].Btns:SetActive(true) PlayUIAnim(self.mapData[i].Btns) end end) --打开信息界面 Util.AddOnceClick(self.mapData[i].btnDetail,function () UIManager.OpenPanel(UIName.GeneralPopup,GENERAL_POPUP_TYPE.HomeLandBuildingDetail,HomeLandManager.BuildData[i]) end) --打开升级界面 Util.AddOnceClick(self.mapData[i].btnUpgrade,function () UIManager.OpenPanel(UIName.GeneralBigPopup,GENERAL_POPUP_TYPE.HomeLandUpgrade,HomeLandManager.BuildData[i]) end) --打开加速 Util.AddOnceClick(self.mapData[i].btnSpeedUp,function () local value = math.ceil((HomeLandManager.BuildData[i].endTime - GetTimeStamp())/tonumber(costStr[1]))*tonumber(costStr[3]) LogGreen("需要16:"..tostring(value).." 现有:"..tostring(BagManager.GetTotalItemNum(16))) if BagManager.GetTotalItemNum(16) >= value then NetManager.ArchitectureOperateRequest({HomeLandManager.BuildData[i].dataMain.Id},2,0,function () self:OnShow() end) else PopupTipPanel.ShowTip("妖晶不足!") end end) --取消 Util.AddOnceClick(self.mapData[i].btnCancel,function () NetManager.ArchitectureOperateRequest({HomeLandManager.BuildData[i].dataMain.Id},3,0,function () self:OnShow() end) end) end --建木神树 Util.AddOnceClick(self.mapData[7].Obj,function () if ActTimeCtrlManager.SingleFuncState(FUNCTION_OPEN_TYPE.SACREDTREE) then UIManager.OpenPanel(UIName.SacredTreePanel) end end) --摘星阁 Util.AddOnceClick(self.mapData[6].Obj,function () PopupTipPanel.ShowTip("摘星阁") end) end function HomeLand:AddListener() Game.GlobalEvent:AddEvent(GameEvent.UI.OnUpdateData, self.OnShow,self) end function HomeLand:RemoveListener() Game.GlobalEvent:RemoveEvent(GameEvent.UI.OnUpdateData, self.OnShow,self) end --待功能扩展(试图打开某个状态) function HomeLand:OnOpen() self.UpView:OnOpen({ showType = UpViewOpenType.ShowLeft, panelType = PanelType.XiuXing }) end function HomeLand:OnSortingOrderChange() end function HomeLand:OnShow() self:SetBuildsState() self:SetTime() end function HomeLand:SetBuildsState() for i = 1, 7 do local data = HomeLandManager.BuildData[i] local curObj = self.mapData[i] curObj.data = HomeLandManager.BuildData[i] curObj.OpenLimit:SetActive(true) curObj.btnUpgrade:SetActive(false) curObj.btnCancel:SetActive(false) curObj.btnSpeedUp:SetActive(false) -- curObj.Icon.gameObject:SetActive(false) curObj.upgradeImg:SetActive(false) curObj.updateTime:SetActive(false) curObj.CanGet:SetActive(false) if data.dataMain.IsOpen == 1 then--部分建筑未进入版本显示未开放 --如果主城未到等级,显示开启条件 if HomeLandConfig[i].UnlockLevel[1] == 1 and PlayerManager.level < HomeLandConfig[i].UnlockLevel[2] then curObj.limitText.text = string.format("玩家等级到达%s级开启",HomeLandConfig[i].UnlockLevel[2]) elseif HomeLandConfig[i].UnlockLevel[1] == 2 and HomeLandManager.BuildData[5].level < HomeLandConfig[i].UnlockLevel[2] then curObj.limitText.text = string.format("浮生殿到达%s级开启",HomeLandConfig[i].UnlockLevel[2]) elseif HomeLandConfig[i].UnlockLevel[1] == 3 and PlayerManager.level < GlobalSystemConfig[HomeLandConfig[i].UnlockLevel[2]].OpenRules[2] then curObj.limitText.text = string.format("玩家等级到达%s级开启",GlobalSystemConfig[HomeLandConfig[i].UnlockLevel[2]].OpenRules[2]) else curObj.OpenLimit:SetActive(false) end if data.dataSingle then if data.dataSingle.Gain then--有产出的才需要icon curObj.Icon.sprite = self.spLoader:LoadSprite(GetSpriteNameByItemId(data.dataSingle.Gain[1])) -- curObj.Icon.gameObject:SetActive(true) if not curObj.OpenLimit.activeInHierarchy then curObj.showTime = data.startTime + 60 curObj.CanGet:SetActive(data.startTime + 60 < GetTimeStamp()) PlayUIAnim(curObj.CanGet) end end if data.endTime > GetTimeStamp() then--如果有结束时间说明在升级,可以取消,可以加速 curObj.btnCancel:SetActive(true) curObj.btnSpeedUp:SetActive(true) curObj.upgradeImg:SetActive(true) curObj.updateTime:SetActive(true) curObj.leftTime = data.endTime - GetTimeStamp() >= 0 and data.endTime - GetTimeStamp() or -1 curObj.updateTimeText.text = TimeToFelaxible(curObj.leftTime) curObj.timeSlide.fillAmount = (data.dataSingle.Time-curObj.leftTime)/data.dataSingle.Time PlayUIAnim(curObj.upgradeImg) else--如果没有就是可以点击升级 if data.dataSingle.Cost then curObj.btnUpgrade:SetActive(true) end end end else curObj.limitText.text = "暂未开放" end if data.dataSingle and data.dataMain.IsOpen == 1 then--需要升级的才显示等级 curObj.Name.text = string.format("%s(%s级)",data.dataMain.Name,data.dataSingle.level) else--部分没有等级所以不需要显示等级 curObj.Name.text = string.format("%s",data.dataMain.Name) end Util.AddOnceClick(curObj.CanGet,function () NetManager.HomeAllGainRequset(data.dataMain.Id,function () self:OnShow() end) end) end end function HomeLand:SetTime() if self.timer then self.timer:Stop() self.timer = nil end self.timer = Timer.New(function () for i = 1, 7 do local curObj = self.mapData[i] curObj.updateTime:SetActive(curObj.leftTime >= 0) if curObj.leftTime >= 0 then curObj.updateTimeText.text = TimeToFelaxible(curObj.leftTime) curObj.leftTime = curObj.leftTime -1 curObj.timeSlide.fillAmount = (curObj.data.dataSingle.Time-curObj.leftTime)/curObj.data.dataSingle.Time if curObj.leftTime < 0 then NetManager.HomeInfoRequest(function () self:OnShow() end) end end curObj.CanGet:SetActive(curObj.showTime > 0 and curObj.showTime < GetTimeStamp()) end end, 1, -1, true) self.timer:Start() end function HomeLand:OnClose() self.curSelect = 0 for j = 1, 5 do self.mapData[j].Btns:SetActive(false) end end function HomeLand:OnDestroy() self.spLoader:Destroy() SubUIManager.Close(self.UpView) self.UpView = nil if self.timer then self.timer:Stop() self.timer = nil end -- if self.playerInfoView then -- SubUIManager.Close(self.playerInfoView) -- self.playerInfoView = nil -- end end return HomeLand