miduo_client/Assets/ManagedResources/~Lua/Modules/HomeLand/HomeLandPanel.lua

366 lines
16 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 ItemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
local costStr = string.split(ConfigManager.GetConfigData(ConfigName.SpecialConfig,100).Value,"#")
local bool = false
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")
--btns
self.taskBtn = Util.GetGameObject(self.RightUp,"Task")
self.yunYouBtn = Util.GetGameObject(self.RightUp,"YunYou")
--产出详情框
self.GainDetail = Util.GetGameObject(self.map,"GainDetail")
self.maskBtn = Util.GetGameObject(self.GainDetail,"mask")
self.Kuang = Util.GetGameObject(self.GainDetail,"Kuang")
self.Btn = Util.GetGameObject(self.GainDetail,"Btn")
self.BtnImage = Util.GetGameObject(self.Btn,"Image")
--progress
self.progress = Util.GetGameObject(self.Kuang,"Progress")
self.helpBtn1 = Util.GetGameObject(self.progress,"Help1")
self.progressPre = Util.GetGameObject(self.progress,"progressPre")
self.preList1 = {}
--detail
self.detail = Util.GetGameObject(self.Kuang,"Detail")
self.helpBtn2 = Util.GetGameObject(self.detail,"Help2")
self.detailPre = Util.GetGameObject(self.detail,"detailPre")
self.preList2 = {}
--地图点信息
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.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
MsgPanel.ShowTwo(string.format("是否花费%s妖晶立即升级",value),function() end,function()
NetManager.ArchitectureOperateRequest({HomeLandManager.BuildData[i].dataMain.Id},2,0,function ()
self.mapData[i].leftTime = -1
self:OnShow()
end)
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 ()
UIManager.OpenPanel(UIName.GeneralPopup,GENERAL_POPUP_TYPE.HomeLandEquip)
end)
--产出详情框
Util.AddClick(self.maskBtn, function()
bool = false
self.maskBtn:SetActive(bool)
self:SetDetailBar()
end)
Util.AddClick(self.Btn, function()
bool = not bool
self:SetDetailBar()
end)
--右侧按钮们
Util.AddClick(self.taskBtn, function()
MonsterCampManager.preType = 5
UIManager.OpenPanel(UIName.TrialRewardPopup,HomeLandManager.SetRewardData(),function(id,rewardFunc)
NetManager.TakeMissionRewardRequest(TaskTypeDef.HomeLandTask,id, function(msg)
UIManager.OpenPanel(UIName.RewardItemPopup,msg.drop,1,function ()
if rewardFunc then
rewardFunc()
end
end)
end)
end,5)
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()
self:InitDetailBar()
end
function HomeLand:InitDetailBar()
local targetPos = bool and Vector3.zero or Vector3.New(1000,0,0)
self.Kuang:GetComponent("RectTransform").localPosition = targetPos
self.maskBtn:SetActive(bool)
for key, value in pairs(self.preList1) do
value:SetActive(false)
end
for key, value in pairs(self.preList2) do
value:SetActive(false)
end
for i = 1, 7 do
local data = HomeLandManager.BuildData[i]
if data.dataMain.Type == 1 and data.startTime > 0 then
--进度条部分
if data.dataSingle.Gain[1] ~= 14 then
local go = self.preList1[i]
if not go then
go = newObjToParent(self.progressPre,self.progress.transform)
self.preList1[i] = go
end
go:SetActive(true)
local icon = Util.GetGameObject(go,"Icon"):GetComponent("Image")
local num = Util.GetGameObject(go,"Num"):GetComponent("Text")
local slider = Util.GetGameObject(go,"Slide/Image"):GetComponent("Image")
icon.sprite = self.spLoader:LoadSprite(GetSpriteNameByItemId(data.dataSingle.Gain[1]))
local value = data.dataSingle.Storage[2][2]/100000 > 1 and math.floor(data.dataSingle.Storage[2][2]/100000).."" or data.dataSingle.Storage[2][2]
num.text = string.format("%s/%s",BagManager.GetTotalItemNum(data.dataSingle.Storage[2][1]),value)
slider.fillAmount = BagManager.GetTotalItemNum(data.dataSingle.Storage[2][1])/data.dataSingle.Storage[2][2]
end
--数值部分
local go2 = self.preList2[i]
if not go2 then
go2 = newObjToParent(self.detailPre,self.detail.transform)
self.preList2[i] = go2
end
go2:SetActive(true)
local icon = Util.GetGameObject(go2,"Icon"):GetComponent("Image")
local num = Util.GetGameObject(go2,"Num"):GetComponent("Text")
icon.sprite = self.spLoader:LoadSprite(GetSpriteNameByItemId(data.dataSingle.Gain[1]))
num.text = string.format("%s产量%s",ItemConfig[data.dataSingle.Gain[1]].Name,data.dataSingle.Gain[2])
end
end
end
function HomeLand:SetDetailBar()
self.maskBtn:SetActive(bool)
local targetPos = bool and Vector3.zero or Vector3.New(1000,0,0)
local rotation = bool and Vector3.New(0,180,0) or Vector3.zero
self.Kuang.transform:DOLocalMove(targetPos, 0.8)
self.BtnImage.transform:DORotate(rotation,0.8)
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
bool = false
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