miduo_client/Assets/ManagedResources/~Lua/Modules/GodPrint/GodPrintPopUp.lua

501 lines
24 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")
GodPrintPopUp = Inherit(BasePanel)
local itemConfig=ConfigManager.GetConfig(ConfigName.ItemConfig)
local equipConfig=ConfigManager.GetConfig(ConfigName.EquipConfig)
local passiveSkillConfig=ConfigManager.GetConfig(ConfigName.PassiveSkillConfig)
local heroConfig=ConfigManager.GetConfig(ConfigName.HeroConfig)
local propertyconfig=ConfigManager.GetConfig(ConfigName.PropertyConfig)
--面板类型
local Type={
Up=1, --穿戴
Down=2, --卸下
Access=3, --有获取途径 传nil就不显示了
UpStar=4, --升星
}
--打开面板类型
local curType=0
local heroId --当前英雄id
local soulId --魂印id
local pos --位置
local callback --回调
local localData --本地存储的魂印数据 包含soulId 该数据只在魂印装备时Type.Up才有用
--适用范围英雄容器
local proList = {}
local _superProList = {}--白金属性对象
function GodPrintPopUp:InitComponent()
self.spLoader = SpriteLoader.New()
self.panel=Util.GetGameObject(self.gameObject,"Panel")
self.maskBtn= Util.GetGameObject(self.gameObject, "mask")
--基础信息
--装备详情--topBar
self.topBar = Util.GetGameObject(self.transform, "Panel/topBar")
self.soulName = Util.GetGameObject(self.topBar, "name"):GetComponent("Text")
self.icon = Util.GetGameObject(self.topBar, "icon"):GetComponent("Image")
self.frame = Util.GetGameObject(self.topBar, "frame"):GetComponent("Image")
self.circleFrameBg=Util.GetGameObject(self.topBar,"circleFrameBg"):GetComponent("Image")
self.circleFrame=Util.GetGameObject(self.topBar,"circleFrame"):GetComponent("Image")
self.equipType=Util.GetGameObject(self.topBar, "equipType"):GetComponent("Text")
self.lvTxt=Util.GetGameObject(self.topBar, "lv"):GetComponent("Text")
self.equipQuaText=Util.GetGameObject(self.topBar, "equipQuaText"):GetComponent("Text")
self.equipInfoText=Util.GetGameObject(self.topBar, "equipInfoText"):GetComponent("Text")
self.powerNum=Util.GetGameObject(self.topBar, "powerNum"):GetComponent("Text")
self.star=Util.GetGameObject(self.topBar, "star")
self.effectbaijin = Util.GetGameObject(self.topBar, "fx_zhuangbeijiemian")
--魂印效果
self.midBar = Util.GetGameObject(self.transform, "Panel/midBar")
self.effectText=Util.GetGameObject(self.midBar,"basePro/Info"):GetComponent("Text")
self.desText=Util.GetGameObject(self.midBar,"basePro/PropertyName"):GetComponent("Text")
self.desText.text="神印效果:"
--突破效果
self.breakText=Util.GetGameObject(self.midBar,"breakPro/Info/Text"):GetComponent("Text")
self.desText2=Util.GetGameObject(self.midBar,"breakPro/PropertyName"):GetComponent("Text")
self.desText2.text="神印突破:"
self.breakObj = Util.GetGameObject(self.midBar,"breakPro")
--技能效果
self.skillObj=Util.GetGameObject(self.midBar,"superPro")
self.skillGrid=Util.GetGameObject(self.midBar,"superPro/proGrid")
self.skillPre=Util.GetGameObject(self.midBar,"superPro/proGrid/Desc")
--适用范围(还没做具体内容)
self.trialScope=Util.GetGameObject(self.midBar,"TrialScope")
self.trialScopeText=Util.GetGameObject(self.trialScope,"Text"):GetComponent("Text")
--数据小于4自动布局
self.scroll_1=Util.GetGameObject(self.trialScope,"Scroll_1")--静态布局根节点
self.trialScopePre=Util.GetGameObject(self.trialScope,"Scroll_1/TrialScopePre")--适用范围预设
--数据大于4优化布局
self.scroll_2=Util.GetGameObject(self.trialScope,"Scroll_2")--优化滚动条
self.scrollView=SubUIManager.Open(SubUIConfig.ScrollFitterView,self.scroll_2.transform,self.trialScopePre,Vector2.New(899.5,490), 1, 15)
self.scrollView.gameObject:GetComponent("RectTransform").anchoredPosition= Vector2.New(-70,0)
self.scrollView.gameObject:GetComponent("RectTransform").anchorMin = Vector2.New(0.5, 0.5)
self.scrollView.gameObject:GetComponent("RectTransform").anchorMax = Vector2.New(0.5, 0.5)
self.scrollView.gameObject:GetComponent("RectTransform").pivot = Vector2.New(0.5, 0.5)
self.scrollView.moveTween.MomentumAmount = 1
self.scrollView.moveTween.Strength = 2
self.btmBar = Util.GetGameObject(self.transform, "Panel/btmBar")
--获取途径
self.howGet = Util.GetGameObject(self.btmBar, "howGet")
self.canGetPre = Util.GetGameObject(self.howGet, "scroll/canGetPre")
self.canGetGrid = Util.GetGameObject(self.howGet, "scroll")
self.canGetScrollView = SubUIManager.Open(SubUIConfig.ScrollCycleView, self.canGetGrid.transform,self.canGetPre, nil,
Vector2.New(self.canGetGrid.transform.rect.width, self.canGetGrid.transform.rect.height), 1, 1, Vector2.New(0, 0))
self.canGetScrollView.moveTween.MomentumAmount = 1
self.canGetScrollView.moveTween.Strength = 2
self.canGetScrollView.elastic = false
self.jumpViewList = {}
--操作按钮
self.btns=Util.GetGameObject(self.btmBar,"btnGrid")
self.upBtn=Util.GetGameObject(self.btns,"UpBtn")
self.downBtn=Util.GetGameObject(self.btns,"DownBtn")
self.upStarBtn=Util.GetGameObject(self.btns,"UpStarBtn")
end
function GodPrintPopUp:BindEvent()
--关闭面板
Util.AddClick(self.maskBtn, function()
self:ClosePanel()
end)
--提升品阶
Util.AddClick(self.upStarBtn, function()
if curType~=2 then
heroId=nil
end
UIManager.OpenPanel(UIName.GeneralBigPopup,GENERAL_POPUP_TYPE.GodPrintUp,soulId,pos,heroId,callback)
self:ClosePanel()
end)
--穿戴
Util.AddClick(self.upBtn,function()
--检测是否已穿过该类型魂印
local curHeroData = HeroManager.GetSingleHeroData(heroId)
if curHeroData and curHeroData.godPrintList and #curHeroData.godPrintList > 0 then
for i = 1, #curHeroData.godPrintList do
if curHeroData.godPrintList[i].equipId == soulId then
PopupTipPanel.ShowTip(Language[11524])
return
end
end
end
--如果装备位置满了 显示替换界面
if pos==0 then
UIManager.OpenPanel(UIName.GodPrintPopUpV2,2,curHeroData,localData,function()
self:ClosePanel()
self:RefreshShow()
if callback then
callback()
end
end)
return
end
--如果是别人装备的
-- if localData.upHero~="" then
-- --当前点击魂印被装到的英雄数据
-- local curClickHeroData=HeroManager.GetSingleHeroData(localData.upHero)
-- local str=string.format(Language[11525],itemConfig[curClickHeroData.id].Name,equipConfig[localData.id].Name,itemConfig[curHeroData.id].Name)
-- MsgPanel.ShowTwo(str, nil, function()
-- local _pos = 0
-- for i = 1, #curClickHeroData.soulPrintList do
-- if curClickHeroData.soulPrintList[i].equipId == localData.id then
-- _pos = curClickHeroData.soulPrintList[i].position
-- end
-- end
-- NetManager.SoulEquipUnLoadWearRequest(tostring(curClickHeroData.dynamicId),localData.id,_pos,function()
-- HeroManager.DelSoulPrintUpHeroDynamicId(curClickHeroData.dynamicId,localData.id)
-- local wearInfo = {heroId = tostring(curHeroData.dynamicId),equipId = localData.id,position = pos}
-- NetManager.SoulEquipWearRequest(wearInfo,nil,function()
-- HeroManager.AddSoulPrintUpHeroDynamicId(curHeroData.dynamicId,localData.id,pos)
-- PopupTipPanel.ShowTip(Language[11526])
-- self:RefreshShow()
-- --
-- if callback then
-- callback()
-- end
-- self:ClosePanel()
-- end)
-- end)
-- end)
-- return
-- end
-- else--选择的魂印没有被其他猎妖师装备 可直接装备
--穿戴
local wearInfo = {heroId = tostring(heroId),equipId = soulId,position = pos}
NetManager.WearGodSealRequest(1,wearInfo,function()
HeroManager.AddGodPrintUpHeroDynamicId(heroId,soulId,pos)
PopupTipPanel.ShowTip(Language[11526])
HeroPropManager.SetDirtyByType(wearInfo.heroId, Hero_Prop_Type.GodPrint)
if callback then
callback()
end
end)
self:ClosePanel()
-- end
end)
--卸下
Util.AddClick(self.downBtn,function()
local wearInfo = {heroId = tostring(heroId),equipId = soulId,position = pos}
NetManager.WearGodSealRequest(0,wearInfo,function()
PopupTipPanel.ShowTip(Language[11904])
HeroManager.DelGodPrintUpHeroDynamicId(heroId,soulId)
HeroPropManager.SetDirtyByType(wearInfo.heroId, Hero_Prop_Type.GodPrint)
if callback then
callback()
end
end)
self:ClosePanel()
end)
end
function GodPrintPopUp:AddListener()
end
function GodPrintPopUp:RemoveListener()
end
--curtype 面板类型(看最上面解释) heroId 英雄ID soulId魂印ID pos位置 callback回调 localData本地存储魂印数据只在穿戴时用
function GodPrintPopUp:OnOpen(...)
local args={...}
curType=args[1]
heroId= args[2]
soulId=args[3]
pos=args[4]
callback=args[5]
localData=args[6]
end
function GodPrintPopUp:OnShow()
self:RefreshShow(curType)
end
function GodPrintPopUp:OnClose()
for i = 1, #self.jumpViewList do
destroy(self.jumpViewList[i].gameObject)
end
end
function GodPrintPopUp:OnDestroy()
self.spLoader:Destroy()
self.scrollView=nil
proList={}
_superProList = {}
self.jumpViewList = {}
end
--读取魂印适用英雄效果
local x= function(index)
local args={}
local tempArgs = string.split(GetLanguageStrById(equipConfig[soulId].Parameter),'|')
local t = string.split(tempArgs[index],'#')
for i, v in ipairs(t) do
args[i]= v
end
return string.format(GetLanguageStrById(equipConfig[soulId].Describe),unpack(args))
end
--刷新面板
function GodPrintPopUp:RefreshShow(_type)
--self.btns:SetActive(type==Type.Up or type==Type.Down)
self.btns:SetActive(true)
self.upBtn:SetActive(_type==Type.Up)
self.downBtn:SetActive(_type==Type.Down)
self.upStarBtn:SetActive(_type~=0 and equipConfig[soulId].Formula~=nil and type(equipConfig[soulId].Formula[1][1])~="userdata")
--基础信息
self.soulName.text = GetLanguageStrById(equipConfig[soulId].Name)
self.frame.sprite = self.spLoader:LoadSprite(GetQuantityImageByquality(equipConfig[soulId].Quality))
self.icon.sprite = self.spLoader:LoadSprite(GetResourcePath(itemConfig[soulId].ResourceID))
self.circleFrameBg.sprite = self.spLoader:LoadSprite(SoulPrintSpriteByQuantity[itemConfig[soulId].Quantity].circleBg2)
self.circleFrame.sprite = self.spLoader:LoadSprite(SoulPrintSpriteByQuantity[itemConfig[soulId].Quantity].circle)
self.powerNum.text = equipConfig[soulId].Score--战力
self.lvTxt.gameObject:SetActive(equipConfig[soulId].Star>0)
self.lvTxt.text="+"..equipConfig[soulId].Star
self.equipInfoText.text = GetLanguageStrById(itemConfig[soulId].ItemDescribe)
self.equipQuaText.text= GetQuaStringByEquipQua(equipConfig[soulId].Quality)
self.equipType.text= Language[11089]..GetEquipPosStrByEquipPosNum(equipConfig[soulId].Position)
self.topBar:GetComponent("Image").sprite = self.spLoader:LoadSprite("Bg_hz_beibao_pinjise_00"..equipConfig[soulId].Quality)
self.effectbaijin:SetActive(equipConfig[soulId].Quality==7)
Util.SetParticleSortLayer(self.effectbaijin,self.sortingOrder + 1)
if equipConfig[soulId] then --魂印效果
local txt = ""
local pass=equipConfig[soulId].PassiveSkill
if pass~=nil and tonumber(pass[1])~=nil and tonumber(pass[1])~=0 then
self.effectText.text = GetLanguageStrById(passiveSkillConfig[pass[1]].Desc)
else
if equipConfig[soulId].Property then
for index, value in ipairs(equipConfig[soulId].Property) do --propertyconfig
if index > 1 then
txt = txt .. ""
end
if propertyconfig[value[1]].Style==1 then
txt=txt..GetLanguageStrById(propertyconfig[value[1]].Info).."+"..value[2]
elseif propertyconfig[value[1]].Style==2 then
txt=txt..GetLanguageStrById(propertyconfig[value[1]].Info).."+"..math.floor((value[2]/100)).."%"
end
end
end
self.effectText.text =txt
end
if equipConfig[soulId].Quality>=7 then
self.breakObj:SetActive(true)
local allConfig=ConfigManager.TryGetConfigDataByThreeKey(ConfigName.EquipConfig,"SuiteID",equipConfig[soulId].SuiteID,"SuiteID1",equipConfig[soulId].SuiteID1,"Star",9)
local stringInfo=""
if allConfig then
local firstStr=""
for index, value in ipairs(allConfig.Property) do --propertyconfig
local curStr=""
if propertyconfig[value[1]].Style==1 then
curStr=GetLanguageStrById(propertyconfig[value[1]].Info).."+"..value[2]
elseif propertyconfig[value[1]].Style==2 then
curStr=GetLanguageStrById(propertyconfig[value[1]].Info).."+"..math.floor((value[2]/100)).."%"
end
if index==1 then --第一条属性不显示
--firstStr=curStr
elseif index==2 then
if equipConfig[soulId].Star>=index-1 then
stringInfo=stringInfo.."<color=#00F800>"..curStr..string.format(" (+%s解锁)",index-1).."</color>\n"
else
stringInfo=stringInfo.."<color=#FFC280>"..curStr..string.format(" (+%s解锁)",index-1).."</color>\n"
end
else
if equipConfig[soulId].Star>=index-1 then
stringInfo=stringInfo.."<color=#00F800>"..curStr..string.format(" (+%s解锁)",index-1).."</color>\n"
else
stringInfo=stringInfo.."<color=#FFC280>"..curStr..string.format(" (+%s解锁)",index-1).."</color>\n"
end
end
end
end
self.breakText.text=stringInfo
else
self.breakObj:SetActive(false)
end
local curID=0
local isEnough=false
local suiteId=equipConfig[soulId].SuiteID1
local heroData=HeroManager.GetSingleHeroData(heroId)
if heroData then
local tian={}
local di={}
local printList={}
for i = 1, #heroData.godPrintList do
local id=heroData.godPrintList[i].equipId
-- if equipConfig[id].SuiteID<=8 and equipConfig[soulId].SuiteID<=8 then
-- --LogError("equipConfig[id].SuiteID1=="..equipConfig[id].SuiteID1)
-- table.insert(tian,equipConfig[id].SuiteID1)
-- elseif equipConfig[id].SuiteID>8 and equipConfig[soulId].SuiteID>8 then
-- --LogError("equipConfig[id].SuiteID1=="..equipConfig[id].SuiteID1)
-- table.insert(di,equipConfig[id].SuiteID1)
-- end
if equipConfig[id].ShenYinType==equipConfig[soulId].ShenYinType then
if printList[equipConfig[id].ShenYinType] then
printList[equipConfig[id].ShenYinType][1]=printList[equipConfig[id].ShenYinType][1]+1
if equipConfig[id].SuiteID1 < printList[equipConfig[id].ShenYinType][2] then
printList[equipConfig[id].ShenYinType][2]=equipConfig[id].SuiteID1
end
else
printList[equipConfig[id].ShenYinType]={}
printList[equipConfig[id].ShenYinType][1]=1
printList[equipConfig[id].ShenYinType][2]=equipConfig[id].SuiteID1
end
end
end
for key, value in pairs(printList) do
LogError("key====="..key.." value=="..value[1].." id=="..value[2])
if value[1] == 4 then
isEnough=true
suiteId=value[2]
LogError("1111111111111111")
end
end
--LogError("tian len=="..#tian)
-- LogError("di len=="..#di)
-- if equipConfig[soulId].SuiteID<=8 then
-- if #tian==4 then
-- isEnough=true
-- table.sort(tian,function(a,b)
-- return a<b
-- end)
-- --LogError("tian[1]=="..tian[1])
-- suiteId=tian[1]
-- end
-- else
-- if #di==4 then
-- isEnough=true
-- table.sort(di,function(a,b)
-- return a<b
-- end)
-- --LogError("di[1]=="..di[1])
-- suiteId=di[1]
-- end
-- end
end
local curGoldSuitConFig=ConfigManager.GetConfigData(ConfigName.EquipSuiteConfig,suiteId)
if curGoldSuitConFig and curGoldSuitConFig.SuiteSkill~=nil and tonumber(curGoldSuitConFig.SuiteSkill[1][1])~=nil then
self.skillObj:SetActive(true)
local num=0
if curGoldSuitConFig then
local goldSuiteSkill = curGoldSuitConFig.SuiteSkill
for i = 1, #goldSuiteSkill do
num = num + 1
if not _superProList[num] then
_superProList[num] = newObjToParent(self.skillPre, self.skillGrid)
end
_superProList[num].gameObject:SetActive(true)
local go = _superProList[num]
go.gameObject:SetActive(true)
local name = Util.GetGameObject(go.transform, "Name"):GetComponent("Text")
local value = Util.GetGameObject(go.transform, "Name/vale"):GetComponent("Text")
name.text = "神印套装天赋:"
--value.text = string.format("<color=#FCEBCA>(%s)</color>",GetEquipSuitStr(curGoldSuitConFig.Id,goldSuiteSkill[i][1]))
--LogError("goldSuiteSkill[i][2]=="..goldSuiteSkill[i][2])
if goldSuiteSkill[i][2] then
if isEnough then
go:GetComponent("Text").text = string.format("<color=#66FF00>%s</color>",GetLanguageStrById(passiveSkillConfig[goldSuiteSkill[i][2]].Desc))
else
go:GetComponent("Text").text = string.format("<color=#FFC280>%s</color>",GetLanguageStrById(passiveSkillConfig[goldSuiteSkill[i][2]].Desc))
end
end
go:GetComponent("Text").enabled = true
end
end
LayoutRebuilder.ForceRebuildLayoutImmediate(self.skillObj.transform)
else
self.skillObj:SetActive(false)
end
end
--适用范围
-- local isOpenTrialScope=equipConfig[soulId].Range and equipConfig[soulId].Range[1]~=0 and equipConfig[soulId].Range[1]--是否开启适用
-- if isOpenTrialScope then
-- self.trialScopeText.text = "以下神将可装备:"
-- self.scroll_1:SetActive(#equipConfig[soulId].Range<=3)
-- self.scroll_2:SetActive(#equipConfig[soulId].Range>3)
-- --适用英雄<=3时 固定长度生成(预设) 反之使用优化滚动条
-- if #equipConfig[soulId].Range<=3 then
-- for j = 0, self.scroll_1.transform.childCount-1 do
-- self.scroll_1.transform:GetChild(j).gameObject:SetActive(false)
-- end
-- for i = 1, #equipConfig[soulId].Range do--遍历每个适用英雄
-- local item= proList[i]
-- if not item then
-- item= newObjToParent(self.trialScopePre,self.scroll_1)
-- item.name="ProPre"..i
-- proList[i]=item
-- end
-- proList[i].gameObject:SetActive(true)
-- local _heroId=equipConfig[soulId].Range[i]
-- local frame=Util.GetGameObject(item,"Head/Frame"):GetComponent("Image")
-- local icon=Util.GetGameObject(item,"Head/Icon"):GetComponent("Image")
-- local name=Util.GetGameObject(item,"Name"):GetComponent("Text")
-- local info=Util.GetGameObject(item,"Info"):GetComponent("Text")
-- frame.sprite=self.spLoader:LoadSprite(GetQuantityImageByquality(itemConfig[_heroId].Quantity))
-- icon.sprite=self.spLoader:LoadSprite(GetResourcePath(itemConfig[_heroId].ResourceID))
-- name.text=GetLanguageStrById(itemConfig[_heroId].Name)
-- info.text=x(i)
-- end
-- else
-- self.scrollView:SetData(equipConfig[soulId].Range,function(index,root)
-- self:SetScrollPre(root,equipConfig[soulId].Range[index],index)
-- end)
-- self.scrollView:SetIndex(1)
-- end
-- else
-- self.scroll_1:SetActive(false)
-- self.scroll_2:SetActive(false)
-- self.trialScopeText.text = "以下神将可装备:所有神将"
-- end
self.scroll_1:SetActive(false)
self.scroll_2:SetActive(false)
if equipConfig[soulId].Describe then
self.trialScopeText.text = "以下英雄可装备:"..equipConfig[soulId].Describe
end
--获取途径
if self.jumpViewList and #self.jumpViewList > 0 then
for i = 1,#self.jumpViewList do
SubUIManager.Close(self.jumpViewList[i])
end
end
local curitemData = itemConfig[soulId]
self.howGet:SetActive(false)
if curitemData and curitemData.Jump then
if curitemData.Jump and #curitemData.Jump>0 then
self.howGet:SetActive(true)
self.canGetScrollView:SetData(curitemData.Jump,function (index, item)
local tempView = SubUIManager.Open(SubUIConfig.JumpView, item.transform, curitemData.Jump[index],true)
table.insert(self.jumpViewList,tempView)
end,true,true)
end
end
LayoutRebuilder.ForceRebuildLayoutImmediate(self.midBar.transform)
end
--优化滚动条数据赋值
function GodPrintPopUp:SetScrollPre(root,data,index)
local frame=Util.GetGameObject(root,"Head/Frame"):GetComponent("Image")
local icon=Util.GetGameObject(root,"Head/Icon"):GetComponent("Image")
local name=Util.GetGameObject(root,"Name"):GetComponent("Text")
local info=Util.GetGameObject(root,"Info"):GetComponent("Text")
frame.sprite=self.spLoader:LoadSprite(GetQuantityImageByquality(itemConfig[data].Quantity))
icon.sprite=self.spLoader:LoadSprite(GetResourcePath(itemConfig[data].ResourceID))
name.text=GetLanguageStrById(itemConfig[data].Name)
info.text=x(index)
end
return GodPrintPopUp