363 lines
14 KiB
Lua
363 lines
14 KiB
Lua
require("Base/BasePanel")
|
|
GodWeaponUpPanel = Inherit(BasePanel)
|
|
local this = GodWeaponUpPanel
|
|
local tabType=1 --1升级 2升星
|
|
local godWeaponData
|
|
|
|
--长按升级状态
|
|
local _isClicked = false
|
|
local _isReqLvUp = false
|
|
local _isLongPress = false
|
|
local addLvNum=0
|
|
local isTriggerLongClick = false--长按是否升过级
|
|
local costItems={}
|
|
--初始化组件(用于子类重写)
|
|
function this:InitComponent()
|
|
this.btnBack = Util.GetGameObject(self.gameObject, "btnBack")
|
|
this.spLoader = SpriteLoader.New()
|
|
this.icon= Util.GetGameObject(self.gameObject, "iconBg/icon"):GetComponent("Image")
|
|
this.nameText=Util.GetGameObject(self.gameObject, "nameInfo/nameText"):GetComponent("Text")
|
|
this.curPropGrid=Util.GetGameObject(self.gameObject, "infoLayout/propertyInfo/allProp/curProp")
|
|
this.nextPropGrid=Util.GetGameObject(self.gameObject, "infoLayout/propertyInfo/allProp/nextProp")
|
|
this.upStarTab=Util.GetGameObject(self.gameObject,"tabBg/tabBox/upStarTab")
|
|
this.upLvTab=Util.GetGameObject(self.gameObject,"tabBg/tabBox/upLvTab")
|
|
this.selectBtn=Util.GetGameObject(self.gameObject,"tabBg/tabBox/selectBtn")
|
|
this.selectText=Util.GetGameObject(self.gameObject,"tabBg/tabBox/selectBtn/Text"):GetComponent("Text")
|
|
this.curLv=Util.GetGameObject(self.gameObject,"infoLayout/costMatBg/curLv/Text"):GetComponent("Text")
|
|
this.costGrid=Util.GetGameObject(self.gameObject,"infoLayout/costMatBg/costGrid")
|
|
this.skillLayout=Util.GetGameObject(self.gameObject,"infoLayout/skillLayout")
|
|
this.upStarBtn=Util.GetGameObject(self.gameObject,"infoLayout/btnLayout/upStarBtn")
|
|
this.upLvBtn=Util.GetGameObject(self.gameObject,"infoLayout/btnLayout/upLvBtn")
|
|
this.upLvTrigger = Util.GetEventTriggerListener(this.upLvBtn)
|
|
this.limitText=Util.GetGameObject(self.gameObject,"infoLayout/btnLayout/limitText"):GetComponent("Text")
|
|
this.jiantou=Util.GetGameObject(self.gameObject,"infoLayout/propertyInfo/jiantou")
|
|
this.starGrid=Util.GetGameObject(self.gameObject,"starGrid/starGrid")
|
|
this.skillScroll=Util.GetGameObject(self.gameObject,"infoLayout/skillLayout/skillScroll/skillGrid")
|
|
this.curSkillInfo=Util.GetGameObject(self.gameObject,"infoLayout/skillLayout/skillScroll/skillGrid/curSkillInfo")
|
|
this.nextSkillInfo=Util.GetGameObject(self.gameObject,"infoLayout/skillLayout/skillScroll/skillGrid/nextSkillInfo")
|
|
this.upLvTabRedPoint = Util.GetGameObject(this.upLvTab, "redPoint")
|
|
this.upStarTabRedPoint = Util.GetGameObject(this.upStarTab, "redPoint")
|
|
this.costItemViews={}
|
|
this.UpView = SubUIManager.Open(SubUIConfig.UpView, self.gameObject.transform, { showType = UpViewOpenType.ShowLeft })
|
|
end
|
|
|
|
--绑定事件(用于子类重写)
|
|
function this:BindEvent()
|
|
Util.AddClick(this.btnBack, function()
|
|
self:ClosePanel()
|
|
end)
|
|
Util.AddClick(this.upLvTab, function()
|
|
tabType=1
|
|
this.SetSelectBtn()
|
|
this.UpdateWinInfo()
|
|
end)
|
|
Util.AddClick(this.upStarTab, function()
|
|
tabType=2
|
|
this.SetSelectBtn()
|
|
this.UpdateWinInfo()
|
|
end)
|
|
|
|
Util.AddClick(this.upStarBtn, function()
|
|
local oldWarPower = FormationManager.GetFormationPower(FormationTypeDef.FORMATION_NORMAL)
|
|
local haveUpStarCost=GodWeaponManager.GetUpStarCost(godWeaponData)
|
|
local starConfig=ConfigManager.GetConfigDataByDoubleKey(ConfigName.ShenbingStar,"Star",godWeaponData.star,"Quality",godWeaponData.config.Quality)
|
|
local needNum=starConfig.ConsumeItemNum
|
|
if #haveUpStarCost>=needNum then
|
|
local costList={}
|
|
for i = 1, needNum do
|
|
costList[i]=haveUpStarCost[i]
|
|
end
|
|
NetManager.RequestMagicSoldierStrong(godWeaponData.Did,2,0,costList,function(msg)
|
|
this.UpdateWinInfo()
|
|
local newWarPower = FormationManager.GetFormationPower(FormationTypeDef.FORMATION_NORMAL)
|
|
--飘战力
|
|
PokemonManager.PiaoWarPowerChange(oldWarPower,newWarPower)
|
|
end)
|
|
else
|
|
PopupTipPanel.ShowTip("道具不足")
|
|
end
|
|
end)
|
|
Util.AddClick(this.upLvBtn, function()
|
|
this.LvUpClick(true)
|
|
end)
|
|
--长按升级按下状态
|
|
this._onPointerDown = function(Pointgo, data)
|
|
isTriggerLongClick = false
|
|
_isClicked = true
|
|
this.timePressStarted = Time.realtimeSinceStartup
|
|
end
|
|
--长按升级抬起状态
|
|
this._onPointerUp = function(Pointgo, data)
|
|
if _isLongPress and isTriggerLongClick then
|
|
--连续升级抬起请求升级
|
|
this.LongLvUpClick()
|
|
end
|
|
_isClicked = false
|
|
_isLongPress = false
|
|
end
|
|
this.upLvTrigger.onPointerDown = this.upLvTrigger.onPointerDown + this._onPointerDown
|
|
this.upLvTrigger.onPointerUp = this.upLvTrigger.onPointerUp + this._onPointerUp
|
|
end
|
|
|
|
--长按升级处理
|
|
function this.OnUpdate()
|
|
if _isClicked then
|
|
if Time.realtimeSinceStartup - this.timePressStarted > 0.4 then
|
|
_isLongPress = true
|
|
if not _isReqLvUp then
|
|
_isReqLvUp = true
|
|
this.LvUpClick(false)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--长按升级结束后请求协议
|
|
function this.LongLvUpClick()
|
|
NetManager.RequestMagicSoldierStrong(godWeaponData.Did,1,addLvNum,nil,function(msg)
|
|
_isReqLvUp = false
|
|
addLvNum=0
|
|
end)
|
|
end
|
|
|
|
--升级按钮点击事件处理
|
|
function this.LvUpClick(isSingleLvUp)
|
|
local isCost=true
|
|
local isLimit=godWeaponData.lv>=200
|
|
if #costItems>0 then
|
|
for i = 1, #costItems do
|
|
local haveCount=BagManager.GetItemCountById(costItems[i][1])
|
|
if haveCount<costItems[i][2] then
|
|
isCost=false
|
|
end
|
|
end
|
|
end
|
|
--各种判断能否升级
|
|
if isLimit or not isCost then
|
|
if not isSingleLvUp then
|
|
this.LongLvUpClick()
|
|
_isClicked = false
|
|
_isLongPress = false
|
|
isTriggerLongClick = true
|
|
end
|
|
if godWeaponData.lv>=200 then
|
|
PopupTipPanel.ShowTip("等级已达上限")
|
|
else
|
|
PopupTipPanel.ShowTip("道具不足")
|
|
end
|
|
return
|
|
end
|
|
if isSingleLvUp then --单次点击升级
|
|
local oldWarPower = FormationManager.GetFormationPower(FormationTypeDef.FORMATION_NORMAL)
|
|
NetManager.RequestMagicSoldierStrong(godWeaponData.Did,1,1,nil,function(msg)
|
|
GodWeaponManager.SetGodWeaponLv(godWeaponData.Did,1)
|
|
this.UpdateWinInfo()
|
|
local newWarPower = FormationManager.GetFormationPower(FormationTypeDef.FORMATION_NORMAL)
|
|
--飘战力
|
|
PokemonManager.PiaoWarPowerChange(oldWarPower,newWarPower)
|
|
end)
|
|
else
|
|
isTriggerLongClick = true
|
|
local oldWarPower = FormationManager.GetFormationPower(FormationTypeDef.FORMATION_NORMAL)
|
|
--前端先扣除材料
|
|
for i = 1, #costItems do
|
|
BagManager.HeroLvUpUpdateItemsNum(costItems[i][1],costItems[i][2])
|
|
end
|
|
addLvNum=addLvNum+1
|
|
GodWeaponManager.SetGodWeaponLv(godWeaponData.Did,1)
|
|
this.UpdateWinInfo()
|
|
local newWarPower = FormationManager.GetFormationPower(FormationTypeDef.FORMATION_NORMAL)
|
|
--飘战力
|
|
PokemonManager.PiaoWarPowerChange(oldWarPower,newWarPower)
|
|
_isReqLvUp = false
|
|
end
|
|
end
|
|
|
|
function this.SetSelectBtn()
|
|
local _btnTab
|
|
if tabType==1 then
|
|
_btnTab=this.upLvTab
|
|
|
|
this.selectText.text="升级"
|
|
else
|
|
_btnTab=this.upStarTab
|
|
this.selectText.text="升星"
|
|
end
|
|
this.selectBtn.transform:SetParent(_btnTab.transform)
|
|
this.selectBtn.transform:SetSiblingIndex(1)
|
|
this.selectBtn.transform.localPosition = Vector3.zero
|
|
this.selectBtn.transform.localScale = Vector3.one
|
|
end
|
|
|
|
|
|
--界面打开时调用(用于子类重写)
|
|
function this:OnOpen(_type,_data)
|
|
tabType=_type
|
|
godWeaponData=_data
|
|
this.SetSelectBtn()
|
|
this.icon.sprite = this.spLoader:LoadSprite(GetResourcePath(godWeaponData.config.Icon))
|
|
this.nameText.text=godWeaponData.config.Name
|
|
this.UpdateWinInfo()
|
|
this.UpView:OnOpen({ showType = UpViewOpenType.ShowLeft, panelType = PanelType.GodWeapon })
|
|
end
|
|
|
|
function this:OnShow()
|
|
FixedUpdateBeat:Add(this.OnUpdate, self)--长按方法注册
|
|
end
|
|
|
|
function this.UpdateWinInfo()
|
|
costItems={}
|
|
CheckRedPointStatus(RedPointType.GodWeapon)
|
|
local upLvRed = GodWeaponManager.CheckUpLvRedPoint(godWeaponData)
|
|
this.upLvTabRedPoint:SetActive(upLvRed)
|
|
local upStarRed = GodWeaponManager.CheckUpStarRedPoint(godWeaponData)
|
|
this.upStarTabRedPoint:SetActive(upStarRed)
|
|
this.curLv.text="等级:"..godWeaponData.lv
|
|
local starSize = Vector2.New(80,80)
|
|
PokemonManager.SetHeroStars(this.spLoader, this.starGrid, godWeaponData.star,1,starSize)
|
|
local curPropDic
|
|
local nextPropDic
|
|
local isLimit=false
|
|
if tabType==1 then
|
|
isLimit=godWeaponData.lv>=200
|
|
this.skillLayout.gameObject:SetActive(false)
|
|
this.upStarBtn.gameObject:SetActive(false)
|
|
this.upLvBtn.gameObject:SetActive(true)
|
|
this.curLv.transform.parent.gameObject:SetActive(true)
|
|
curPropDic=GodWeaponManager.GetSinglePokemonAddProData(godWeaponData.Did,godWeaponData.star,godWeaponData.lv)
|
|
if not isLimit then
|
|
nextPropDic=GodWeaponManager.GetSinglePokemonAddProData(godWeaponData.Did,godWeaponData.star,godWeaponData.lv+1)
|
|
local upLvCosts=ConfigManager.GetConfigDataByDoubleKey(ConfigName.ShenBingLevel,"Level",godWeaponData.lv,"Quality",godWeaponData.config.Quality).Consume
|
|
for i = 1, #upLvCosts do
|
|
costItems[i]=upLvCosts[i]
|
|
end
|
|
end
|
|
this.limitText.text="等级已满"
|
|
else
|
|
isLimit=godWeaponData.star>=5
|
|
this.skillLayout.gameObject:SetActive(true)
|
|
this.upStarBtn.gameObject:SetActive(true)
|
|
this.upLvBtn.gameObject:SetActive(false)
|
|
this.curLv.transform.parent.gameObject:SetActive(false)
|
|
curPropDic=GodWeaponManager.GetSinglePokemonAddProData(godWeaponData.Did,godWeaponData.star,godWeaponData.lv)
|
|
local curSkillInfos= GodWeaponManager.GetSingleGodWeaponSkillDes(godWeaponData.Did)
|
|
this.SetSkillInfo(this.curSkillInfo,"升星前技能",curSkillInfos)
|
|
if not isLimit then
|
|
nextPropDic=GodWeaponManager.GetSinglePokemonAddProData(godWeaponData.Did,godWeaponData.star+1,godWeaponData.lv)
|
|
local starConfig=ConfigManager.GetConfigDataByDoubleKey(ConfigName.ShenbingStar,"Star",godWeaponData.star,"Quality",godWeaponData.config.Quality)
|
|
costItems[1]={}
|
|
costItems[1][1]=godWeaponData.id
|
|
costItems[1][2]=starConfig.ConsumeItemNum
|
|
local nextSkillInfos=GodWeaponManager.GetSingleGodWeaponSkillDes(godWeaponData.Did,godWeaponData.star+1)
|
|
this.SetSkillInfo(this.nextSkillInfo,"升星后技能",nextSkillInfos)
|
|
this.nextSkillInfo.gameObject:SetActive(true)
|
|
else
|
|
this.nextSkillInfo.gameObject:SetActive(false)
|
|
end
|
|
LayoutRebuilder.ForceRebuildLayoutImmediate(this.skillScroll.transform)
|
|
this.limitText.text="星级已满"
|
|
end
|
|
|
|
this.SetPropInfo(curPropDic,this.curPropGrid)
|
|
---判断等级星级是否达到上限
|
|
if isLimit then
|
|
this.jiantou.gameObject:SetActive(false)
|
|
this.upStarBtn.gameObject:SetActive(false)
|
|
this.upLvBtn.gameObject:SetActive(false)
|
|
this.limitText.gameObject:SetActive(true)
|
|
this.nextPropGrid.gameObject:SetActive(false)
|
|
this.costGrid.gameObject:SetActive(false)
|
|
costItems={}
|
|
else
|
|
this.costGrid.gameObject:SetActive(true)
|
|
this.SetPropInfo(nextPropDic,this.nextPropGrid)
|
|
this.SetCostItemInfo(costItems)
|
|
this.limitText.gameObject:SetActive(false)
|
|
end
|
|
|
|
|
|
end
|
|
|
|
---设置属性信息
|
|
function this.SetPropInfo(_propDic,_propGrid)
|
|
local propInfoList={}
|
|
local index=1
|
|
for key, value in pairs(_propDic) do
|
|
propInfoList[index]={}
|
|
local propConfig=ConfigManager.GetConfigData(ConfigName.PropertyConfig,key)
|
|
propInfoList[index].name=propConfig.Info
|
|
propInfoList[index].val=value
|
|
index=index+1
|
|
end
|
|
for i = 1, _propGrid.transform.childCount do
|
|
local propText=_propGrid.transform:GetChild(i-1).gameObject
|
|
if i>#propInfoList then
|
|
propText:SetActive(false)
|
|
else
|
|
propText:SetActive(true)
|
|
propText:GetComponent("Text").text=propInfoList[i].name
|
|
Util.GetGameObject(propText,"val"):GetComponent("Text").text=propInfoList[i].val
|
|
end
|
|
end
|
|
end
|
|
--设置升星技能信息显示
|
|
function this.SetSkillInfo(_skillInfoObj,_titleStr,_skillDatas)
|
|
Util.GetGameObject(_skillInfoObj,"title"):GetComponent("Text").text=_titleStr
|
|
local desStr=""
|
|
for i = 1, #_skillDatas do
|
|
desStr=desStr..string.format("【%s】%s",_skillDatas[i].title,_skillDatas[i].des)
|
|
if i< #_skillDatas then
|
|
desStr=desStr.."\n"
|
|
end
|
|
end
|
|
Util.GetGameObject(_skillInfoObj,"des"):GetComponent("Text").text=desStr
|
|
LayoutRebuilder.ForceRebuildLayoutImmediate(_skillInfoObj.transform)
|
|
end
|
|
|
|
--设置消耗材料显示
|
|
function this.SetCostItemInfo(_costItems)
|
|
if not this.costItemViews then
|
|
this.costItemViews = {}
|
|
end
|
|
for k,v in ipairs(this.costItemViews) do
|
|
v.gameObject:SetActive(false)
|
|
end
|
|
for i = 1, #_costItems do
|
|
local view
|
|
if i<=#this.costItemViews then
|
|
view=this.costItemViews[i]
|
|
else
|
|
view= SubUIManager.Open(SubUIConfig.ItemView, this.costGrid.transform)
|
|
table.insert(this.costItemViews,view)
|
|
end
|
|
view:OnOpen(false,{_costItems[i][1],_costItems[i][2]},0.9,true,true,false,this.sortingOrder)
|
|
view.gameObject:SetActive(true)
|
|
view.addImage.gameObject:SetActive(false)
|
|
if tabType==2 then
|
|
local haveUpStarCost=GodWeaponManager.GetUpStarCost(godWeaponData)
|
|
local needNum=_costItems[i][2]
|
|
view.num:GetComponent("Text").text=string.format("%s/%s",#haveUpStarCost,_costItems[i][2])
|
|
if #haveUpStarCost>=needNum then
|
|
view.num:GetComponent("Text").color=UIColor.WRITE
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function this:OnSortingOrderChange()
|
|
this.sortingOrder = self.sortingOrder
|
|
end
|
|
|
|
|
|
--界面关闭时调用(用于子类重写)
|
|
function this:OnClose()
|
|
FixedUpdateBeat:Remove(this.OnUpdate, self)
|
|
end
|
|
|
|
--界面销毁时调用(用于子类重写)
|
|
function this:OnDestroy()
|
|
this.spLoader:Destroy()
|
|
SubUIManager.Close(this.UpView)
|
|
end
|
|
|
|
return this |