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

369 lines
17 KiB
Lua

local TrainBuildPanel = quick_class("TrainBuildPanel", BasePanel)
local HomeLandConfig = ConfigManager.GetConfig(ConfigName.TrainBuild)
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 TrainBuildPanel: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.PriviBtn = Util.GetGameObject(self.map,"goBtn")
self.RightUp = Util.GetGameObject(self.map,"RightUp")
self.RightDown = Util.GetGameObject(self.map,"RightDown")
self.helpBtn = Util.GetGameObject(self.RightUp, "helpBtn")
self.helpPosition=self.helpBtn:GetComponent("RectTransform").localPosition
--progress
self.helpBtn1 = Util.GetGameObject(self.progress,"Help1")
self.progressPre = Util.GetGameObject(self.progress,"progressPre")
self.preList1 = {}
--detail
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].Title = Util.GetGameObject(self.mapData[i].Obj,"Title")
self.mapData[i].levelImg = Util.GetGameObject(self.mapData[i].Title,"levelImg")
self.mapData[i].level = Util.GetGameObject(self.mapData[i].levelImg,"levelText"):GetComponent("Text")
self.mapData[i].NameImg = Util.GetGameObject(self.mapData[i].Title,"NameImg")
self.mapData[i].Name = Util.GetGameObject(self.mapData[i].Title,"NameImg/Text"):GetComponent("Text")
self.mapData[i].RedPoint = Util.GetGameObject(self.mapData[i].Title,"redpoint")
self.mapData[i].Lock = Util.GetGameObject(self.mapData[i].Title,"lock")
self.mapData[i].RedPoint:SetActive(false)
self.mapData[i].CanGet = Util.GetGameObject(self.mapData[i].Obj,"CanGet")
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].BtnsCanvas = self.mapData[i].Btns:GetComponent("Canvas")
self.mapData[i].OpenLimit = Util.GetGameObject(self.mapData[i].Title,"OpenLimit")
self.mapData[i].limitText = Util.GetGameObject(self.mapData[i].OpenLimit,"OpenLimitText"):GetComponent("Text")
self.mapData[i].upgradeImg = Util.GetGameObject(self.mapData[i].Obj,"Updating")
self.mapData[i].upgradeImg:SetActive(true)
self.mapData[i].updateTime = Util.GetGameObject(self.mapData[i].Obj,"updateTime")
self.mapData[i].updateTimeText = Util.GetGameObject(self.mapData[i].updateTime,"updateText"):GetComponent("Text")
self.mapData[i].trainTime = Util.GetGameObject(self.mapData[i].Obj,"trainTime")
self.mapData[i].trainTimeTxt = Util.GetGameObject(self.mapData[i].Obj,"trainTime/updateText"):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].upGradeRed = Util.GetGameObject(self.mapData[i].btnUpgrade,"upGradeRed")
self.mapData[i].leftTime = -1
self.mapData[i].showTime = -1
self.mapData[i].trainLeftTime = -1
self.mapData[i].effect1 = Util.GetGameObject(self.mapData[i].upgradeImg,"c_jianzao")
self.mapData[i].effect2 = Util.GetGameObject(self.mapData[i].upgradeImg,"c_shengji")
self.mapData[i].effect1:SetActive(false)
self.mapData[i].effect2:SetActive(false)
end
self.curSelect = 0
end
function TrainBuildPanel:BindEvent()
Util.AddClick(self.btnBack, function()
PlaySoundWithoutClick(SoundConfig.Sound_UICancel)
self:ClosePanel()
end)
--帮助按钮
Util.AddClick(self.helpBtn, function()
UIManager.OpenPanel(UIName.HelpPopup, HELP_TYPE.TrainBuild, self.helpPosition.x,self.helpPosition.y)
end)
Util.AddClick(self.Bg, function()
self.curSelect = 0
for j = 1, 7 do
self.mapData[j].Btns:SetActive(false)
end
end)
for i = 1, 7 do
--打开菜单
Util.AddOnceClick(self.mapData[i].Obj,function ()
if self.curSelect ~= i then
for j = 1, 7 do
self.mapData[j].Btns:SetActive(false)
end
self.curSelect = i
if TrainBuildManager.BuildData[i].dataMain.IsOpen ~= 1 then
PopupTipPanel.ShowTip(string.format("%s 暂未开放",TrainBuildManager.BuildData[i].dataMain.Name))
return
end
if HomeLandConfig[i].UnlockLevel[1] == 2 and TrainBuildManager.BuildData[1].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].btnUpgrade,function ()
--UIManager.OpenPanel(UIName.GeneralInfoPopup,GENERALINFO_TYPE.HomeLandUpgrade,{HomeLandManager.BuildData[i],self.mapData[i]})
UIManager.OpenPanel(UIName.TrainBuildLvUpPanel,{TrainBuildManager.BuildData[i],self.mapData[i]})
end)
--打开信息界面
Util.AddOnceClick(self.mapData[i].btnDetail,function ()
UIManager.OpenPanel(UIName.TrainSelectHeroPanel,TrainBuildManager.BuildData[i],self.mapData[i].trainLeftTime)
end)
end
end
function TrainBuildPanel:AddListener()
Game.GlobalEvent:AddEvent(GameEvent.UI.OnUpdateData, self.OnShow,self)
Game.GlobalEvent:AddEvent(GameEvent.Bag.BagGold, self.OnShow,self)
end
function TrainBuildPanel:RemoveListener()
Game.GlobalEvent:RemoveEvent(GameEvent.UI.OnUpdateData, self.OnShow,self)
Game.GlobalEvent:RemoveEvent(GameEvent.Bag.BagGold, self.OnShow,self)
end
--待功能扩展(试图打开某个状态)
function TrainBuildPanel:OnOpen()
self.UpView:OnOpen({ showType = UpViewOpenType.ShowLeft, panelType = PanelType.Main })
end
function TrainBuildPanel:OnSortingOrderChange()
for i = 1, 7 do
local curObj = self.mapData[i]
Util.SetParticleSortLayer(curObj.effect1,self.sortingOrder + 1)
Util.SetParticleSortLayer(curObj.effect2,self.sortingOrder + 1)
curObj.BtnsCanvas.overrideSorting = true
curObj.BtnsCanvas.sortingOrder = self.sortingOrder + 2
end
end
function TrainBuildPanel:OnShow()
self.curSelect = 0
for j = 1, 7 do
self.mapData[j].Btns:SetActive(false)
end
self:SetBuildsState()
self:SetTime()
--self:InitDetailBar()
self:SetRedPoint()
end
--设置地图内建筑信息
function TrainBuildPanel:SetBuildsState()
for i = 1, 7 do
local data = TrainBuildManager.BuildData[i]
local curObj = self.mapData[i]
curObj.data = TrainBuildManager.BuildData[i]
curObj.OpenLimit:SetActive(true)
curObj.Lock:SetActive(true)
curObj.RedPoint:SetActive(false)
curObj.btnUpgrade:SetActive(false)
curObj.levelImg:SetActive(false)
curObj.Name.text=data.dataMain.Name
Util.SetGray(curObj.NameImg,true)
curObj.effect1:SetActive(false)
curObj.updateTime:SetActive(false)
curObj.CanGet:SetActive(false)
curObj.btnDetail:SetActive(false)
curObj.trainTime:SetActive(false)
Util.SetParticleSortLayer(curObj.effect1,self.sortingOrder + 1)
Util.SetParticleSortLayer(curObj.effect2,self.sortingOrder + 1)
curObj.BtnsCanvas.overrideSorting = true
curObj.BtnsCanvas.sortingOrder = self.sortingOrder + 2
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 TrainBuildManager.BuildData[1].level < HomeLandConfig[i].UnlockLevel[2] then
curObj.limitText.text = string.format("主城到达%s级开启",HomeLandConfig[i].UnlockLevel[2])
else
curObj.OpenLimit:SetActive(false)
curObj.Lock:SetActive(false)
Util.SetGray(curObj.NameImg,false)
if data.dataSingle then
curObj.level.text = string.format("%s级",data.dataSingle.level)
curObj.levelImg:SetActive(true)
end
end
if data.dataSingle then
curObj.btnDetail:SetActive(data.dataSingle.Position>0)
LogError("data.endTime===================="..data.endTime)
if data.endTime > GetTimeStamp() then--如果有结束时间说明在升级,可以取消,可以加速
curObj.effect1: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)
curObj.btnUpgrade:SetActive(true)
else--如果没有就是可以点击升级
curObj.updateTime:SetActive(false)
curObj.leftTime=-1
if data.dataSingle.Cost then
-- LogGreen("Name:"..tostring(data.dataSingle.Name).." cost:"..tostring(data.dataSingle.Cost[1][1]).."#"..data.dataSingle.Cost[1][2])
curObj.btnUpgrade:SetActive(true)
else
curObj.btnUpgrade:SetActive(false)
end
end
end
if data.heroId and data.heroId~="" then
local heroData=HeroManager.GetSingleHeroData(data.heroId)
if heroData then
curObj.Icon.sprite = self.spLoader:LoadSprite(GetResourcePath(heroData.heroConfig.Icon))
local pos=data.dataSingle.Position
local max=0
local curValue=0
local train=ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.Train,"HeroID",heroData.heroConfig.Id,"Level",heroData.HeroTraining.trainingLv)
if train then
local aaa=ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.TrainSetting,"PoolID",train.TrainSettingID,"Level",heroData.HeroTraining.trainingLv)
if pos==1 then
max=aaa.TrainExp1
curValue=heroData.HeroTraining.attackExp
elseif pos==2 then
max=aaa.TrainExp2
curValue=heroData.HeroTraining.defenseExp
elseif pos==3 then
max=aaa.TrainExp3
curValue=heroData.HeroTraining.hpExp
end
end
--LogError("curvalue==========================="..curValue)
local endTime=data.heroStarTime+math.ceil((max-curValue)/data.dataSingle.Gain)*60
curObj.trainLeftTime=endTime-GetTimeStamp()
--LogError("endtime=================================="..endTime.." trainLeftTime=="..curObj.trainLeftTime)
curObj.CanGet:SetActive(true)
PlayUIAnim(curObj.CanGet)
Util.AddOnceClick(curObj.CanGet,function ()
if curObj.trainLeftTime>0 then
local sureFunc=function()
NetManager.TrainingRequest(data.dataMain.Id,data.heroId,2,function ()
self:OnShow()
end)
end
local args={}
args[1]="特训未完成是否提前结束?"
args[2]="结束"
args[3]="取消"
args[4]=sureFunc
UIManager.OpenPanel(UIName.GMCommonConfirmPanel,args)
else
LogError("data.heroid==============================="..data.heroId)
NetManager.TrainingRequest(data.dataMain.Id,data.heroId,2,function ()
self:OnShow()
end)
end
end)
else
LogError("herodata=========================================nii")
end
else
curObj.trainLeftTime=-1
end
else
curObj.limitText.text = "暂未开放"
end
end
end
--时间
function TrainBuildPanel: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
--LogError("(curObj.data.dataSingle.Time-curObj.leftTime)=="..(curObj.data.dataSingle.Time-curObj.leftTime).." curObj.data.dataSingle.Time=="..curObj.data.dataSingle.Time)
curObj.timeSlide.fillAmount = (curObj.data.dataSingle.Time-curObj.leftTime)/curObj.data.dataSingle.Time
if curObj.leftTime < 0 then
curObj.effect2:SetActive(true)
NetManager.TrainingArchitectureInfoRequest(function ()
self:OnShow()
if UIManager.IsOpen(UIName.MsgPanel) then
UIManager.ClosePanel(UIName.MsgPanel)
end
PopupTipPanel.ShowTip(string.format("<color=#00FF00>%s</color>已升级至<color=#00FF00>%s</color>级",curObj.data.dataMain.Name,curObj.data.dataSingle.level))
Timer.New(function ()
curObj.effect2:SetActive(false)
end,1):Start()
end)
end
end
if curObj.trainLeftTime >= 0 then
--LogError("curObj.trainLeftTime==="..curObj.trainLeftTime)
curObj.trainTimeTxt.text = TimeToFelaxible(curObj.trainLeftTime)
curObj.trainLeftTime = curObj.trainLeftTime -1
curObj.trainTime:SetActive(true)
if curObj.trainLeftTime < 0 then
--curObj.effect2:SetActive(true)
curObj.trainTimeTxt.text="特训完成"
curObj.RedPoint:SetActive(true)
end
else
if curObj.data.heroId and curObj.data.heroId~="" then
curObj.trainTime:SetActive(true)
curObj.trainTimeTxt.text="特训完成"
curObj.RedPoint:SetActive(true)
end
end
end
end, 1, -1, true)
self.timer:Start()
end
function TrainBuildPanel:SetRedPoint()
end
function TrainBuildPanel:OnClose()
self.curSelect = 0
bool = false
for j = 1, 7 do
self.mapData[j].Btns:SetActive(false)
end
end
function TrainBuildPanel:OnDestroy()
self.spLoader:Destroy()
SubUIManager.Close(self.UpView)
self.UpView = nil
if self.timer then
self.timer:Stop()
self.timer = nil
end
end
return TrainBuildPanel