miduo_client/Assets/ManagedResources/~Lua/Modules/RoleInfo/RoleEquipChangePopup.lua

449 lines
22 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.

require("Base/BasePanel")
RoleEquipChangePopup = Inherit(BasePanel)
local this=RoleEquipChangePopup
local type--1 穿装备 2 卸装备 3 替换装备
local curHeroData
local curEquipData
local nextEquipData
local openThisPanel
local equipIdList
local equipDataList
local position
local curSuitProGo = {}--当前套装属性对象
local nextSuitProGo = {}--将要替换套装属性对象
local BaiJinProGo = {}--白金套装属性对象
local equipSuit = {}--当前英雄穿戴装备的套装信息 [suitId] = 件数
local baijinSuit = {}--当前英雄穿戴装备的白金套装信息 [suitId] = 件数
local equipSuiteConfig = ConfigManager.GetConfig(ConfigName.EquipSuiteConfig)
local propertyConfig = ConfigManager.GetConfig(ConfigName.PropertyConfig)
local passiveSkillConfig = ConfigManager.GetConfig(ConfigName.PassiveSkillConfig)
local _MainProList = {}
local _NextProList = {}
local change
--初始化组件(用于子类重写)
function RoleEquipChangePopup:InitComponent()
this.spLoader = SpriteLoader.New()
this.btnBack= Util.GetGameObject(self.transform, "btnBack")
this.go = Util.GetGameObject(self.transform, "GameObject")
this.mainProItem = Util.GetGameObject(this.go,"curProName")
this.mainProItem:SetActive(false)
this.otherProPre=Util.GetGameObject(this.go,"otherPro")
this.otherProPre:SetActive(false)
this.baijinProPre=Util.GetGameObject(this.go,"baijinPro")
this.baijinProPre:SetActive(false)
this.equipPanel = {}
for i = 1 ,2 do
if not this.equipPanel[i] then
this.equipPanel[i] = {}
this.equipPanel[i].bg = Util.GetGameObject(this.go, "bg"..i)
this.equipPanel[i].equipInfo = Util.GetGameObject(this.equipPanel[i].bg,"equipInfo")
this.equipPanel[i].desc= Util.GetGameObject(this.equipPanel[i].equipInfo,"Text"):GetComponent("Text")
this.equipPanel[i].curEquipName=Util.GetGameObject(this.equipPanel[i].equipInfo,"name/text"):GetComponent("Text")
this.equipPanel[i].curEquipFrame=Util.GetGameObject(this.equipPanel[i].equipInfo,"frame"):GetComponent("Image")
this.equipPanel[i].curEquipIcon=Util.GetGameObject(this.equipPanel[i].equipInfo,"icon"):GetComponent("Image")
this.equipPanel[i].qualityText=Util.GetGameObject(this.equipPanel[i].equipInfo,"qualityText"):GetComponent("Text")
this.equipPanel[i].powerNum1=Util.GetGameObject(this.equipPanel[i].equipInfo,"powerNum"):GetComponent("Text")
this.equipPanel[i].powerUPorDown1=Util.GetGameObject(this.equipPanel[i].equipInfo,"powerUPorDown")
this.equipPanel[i].bg1Star=Util.GetGameObject(this.equipPanel[i].equipInfo,"star")
this.equipPanel[i].proGrid = Util.GetGameObject(this.equipPanel[i].equipInfo,"proGrid")
this.equipPanel[i].effect = Util.GetGameObject(this.equipPanel[i].equipInfo,"UI_effect_WuCai_Kuang")
this.equipPanel[i].curEquipTypeText=Util.GetGameObject(this.equipPanel[i].proGrid,"equipTypeText"):GetComponent("Text")
this.equipPanel[i].curEquipLvText=Util.GetGameObject(this.equipPanel[i].proGrid,"equipLvText")
this.equipPanel[i].curEquipLvText:SetActive(false)
this.equipPanel[i].curEquipOrOkText=Util.GetGameObject(this.equipPanel[i].proGrid,"equipOrOkText"):GetComponent("Text")
this.equipPanel[i].curEquipPosText=Util.GetGameObject(this.equipPanel[i].proGrid,"equipPosText"):GetComponent("Text")
this.equipPanel[i].rect = Util.GetGameObject(this.equipPanel[i].bg,"rect")
this.equipPanel[i].mainProGrid = Util.GetGameObject(this.equipPanel[i].bg,"rect/content/mainPro/bg")
this.equipPanel[i].curotherProscroll=Util.GetGameObject(this.equipPanel[i].bg,"rect/content/scroll")
this.equipPanel[i].otherProGrid=Util.GetGameObject(this.equipPanel[i].bg,"rect/content/scroll/grid")
this.equipPanel[i].baijinScroll=Util.GetGameObject(this.equipPanel[i].bg,"rect/content/baijin")
this.equipPanel[i].baijinProGrid=Util.GetGameObject(this.equipPanel[i].bg,"rect/content/baijin/grid")
this.equipPanel[i].castInfoObject=Util.GetGameObject(this.equipPanel[i].bg,"castInfoObject")
this.equipPanel[i].curCastInfo=Util.GetGameObject( this.equipPanel[i].castInfoObject,"castInfo"):GetComponent("Text")
this.equipPanel[i].castInfoObject:SetActive(false)
this.equipPanel[i].btns = Util.GetGameObject(this.equipPanel[i].bg,"btns")
this.equipPanel[i].curEquipBtnRefresh=Util.GetGameObject(this.equipPanel[i].bg,"btns/btnRefresh")
this.equipPanel[i].curEquipBtnRefresh.gameObject:SetActive(false)
this.equipPanel[i].curEquipBtnDown=Util.GetGameObject(this.equipPanel[i].bg,"btns/btnChange")
this.equipPanel[i].curEquipBtnDownText=Util.GetGameObject(this.equipPanel[i].curEquipBtnDown,"Text"):GetComponent("Text")
this.equipPanel[i].curEquipText=Util.GetGameObject(this.equipPanel[i].bg,"btns/curEquipText")
end
end
end
--绑定事件(用于子类重写)
function RoleEquipChangePopup:BindEvent()
Util.AddClick(this.btnBack, function()
PlaySoundWithoutClick(SoundConfig.Sound_UICancel)
self:ClosePanel()
end)
for i = 1,#this.equipPanel do
Util.AddClick(this.equipPanel[i].curEquipBtnDown, function()
equipIdList={}
equipDataList={}
if i == 1 then
table.insert(equipIdList,tostring(curEquipData.id))
table.insert(equipDataList,curEquipData)
if type == 1 then
NetManager.EquipWearRequest(curHeroData.dynamicId,equipIdList,1,function ()
self:ClosePanel()
openThisPanel.UpdateEquipPosHeroData(1,type,equipDataList,0,position)
end)
else
NetManager.EquipUnLoadOptRequest(curHeroData.dynamicId,equipIdList ,1, function ()
self:ClosePanel()
openThisPanel.UpdateEquipPosHeroData(1,type,equipDataList)
end)
end
elseif i == 2 then
table.insert(equipIdList,tostring(nextEquipData.id))
table.insert(equipDataList,nextEquipData)
NetManager.EquipWearRequest(curHeroData.dynamicId,equipIdList,1,function ()
self:ClosePanel()
openThisPanel.UpdateEquipPosHeroData(1,type,equipDataList,curEquipData,position)
end)
end
end)
end
end
--添加事件监听(用于子类重写)
function RoleEquipChangePopup:AddListener()
end
--移除事件监听(用于子类重写)
function RoleEquipChangePopup:RemoveListener()
end
--界面打开时调用(用于子类重写)
function RoleEquipChangePopup:OnOpen(...)
local data={...}
openThisPanel=data[1]
type=data[2]--1 穿戴 2 卸下 3 替换
LogRed("OpenType:"..tostring(type))
if type==1 or type==2 then
curHeroData=data[3]
curEquipData=data[4]
position=data[5]
elseif type==3 then
curHeroData=data[3]
curEquipData=data[4]
nextEquipData=data[5]
position=data[6]
elseif type==4 then
curHeroData=data[3]
curEquipData=data[4]
nextEquipData=data[5]
position=data[6]
end
change = data[7]
end
function RoleEquipChangePopup:OnShow()
equipSuit = {}
baijinSuit = {}
if curHeroData then
equipSuit = HeroManager.GetCurHeroEquipSuitPros(curHeroData.equipIdList)
baijinSuit = HeroManager.GetCurHeroBaiJinEquipSuitPros(curHeroData.equipIdList)
end
if type==1 then
this.equipPanel[2].bg:SetActive(false)
this.equipPanel[1].bg:SetActive(true)
this.equipPanel[1].curEquipText:SetActive(false)
this.equipPanel[1].curEquipBtnDown:SetActive(true)
this.equipPanel[1].curEquipBtnDownText.text = Language[12220]
this.ShowCurEquipData(1)
elseif type==2 then
this.equipPanel[2].bg:SetActive(false)
this.equipPanel[1].bg:SetActive(true)
this.equipPanel[1].curEquipText:SetActive(false)
this.equipPanel[1].curEquipBtnDownText.text = Language[12221]
if HarmonyManager:IsShowGongMingEqiup(curHeroData.dynamicId) and curHeroData.harmonyGongMing then
this.equipPanel[1].curEquipBtnDown:SetActive(false)
else
this.equipPanel[1].curEquipBtnDown:SetActive(true)
end
this.ShowCurEquipData(1)
elseif type==3 then
this.equipPanel[2].bg:SetActive(true)
this.equipPanel[1].bg:SetActive(false)
this.equipPanel[1].curEquipText:SetActive(true)
this.equipPanel[2].curEquipText:SetActive(false)
this.equipPanel[1].curEquipBtnDown:SetActive(false)
this.equipPanel[2].curEquipBtnDown:SetActive(true)
this.equipPanel[2].curEquipBtnDownText.text = Language[12261]
--"替 换"
-- this.ShowCurEquipData(2)
this.NextCurEquipData()
elseif type==4 then
this.equipPanel[2].bg:SetActive(false)
this.equipPanel[1].bg:SetActive(true)
this.equipPanel[1].curEquipText:SetActive(false)
this.equipPanel[1].curEquipBtnDown:SetActive(false)
this.ShowCurEquipData(4)
end
if change and change == 0 then
for k,v in ipairs(this.equipPanel) do
v .btns.gameObject:SetActive(false)
end
else
for k,v in ipairs(this.equipPanel) do
v .btns.gameObject:SetActive(true)
end
end
for i = 1,#this.equipPanel do
ForceRebuildLayout(this.equipPanel[i].baijinProGrid.transform)
ForceRebuildLayout(this.equipPanel[i].rect.transform)
ForceRebuildLayout(this.equipPanel[i].bg.transform)
end
ForceRebuildLayout(this.go.transform)
end
function this.SetEquipData(index,data,equipConfigData,itemConfigData)
this.equipPanel[index].powerNum1.text=EquipManager.CalculateWarForce(data.id)
EquipManager.SetEquipStarShow(this.spLoader, this.equipPanel[index].bg1Star,data.id)
this.equipPanel[index].desc.text= GetLanguageStrById(itemConfigData.ItemDescribe)
this.equipPanel[index].effect:SetActive(equipConfigData.Quality>=7)
this.equipPanel[index].qualityText.text= GetStringByEquipQua(equipConfigData.Quality,GetQuaStringByEquipQua(equipConfigData.Quality))
this.equipPanel[index].curEquipName.text=GetStringByEquipQua(equipConfigData.Quality,GetLanguageStrById(equipConfigData.Name))
this.equipPanel[index].curEquipFrame.sprite = this.spLoader:LoadSprite(GetQuantityImageByquality(equipConfigData.Quality))
this.equipPanel[index].curEquipIcon.sprite = this.spLoader:LoadSprite(GetResourcePath(itemConfigData.ResourceID))
this.equipPanel[index].curEquipTypeText.text=string.format(Language[11555],GetEquipPosStrByEquipPosNum(equipConfigData.Position))
-- local strPos=""
-- if equipConfigData.ProfessionLimit==0 then
-- strPos= "装备种类:%s"
-- else
-- strPos= "装备种类:%s"
-- end
-- this.equipPanel[index].curEquipPosText.text=string.format(strPos,GetJobStrByJobNum(equipConfigData.ProfessionLimit))
this.equipPanel[index].curEquipPosText.text=string.format(Language[12262],GetEquipPosStrByEquipPosNum(equipConfigData.Position))
if not this.mainProList then
this.mainProList = {}
end
if not this.mainProList[index] then
this.mainProList[index] = {}
end
for _, item in ipairs(this.mainProList[index]) do
item:SetActive(false)
end
local mainAttribute=EquipManager.GetMainProList(equipConfigData)
for key, prop in ipairs(mainAttribute) do
local proConfigData = ConfigManager.GetConfigData(ConfigName.PropertyConfig, prop.propertyId)
if proConfigData then
if not this.mainProList[index][key] then
this.mainProList[index][key] = newObjToParent(this.mainProItem, this.equipPanel[index].mainProGrid)
end
this.mainProList[index][key]:SetActive(true)
this.mainProList[index][key]:GetComponent("Text").text = GetLanguageStrById(proConfigData.Info)
local vText = Util.GetGameObject(this.mainProList[index][key], "curProVale"):GetComponent("Text")
if prop.propertyValue > 0 then
vText.text = "+"..GetPropertyFormatStr(proConfigData.Style, prop.propertyValue)
else
vText.text = GetPropertyFormatStr(proConfigData.Style, prop.propertyValue)
end
end
end
end
-- 1 当前 2 下一个
function this.ShowCurEquipData(index)
local equipConfigData=ConfigManager.GetConfigData(ConfigName.EquipConfig, curEquipData.id)
local itemConfigData=ConfigManager.GetConfigData(ConfigName.ItemConfig, curEquipData.id)
this.SetEquipData(1,curEquipData,equipConfigData,itemConfigData)
this.equipPanel[1].powerUPorDown1:SetActive(false)
if(nextEquipData~=nil and index==2) then
if(EquipManager.CalculateWarForce(nextEquipData.id)<EquipManager.CalculateWarForce(curEquipData.id)) then
this.equipPanel[1].powerUPorDown1:SetActive(true)
this.equipPanel[1].powerUPorDown1:GetComponent("Image").sprite=this.spLoader:LoadSprite(PowerChangeIconDef[1])
elseif(EquipManager.CalculateWarForce(nextEquipData.id)>EquipManager.CalculateWarForce(curEquipData.id)) then
this.equipPanel[1].powerUPorDown1:SetActive(true)
this.equipPanel[1].powerUPorDown1:GetComponent("Image").sprite=this.spLoader:LoadSprite(PowerChangeIconDef[2])
end
end
--套装属性
local endProList = {}
if type == 1 or #equipSuit <= 0 then
--LogGreen("equipConfigData.Star111111:"..equipConfigData.Star)
if equipSuiteConfig[equipConfigData.Star] then
for i = 1, #equipSuiteConfig[equipConfigData.Star].SuiteValue do
table.insert(endProList,{equipConfigData.Star,equipSuiteConfig[equipConfigData.Star].SuiteValue[i]})
end
end
else
endProList = equipSuit
end
if endProList and #endProList > 0 then
this.equipPanel[1].curotherProscroll:SetActive(true)
for i = 1, math.max(#endProList, #curSuitProGo) do
if not curSuitProGo[i] then
curSuitProGo[i] = newObjToParent(this.otherProPre,this.equipPanel[1].otherProGrid)
end
curSuitProGo[i].gameObject:SetActive(false)
end
for i = 1, #endProList do
local go = curSuitProGo[i]
go.gameObject:SetActive(true)
--type=data[2]--1 穿戴 2 卸下 3 替换
local proId = endProList[i][2][2]
local proVa = endProList[i][2][3]
local suitNum = endProList[i][2][1]
local Star = endProList[i][1]
LogGreen("#equipSuit:"..tostring(#equipSuit))
if type ~= 1 and #equipSuit > 0 then--激活的要变颜色
Util.GetGameObject(go.transform, "curProName"):GetComponent("Text").text = "<color=#66FF00>" .. GetLanguageStrById(propertyConfig[proId].Info) .."+ "..GetPropertyFormatStr(propertyConfig[proId].Style,proVa) .. "</color>"
Util.GetGameObject(go.transform, "curProVale"):GetComponent("Text").text = "<color=#66FF00>(" .. GetEquipSuitStr(Star,suitNum) .. ")</color>"
else
Util.GetGameObject(go.transform, "curProName"):GetComponent("Text").text = "<color=#B9AC97>" .. GetLanguageStrById(propertyConfig[proId].Info) .."+ "..GetPropertyFormatStr(propertyConfig[proId].Style,proVa) .. "</color>"
Util.GetGameObject(go.transform, "curProVale"):GetComponent("Text").text = "<color=#B9AC97>(" .. GetEquipSuitStr(Star,suitNum) .. ")</color>"
end
end
else
this.equipPanel[1].curotherProscroll:SetActive(false)
end
-- 设置白金装备套装
this.SetBaijinProShow(1, curEquipData,equipConfigData,itemConfigData)
end
function this.NextCurEquipData()
local equipConfigData=ConfigManager.GetConfigData(ConfigName.EquipConfig, nextEquipData.id)
local itemConfigData=ConfigManager.GetConfigData(ConfigName.ItemConfig, nextEquipData.id)
this.SetEquipData(2,nextEquipData,equipConfigData,itemConfigData)
this.equipPanel[2].powerUPorDown1:SetActive(false)
if(EquipManager.CalculateWarForce(nextEquipData.id)>EquipManager.CalculateWarForce(curEquipData.id)) then
this.equipPanel[2].powerUPorDown1:SetActive(true)
this.equipPanel[2].powerUPorDown1:GetComponent("Image").sprite=this.spLoader:LoadSprite(PowerChangeIconDef[1])
elseif(EquipManager.CalculateWarForce(nextEquipData.id)<EquipManager.CalculateWarForce(curEquipData.id)) then
this.equipPanel[2].powerUPorDown1:SetActive(true)
this.equipPanel[2].powerUPorDown1:GetComponent("Image").sprite=this.spLoader:LoadSprite(PowerChangeIconDef[2])
end
--套装属性
--LogGreen("equipConfigData.Star:"..equipConfigData.Star)
if equipSuiteConfig[equipConfigData.Star] then
this.equipPanel[2].curotherProscroll:SetActive(true)
local curSuitConFig = equipSuiteConfig[equipConfigData.Star]
if curSuitConFig then
for i = 1, math.max(#curSuitConFig.SuiteValue, #nextSuitProGo) do
if not nextSuitProGo[i] then
nextSuitProGo[i] = newObjToParent(this.otherProPre,this.equipPanel[2].otherProGrid)
end
nextSuitProGo[i].gameObject:SetActive(false)
end
for i = 1, #curSuitConFig.SuiteValue do
local go = nextSuitProGo[i]
go.gameObject:SetActive(true)
--type=data[2]--1 穿戴 2 卸下 3 替换
Util.GetGameObject(go.transform, "curProName"):GetComponent("Text").text = "<color=#B9AC97>" .. GetLanguageStrById(propertyConfig[curSuitConFig.SuiteValue[i][2]].Info) .."+ "..GetPropertyFormatStr(propertyConfig[curSuitConFig.SuiteValue[i][2]].Style,curSuitConFig.SuiteValue[i][3]).. "</color>"
Util.GetGameObject(go.transform, "curProVale"):GetComponent("Text").text = "<color=#B9AC97>(+" .. GetEquipSuitStr(equipConfigData.Star,curSuitConFig.SuiteValue[i][1]) .. ")</color>"
end
end
else
this.equipPanel[2].curotherProscroll:SetActive(false)
end
-- 设置白金装备套装
this.SetBaijinProShow(2, curEquipData, equipConfigData,itemConfigData)
end
-- 设置白金装备套装显示
function this.SetBaijinProShow(CurOrNext, equipData, equipCfg, itemCfg)
local equipPanel = this.equipPanel[CurOrNext]
if not BaiJinProGo[CurOrNext] then
BaiJinProGo[CurOrNext] = {}
end
local proGoList = BaiJinProGo[CurOrNext]
local endProList = {}
local isGreen = false
if CurOrNext == 2 or type == 1 or #baijinSuit <= 0 then
if equipSuiteConfig[equipCfg.Star] and equipSuiteConfig[equipCfg.Star].SuiteSkill then
for i = 1, #equipSuiteConfig[equipCfg.Star].SuiteSkill do
table.insert(endProList,{equipCfg.Star,equipSuiteConfig[equipCfg.Star].SuiteSkill[i]})
end
end
else
endProList = baijinSuit
isGreen = true
end
if endProList and #endProList > 0 then
equipPanel.baijinScroll:SetActive(true)
-- this.SetScrollActive(CurOrNext, type == 3)
for i = 1, math.max(#endProList, #proGoList) do
if not proGoList[i] then
proGoList[i] = newObjToParent(this.baijinProPre,equipPanel.baijinProGrid)
end
proGoList[i].gameObject:SetActive(false)
end
for i = 1, #endProList do
local go = proGoList[i]
go.gameObject:SetActive(true)
--type=data[2]--1 穿戴 2 卸下 3 替换
local Star = endProList[i][1]
local suitNum = endProList[i][2][1]
local passiveId = endProList[i][2][2]
Util.GetGameObject(go.transform, "title"):GetComponent("Text").text = "不朽天赋" ..i.. ""
if isGreen then--激活的要变颜色
go:GetComponent("Text").text = "<color=#66FF00>" .. GetLanguageStrById(passiveSkillConfig[passiveId].Desc) .. "</color>"
Util.GetGameObject(go.transform, "title/vale"):GetComponent("Text").text = "<color=#66FF00>(" .. GetEquipSuitStr(Star,suitNum) .. ")</color>"
else
go:GetComponent("Text").text = "<color=#B9AC97>" .. GetLanguageStrById(passiveSkillConfig[passiveId].Desc) .. "</color>"
Util.GetGameObject(go.transform, "title/vale"):GetComponent("Text").text = "<color=#B9AC97>(" .. GetEquipSuitStr(Star,suitNum) .. ")</color>"
end
end
else
equipPanel.baijinScroll:SetActive(false)
-- this.SetScrollActive(CurOrNext, false)
end
end
-- 开启白金套装后要可以滑动
function this.SetScrollActive(CurOrNext, isScroll)
local rect = this.equipPanel[CurOrNext].rect
if isScroll then
rect:GetComponent("VerticalLayoutGroup").enabled = false
rect:GetComponent("ContentSizeFitter").enabled = false
rect:GetComponent("ScrollRect").enabled = true
rect.transform.sizeDelta = Vector2.New(800, 400)
Util.GetGameObject(rect, "content").transform.localPosition = Vector2.New(-350, -100)
else
rect:GetComponent("VerticalLayoutGroup").enabled = true
rect:GetComponent("ContentSizeFitter").enabled = true
rect:GetComponent("ScrollRect").enabled = false
end
end
--界面关闭时调用(用于子类重写)
function RoleEquipChangePopup:OnClose()
end
--界面销毁时调用(用于子类重写)
function RoleEquipChangePopup:OnDestroy()
this.spLoader:Destroy()
curSuitProGo = {}
nextSuitProGo = {}
this.mainProList = {}
-- 重置数据
baijinSuit = {}
BaiJinProGo = {}
end
return RoleEquipChangePopup