require("Base/BasePanel") EnergyBaseMainPanel = Inherit(BasePanel) local this = EnergyBaseMainPanel local BaseAttachmentConfig = ConfigManager.GetConfig(ConfigName.BaseAttachmentConfig) local PropertyConfig = ConfigManager.GetConfig(ConfigName.PropertyConfig) local BaseResourceConfig = ConfigManager.GetConfig(ConfigName.BaseResourceConfig) local SpecialConfig = ConfigManager.GetConfig(ConfigName.SpecialConfig) local ItemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig) --滑动相关 local trigger = nil local moveY = 0 local moveSpeed = 50 local moveMax = 0 local moveMin = 0 local builds = {}--设施 local items = {}--资源 local buffList = {}--buff local timer = nil local timeList = {} --显示 local showType = { My = 1, Other = 2, } local curType, curPlayerId, curPlayerName function EnergyBaseMainPanel:InitComponent() this.btnBack = Util.GetGameObject(this.gameObject, "btnBack") this.dragBg = Util.GetGameObject(this.gameObject, "dragBg") this.bg = Util.GetGameObject(this.gameObject, "bg") this.top = Util.GetGameObject(this.gameObject, "Top") this.btnAdd = Util.GetGameObject(this.gameObject, "Top/btnAdd") this.btnQuery = Util.GetGameObject(this.gameObject, "Top/btnQuery") this.btnQueryRp = Util.GetGameObject(this.gameObject, "Top/btnQuery/redpoint") this.btnUpLv = Util.GetGameObject(this.gameObject, "Top/btnUpLv") this.btnUpLvRp = Util.GetGameObject(this.gameObject, "Top/btnUpLv/redpoint") this.btnGift = Util.GetGameObject(this.gameObject, "Top/btnGift") this.btnLog = Util.GetGameObject(this.gameObject, "Top/btnLog") this.btnHelp = Util.GetGameObject(this.gameObject, "Top/btnHelp") this.helpPosition = this.btnHelp:GetComponent("RectTransform").localPosition this.baseLevel = Util.GetGameObject(this.gameObject, "Top/baseLevel"):GetComponent("Text") this.fatigue = Util.GetGameObject(this.gameObject, "Top/fatigue"):GetComponent("Text") this.coolieNum = Util.GetGameObject(this.gameObject, "Top/coolieNum"):GetComponent("Text") this.buffGrid = Util.GetGameObject(this.gameObject, "Top/buff") this.buff = Util.GetGameObject(this.gameObject, "Top/buff/pre") this.btnPlunder = Util.GetGameObject(this.gameObject, "tab/btnPlunder") this.btnRefresh = Util.GetGameObject(this.gameObject, "tab/btnRefresh") this.builds = Util.GetGameObject(this.gameObject, "bg/builds") for i = 1, 4 do local build = Util.GetGameObject(this.builds, "build"..i) builds[i] = { name = Util.GetGameObject(build, "name"):GetComponent("Text"), redpoint = Util.GetGameObject(build, "redpoint"), btnUpLv = Util.GetGameObject(build, "btnUpLv"), } end for i = 1, 6 do local item = Util.GetGameObject(this.gameObject, "bg/items/item"..i) items[i] = { left = Util.GetGameObject(item, "left"), right = Util.GetGameObject(item, "right"), resources = Util.GetGameObject(item, "resources") } end this.baseName = Util.GetGameObject(this.gameObject, "name/Text"):GetComponent("Text") this.OnInitTrigger() -- local posY = this.bg:GetComponent("RectTransform").localPosition.y local height = this.bg:GetComponent("RectTransform").rect.height --2700为背景高度 if height < 2700 then moveMax = math.abs(height - 2700) -- moveMax = math.abs(UIManager.realHeigt - 2700)/2+posY else moveMax = 0 end end function EnergyBaseMainPanel:BindEvent() Util.AddClick(this.btnBack, function() if curType == showType.My then self:ClosePanel() elseif curType == showType.Other then UIManager.OpenPanel(UIName.EnergyBaseMainPanel, showType.My) end end) Util.AddClick(this.btnUpLv, function() local args = EnergyBaseManager.GetBaseInfo() if args.baseLevel >= EnergyBaseManager.baseMaxLv then return end UIManager.OpenPanel(UIName.EnergyBaseUpLevel) end) Util.AddClick(this.btnGift, function() UIManager.OpenPanel(UIName.EnergyGiftBag) end) Util.AddClick(this.btnHelp, function() UIManager.OpenPanel(UIName.HelpPopup, HELP_TYPE.EnergyBase, this.helpPosition.x-50, this.helpPosition.y+900) end) Util.AddClick(this.btnLog, function() UIManager.OpenPanel(UIName.EnergyBaseLog) end) Util.AddClick(this.btnAdd, function() UIManager.OpenPanel(UIName.RobotDetails) end) Util.AddClick(this.btnQuery, function() UIManager.OpenPanel(UIName.RobotDetails) end) Util.AddClick(this.btnPlunder, function() UIManager.OpenPanel(UIName.EnergyBaseLoot) end) Util.AddClick(this.btnRefresh, function() UIManager.OpenPanel(UIName.GeneralPopup, GENERAL_POPUP_TYPE.EnergyBaseRefresh, function () EnergyBaseManager.RefreshResourceDetails(function () -- this.EventRefreshResource() end) end) end) end function EnergyBaseMainPanel:AddListener() Game.GlobalEvent:AddEvent(GameEvent.Energy.RefreshResource, this.EventRefreshResource) Game.GlobalEvent:AddEvent(GameEvent.Energy.RefreshBaseInfo, this.EventRefreshBaseInfo) Game.GlobalEvent:AddEvent(GameEvent.Energy.RefreshResourceForOtherBase, this.EventRefreshResourceForOtherBase) end function EnergyBaseMainPanel:RemoveListener() Game.GlobalEvent:RemoveEvent(GameEvent.Energy.RefreshResource, this.EventRefreshResource) Game.GlobalEvent:RemoveEvent(GameEvent.Energy.RefreshBaseInfo, this.EventRefreshBaseInfo) Game.GlobalEvent:RemoveEvent(GameEvent.Energy.RefreshResourceForOtherBase, this.EventRefreshResourceForOtherBase) end function EnergyBaseMainPanel:OnSortingOrderChange() -- local sortingOrder = self.sortingOrder -- for i = 1, #items do -- local effect = Util.GetGameObject(items[i].resources, "GameObject/RobotEffect"):GetComponent("SortingGroup") -- effect.sortingOrder = sortingOrder + 10 -- end -- Util.GetGameObject(this.gameObject, "tab"):GetComponent("Canvas").sortingOrder = sortingOrder + 11 -- this.btnPlunder:GetComponent("Canvas").sortingOrder = sortingOrder + 12 -- this.btnRefresh:GetComponent("Canvas").sortingOrder = sortingOrder + 12 -- this.btnBack:GetComponent("Canvas").sortingOrder = sortingOrder + 12 end function EnergyBaseMainPanel:OnOpen(type, args) curType = type and type or showType.My if not args then args = {id = PlayerManager.uid, name = PlayerManager.nickName} end curPlayerId = args.id curPlayerName = args.name EnergyBaseManager.curPlayerId = curPlayerId moveY = 0 if moveMax > 0 then if curType == showType.Other then moveY = moveMax end end this.bg.gameObject:GetComponent("RectTransform").anchoredPosition = Vector3.New(0, moveY, 0) end function EnergyBaseMainPanel:OnShow() this.top:SetActive(curType == showType.My) this.builds:SetActive(curType == showType.My) this.btnRefresh:SetActive(curType == showType.My) this.baseName.text = curPlayerName..GetLanguageStrById(50464) timeList = {} if curType == showType.My then EnergyBaseManager.SetBaseEnergyInfoData(function () this.SetBuff() this.SetBaseInfo() this.SetBaseResourceDetails() this.TimeDown() end) elseif curType == showType.Other then EnergyBaseManager.AccessOtherBase(curPlayerId, function (msg) this.SetBaseResourceDetails(msg) this.TimeDown() end) end end function EnergyBaseMainPanel:OnClose() if timer then timer:Stop() timer = nil end end function EnergyBaseMainPanel:OnDestroy() moveY = 0 trigger.onBeginDrag = trigger.onBeginDrag - this.OnBeginDrag trigger.onDrag = trigger.onDrag - this.OnDrag trigger.onEndDrag = trigger.onEndDrag - this.OnEndDrag trigger = nil builds = {} items = {} buffList = {} timeList = {} if timer then timer:Stop() timer = nil end end function this.OnDrag(p,d) if d.delta.y > 0 then--向上划 if moveY >= moveMax then return end moveY = moveY + moveSpeed this.bg.gameObject:GetComponent("RectTransform").anchoredPosition = Vector3.New(0, moveY, 0) elseif d.delta.y < 0 then--向下划 if moveY <= moveMin then this.bg.gameObject:GetComponent("RectTransform").anchoredPosition = Vector3.New(0, 0, 0) return end moveY = moveY - moveSpeed this.bg.gameObject:GetComponent("RectTransform").anchoredPosition = Vector3.New(0, moveY, 0) end end function this.OnInitTrigger() if not trigger then trigger = Util.GetEventTriggerListener(this.dragBg) trigger.onBeginDrag = trigger.onBeginDrag + this.OnBeginDrag trigger.onDrag = trigger.onDrag + this.OnDrag trigger.onEndDrag = trigger.onEndDrag + this.OnEndDrag end end function this.SetBuff() for i = 1, #buffList do buffList[i].gameObject:SetActive(false) end local infos = EnergyBaseManager.GetFacilityInfos() for i = 1, 4 do local config = EnergyBaseManager.GetBuildInfo(infos[i].type, infos[i].level) if not buffList[i] then buffList[i] = newObjToParent(this.buff, this.buffGrid) end Util.GetGameObject(buffList[i], "icon"):GetComponent("Image").sprite = Util.LoadSprite(PropertyConfig[config.PropertyAdd[1][1]].Icon) Util.GetGameObject(buffList[i], "name"):GetComponent("Text").text = GetLanguageStrById(PropertyConfig[config.PropertyAdd[1][1]].Info) Util.GetGameObject(buffList[i], "value"):GetComponent("Text").text = "+"..GetPropertyFormatStr(PropertyConfig[config.PropertyAdd[1][1]].Style, config.PropertyAdd[1][2]) buffList[i].gameObject:SetActive(true) end end function this.SetBaseInfo() local args = EnergyBaseManager.GetBaseInfo() this.btnUpLv:SetActive(not (args.baseLevel >= EnergyBaseManager.baseMaxLv)) this.btnUpLvRp:SetActive(EnergyBaseManager.BaseUpLvRedpoint()) this.btnQueryRp:SetActive(EnergyBaseManager.RobotBuyRedpoint()) this.baseLevel.text = args.baseLevel this.coolieNum.text = args.freeCoolieCount.."/"..args.coolieCount this.fatigue.text = args.totalSnatchCount local infos = EnergyBaseManager.GetFacilityInfos() for i = 1, #builds do local config, next = EnergyBaseManager.GetBuildInfo(infos[i].type, infos[i].level) builds[i].name.text = GetLanguageStrById(config.Name).." ".."Lv"..infos[i].level builds[i].btnUpLv:SetActive(not not next) builds[i].redpoint:SetActive(EnergyBaseManager.BuildUpLvRedpointForType(infos[i].type)) Util.AddClick(builds[i].btnUpLv, function () local cur, next = EnergyBaseManager.GetBuildInfo(infos[i].type, infos[i].level) if next then UIManager.OpenPanel(UIName.SheShiUpLevel, infos[i].type) end end) end end --[[ 资源方 资源 争夺方 进度: 1 0 -1 |————————————————————|————————————————————| ]] local minPosX = 160 local maxPosX = 500 function this.SetRobotMove(data) local p = EnergyBaseManager.ComputingProgress(data.resource) local posX = 0 local distance = (maxPosX - minPosX) * math.abs(p) local posY = data.item.left:GetComponent("RectTransform").anchoredPosition.y local rposY = data.item.resources:GetComponent("RectTransform").anchoredPosition.y if p < 0 then posX = 0 + distance end if p > 0 then posX = 0 - distance end -- LogError("进度:"..p.." 资源:"..posX) if posX < -maxPosX+160 then posX = -maxPosX+160 end if posX > maxPosX-160 then posX = maxPosX-160 end data.item.resources:GetComponent("RectTransform").anchoredPosition = Vector2.New(posX, rposY) data.item.left:GetComponent("RectTransform").anchoredPosition = Vector2.New(posX-160, posY) data.item.right:GetComponent("RectTransform").anchoredPosition = Vector2.New(posX+160, posY) end function this.SetBaseResourceDetails(msg) for i = 1, #items do local data = EnergyBaseManager.ResourceDetailsForId(curPlayerId, msg, i) local time = Util.GetGameObject(items[i].resources, "time") local timeTxt = Util.GetGameObject(items[i].resources, "time/Text"):GetComponent("Text") local icon = Util.GetGameObject(items[i].resources, "icon"):GetComponent("Image") local lv = Util.GetGameObject(items[i].resources, "lv") local lvTxt = Util.GetGameObject(items[i].resources, "lv/Text"):GetComponent("Text") if data and data.resourceId > 0 then local resourceData = BaseResourceConfig[data.resourceId] icon.sprite = Util.LoadSprite(GetResourcePath(ItemConfig[resourceData.Reward[1]].ResourceID)) lvTxt.text = "Lv."..resourceData.Level.."" local finalTime = EnergyBaseManager.ComputingTime(data) if data.collieCount > 0 or data.snatchCollieCount > 0 then timeTxt.text = TimeToHMS(finalTime-GetTimeStamp()) if not timeList[i] then local isJoin = (data.snatchId == PlayerManager.uid) or (curPlayerId == PlayerManager.uid) local list = {pos = i, resource = data, txt = timeTxt, time = finalTime, item = items[i], state = true, isJoin = isJoin} timeList[i] = list this.SetRobotMove(list) end else local posX = 0 local posY = items[i].resources:GetComponent("RectTransform").anchoredPosition.y local distance = (maxPosX - minPosX) * math.abs(data.progress) if data.progress < 0 then posX = 0 + distance end if data.progress > 0 then posX = 0 - distance end items[i].resources:GetComponent("RectTransform").anchoredPosition = Vector2.New(posX, posY) end Util.AddOnceClick(items[i].resources, function () if curPlayerId == PlayerManager.uid or data.snatchId == PlayerManager.uid or data.snatchId == 0 then if curPlayerId ~= PlayerManager.uid and data.snatchCollieCount == 0 and EnergyBaseManager.GetBaseInfo().freeCoolieCount <= 0 then PopupTipPanel.ShowTip(GetLanguageStrById(50475)) return end UIManager.OpenPanel(UIName.EnergyDetails, {pos = i, resource = data, playerId = curPlayerId}) end end) Util.GetGameObject(items[i].left, "num"):GetComponent("Text").text = data.collieCount Util.GetGameObject(items[i].right, "num"):GetComponent("Text").text = data.snatchCollieCount Util.GetGameObject(items[i].left, "Image"):SetActive(data.collieCount >= data.snatchCollieCount) Util.GetGameObject(items[i].right, "Image"):SetActive(data.collieCount < data.snatchCollieCount) Util.GetGameObject(items[i].right, "name"):GetComponent("Text").text = data.snatchName end lv:SetActive(not not data and data.resourceId > 0) time:SetActive(not not data and (data.collieCount > 0 or data.snatchCollieCount > 0)) icon.gameObject:SetActive(not not data and data.resourceId > 0) items[i].left:SetActive(not not data and data.collieCount > 0) items[i].right:SetActive(not not data and data.snatchCollieCount > 0) items[i].resources:SetActive(not not data and data.resourceId > 0) end end function this.TimeDown() if timer then timer:Stop() timer = nil end timer = Timer.New(function() for index, value in pairs(timeList) do if value then value.txt.text = TimeToHMS(value.time-GetTimeStamp()) this.SetRobotMove(value) end if value.time-GetTimeStamp() <= 0 then value.state = false if not value.isJoin then value.item.resources:SetActive(false) value.item.left:SetActive(false) value.item.right:SetActive(false) end end local isOn = false for k, v in pairs(timeList) do if v.state then isOn = true end end if not isOn then if timer then timer:Stop() timer = nil end end end end, 1, -1, true) timer:Start() end function this.EventRefreshBaseInfo() -- LogError("EventRefreshBaseInfo") this.SetBuff() this.SetBaseInfo() end function this.EventRefreshResource() -- LogError("EventRefreshResource") timeList = {} this.SetBaseResourceDetails() this.SetBaseInfo() this.TimeDown() end function this.EventRefreshResourceForOtherBase(msg) -- LogError("EventRefreshResourceForOtherBase") timeList = {} this.SetBaseResourceDetails(msg) this.TimeDown() end return EnergyBaseMainPanel