369 lines
17 KiB
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 |