miduo_client/Assets/ManagedResources/~Lua/Modules/HandBook/HandBookRoleInfoLayout.lua

378 lines
18 KiB
Lua
Raw Normal View History

2021-04-21 13:12:04 +08:00
require("Base/BasePanel")
HandBookRoleInfoLayout = Inherit(BasePanel)
local this = HandBookRoleInfoLayout
local heroConFigData
local propertyConfig = ConfigManager.GetConfig(ConfigName.PropertyConfig)
local heroLevelConfig = ConfigManager.GetConfig(ConfigName.HeroLevelConfig)
local itemConfig=ConfigManager.GetConfig(ConfigName.ItemConfig)
local allAddProVal = {}
local allBtns={}
local breakId,upStarId
local orginLayer=0
--初始化组件(用于子类重写)
function HandBookRoleInfoLayout:New(gameObject)
local b = {}
b.gameObject = gameObject
b.transform = gameObject.transform
setmetatable(b, { __index = HandBookRoleInfoLayout })
return b
end
function HandBookRoleInfoLayout:InitComponent()
2021-04-21 13:12:04 +08:00
this.spLoader = SpriteLoader.New()
--LogGreen("self.gameObject:"..tostring(self.gameObject))
--详情
Util.GetGameObject(self.gameObject,"pro/atk/proName"):GetComponent("Text").text = GetLanguageStrById(propertyConfig[2].Info)
Util.GetGameObject(self.gameObject,"pro/hp/proName"):GetComponent("Text").text = GetLanguageStrById(propertyConfig[1].Info)
Util.GetGameObject(self.gameObject,"pro/phyDef/proName"):GetComponent("Text").text = GetLanguageStrById(propertyConfig[3].Info)
Util.GetGameObject(self.gameObject,"pro/magDef/proName"):GetComponent("Text").text = GetLanguageStrById(propertyConfig[4].Info)
self.atkPro=Util.GetGameObject(self.gameObject,"pro/atk/proValue"):GetComponent("Text")
self.hpPro=Util.GetGameObject(self.gameObject,"pro/hp/proValue"):GetComponent("Text")
self.phyDef=Util.GetGameObject(self.gameObject,"pro/phyDef/proValue"):GetComponent("Text")
self.magDef=Util.GetGameObject(self.gameObject,"pro/magDef/proValue"):GetComponent("Text")
self.allProButton=Util.GetGameObject(self.gameObject,"allProButton")
self.skillGrid=Util.GetGameObject(self.gameObject,"skill")
self.line1=Util.GetGameObject(self.skillGrid,"line1")
self.line2=Util.GetGameObject(self.skillGrid,"line2")
self.line3=Util.GetGameObject(self.gameObject,"skillBtns/line3")
self.line4=Util.GetGameObject(self.gameObject,"skillBtns/line4")
2022-01-11 18:11:13 +08:00
self.selsectSkillImage=Util.GetGameObject(self.gameObject,"selsectSkillImage")
self.posBtn= Util.GetGameObject(self.gameObject,"dingwei")
self.posTxt=Util.GetGameObject(self.gameObject,"dingwei/posText"):GetComponent("Text")
self.lvTxt=Util.GetGameObject(self.gameObject,"lvObj/lvTxt"):GetComponent("Text")
self.proImg=Util.GetGameObject(self.gameObject,"posImage"):GetComponent("Image")
self.proTxt=Util.GetGameObject(self.gameObject,"posText2"):GetComponent("Text")
self.btnsLayer=Util.GetGameObject(self.gameObject,"skillBtns"):GetComponent("Canvas")
allBtns={}
for i = 1, 6 do
local btn=Util.GetGameObject(self.gameObject,"skillBtns/sBg"..i)
btn.gameObject:SetActive(false)
table.insert(allBtns,btn)
end
2022-01-11 18:11:13 +08:00
end
--绑定事件(用于子类重写)
function HandBookRoleInfoLayout:BindEvent()
Util.AddClick(self.allProButton, function()
2021-05-12 17:40:38 +08:00
UIManager.OpenPanel(UIName.RoleProInfoPopup,allAddProVal,heroConFigData,false,nil)
end)
2022-01-11 18:11:13 +08:00
end
--界面打开或者重新打开后,界面刷新时调用(用于子类重写)
function HandBookRoleInfoLayout:OnShow(sortingOrder,parent,_heroConFigData,_curStar)
self.gameObject:SetActive(true)
end
2022-01-11 18:11:13 +08:00
function HandBookRoleInfoLayout:SetData(sortingOrder,parent,_heroConFigData,_curStar,_lv)
self.sortingOrder = sortingOrder
orginLayer=self.sortingOrder+2
self.btnsLayer.sortingOrder=orginLayer
heroConFigData = _heroConFigData
if _curStar and _curStar > 5 then
2022-01-11 18:11:13 +08:00
self:OnShowHeroData(2,_curStar,_lv)
else
2022-01-11 18:11:13 +08:00
self:OnShowHeroData(1,heroConFigData.Star,_lv)
end
end
local CurrOpenPanel=nil
local currPanelName=0
--展示英雄信息 第一个参数 1初始 2 6星和10星 第三个参数 显示星级
2022-01-11 18:11:13 +08:00
function HandBookRoleInfoLayout:OnShowHeroData(_starType,star,_lv)
local lv=0
local rankUpConfig=ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.HeroRankupConfig,"Type",2,"OpenStar",star)
if rankUpConfig then
lv=rankUpConfig.OpenLevel
else
if star==1 then
lv=40
elseif star==2 then
lv=50
elseif star==3 then
lv=60
elseif star==4 then
lv=80
else
lv=1
end
end
--计算面板属性
2022-01-11 18:11:13 +08:00
allAddProVal=self:CalculateHeroAllProValList(_starType,star,lv)
self.atkPro.text=allAddProVal[HeroProType.Attack]
self.hpPro.text=allAddProVal[HeroProType.Hp]
self.phyDef.text=allAddProVal[HeroProType.PhysicalDefence]
self.magDef.text=allAddProVal[HeroProType.MagicDefence]
self.lvTxt.text= " "..lv
2022-01-11 18:11:13 +08:00
self.posTxt.text=star >= HeroManager.awakeNextStarIndex and GetLanguageStrById(heroConFigData.HeroLocationDesc4) or GetLanguageStrById(heroConFigData.HeroLocationDesc1)
self.proImg.sprite=this.spLoader:LoadSprite(GetHeroPosStr(heroConFigData.Profession))
self.proTxt.text=GetLanguageStrById(heroConFigData.HeroLocation)
--技能点击特殊处理
self.posTxt.gameObject:SetActive(heroConFigData.ShowHeroLocation==1)
self.posBtn.gameObject:SetActive(heroConFigData.ShowHeroLocation==1)
self.selsectSkillImage:SetActive(false)
self.skillGrid:GetComponent("Canvas").sortingOrder = self.sortingOrder + 1
local triggerCallBack
local skillList = HeroManager.GetCurHeroSkillDatasAndEquip(heroConFigData.Id,star)
--local awakeSkillList=HeroManager.GetCurHeroAllAwakeSkillDatas(heroConFigData.Id,star)
for i = 1, self.skillGrid.transform.childCount do
self.skillGrid.transform:GetChild(i-1).gameObject:SetActive(false)
end
for i = 1, 6 do
allBtns[i].gameObject:SetActive(false)
end
local len=#skillList
local btnCount=len
if heroConFigData.OpenPassiveSkillRules then
btnCount=btnCount+1
local passObj=Util.GetGameObject(self.skillGrid,"sBg"..len+1)--self.skillGrid.transform:GetChild(len).gameObject
passObj:SetActive(true)
allBtns[len+1].gameObject:SetActive(true)
Util.GetGameObject(passObj,"s"):GetComponent("Image").sprite=this.spLoader:LoadSprite(GetTianFuIcon(star))
2022-01-18 11:44:36 +08:00
Util.GetGameObject(passObj,"frame"):SetActive(false)
local aaa=5
2022-01-18 11:44:36 +08:00
if star>=9 then
if star>=11 then
2022-01-18 11:44:36 +08:00
Util.GetGameObject(passObj,"frame"):SetActive(true)
aaa=7
else
2022-01-18 11:44:36 +08:00
aaa=star-3
end
end
Util.GetGameObject(passObj,"SkillTypeImage"):GetComponent("Image").sprite=this.spLoader:LoadSprite(SkillIconType[aaa])
2022-01-15 14:32:55 +08:00
Util.GetGameObject(passObj,"SkillTypeImage"):GetComponent("Image"):SetNativeSize()
local OpenPassiveSkillRules = star >= HeroManager.awakeNextStarIndex and heroConFigData.Awaken or heroConFigData.OpenPassiveSkillRules
OpenPassiveSkillRules=GetPassiveByMaxStar(heroConFigData,OpenPassiveSkillRules)
local openlists,compoundOpenNum,compoundNum = HeroManager.GetAllPassiveSkillIds(heroConFigData,breakId,upStarId)
2022-01-21 13:55:17 +08:00
if star==11 then
Util.GetGameObject(passObj,"Text"):GetComponent("Text").text = #openlists - compoundOpenNum .."/"..10
else
Util.GetGameObject(passObj,"Text"):GetComponent("Text").text = #openlists - compoundOpenNum .."/"..#OpenPassiveSkillRules - compoundNum
end
Util.AddOnceClick(allBtns[len+1],function()
UIManager.ClosePanel(currPanelName)
if star==11 then
CurrOpenPanel=UIManager.OpenPanel(UIName.RoleAwakeTalentPopup,heroConFigData)
currPanelName=UIName.RoleAwakeTalentPopup
else
CurrOpenPanel=UIManager.OpenPanel(UIName.RoleTalentPopup,heroConFigData,breakId,upStarId)
currPanelName=UIName.RoleTalentPopup
end
self.selsectSkillImage:SetActive(true)
self.selsectSkillImage.transform.position=Util.GetGameObject(self.skillGrid,"sBg"..len+1 .."/s").transform.position
self.selsectSkillImage.transform:SetParent(Util.GetGameObject(self.skillGrid,"sBg"..len+1 .."/s").transform)
self:SetBtnsLayer()
end)
end
if ActTimeCtrlManager.SingleFuncState(FUNCTION_OPEN_TYPE.shenhun) and heroConFigData.IsSoulOpen == 1 and star > 10 then
btnCount=btnCount+1
local passObj=Util.GetGameObject(self.skillGrid,"sBg"..len+2)--self.skillGrid.transform:GetChild(len+1).gameObject
passObj:SetActive(true)
allBtns[len+2].gameObject:SetActive(true)
Util.GetGameObject(passObj,"s"):GetComponent("Image").sprite=this.spLoader:LoadSprite("r_tongyong_shenhun_icon")
Util.GetGameObject(passObj,"s/Text"):SetActive(false)
2022-01-15 14:32:55 +08:00
Util.GetGameObject(passObj,"SkillTypeImage"):GetComponent("Image").sprite=this.spLoader:LoadSprite(SkillIconType[9])
Util.GetGameObject(passObj,"SkillTypeImage"):GetComponent("Image"):SetNativeSize()
Util.AddOnceClick(allBtns[len+2],function()
UIManager.ClosePanel(currPanelName)
CurrOpenPanel=UIManager.OpenPanel(UIName.RoleGodSoulLayout,heroConFigData,star)
self.selsectSkillImage:SetActive(true)
self.selsectSkillImage.transform.position=Util.GetGameObject(self.skillGrid,"sBg"..len+2 .."/s").transform.position
self.selsectSkillImage.transform:SetParent(Util.GetGameObject(self.skillGrid,"sBg"..len+2 .."/s").transform)
currPanelName=UIName.RoleGodSoulLayout
self:SetBtnsLayer()
end)
end
for i = 1, len do
2022-01-11 18:11:13 +08:00
--and GetLanguageStrById(skillList[i].skillConfig.Name)
if skillList[i] and skillList[i].skillConfig then
local go = Util.GetGameObject(self.skillGrid,"sBg"..i) --self.skillGrid.transform:GetChild(i-1).gameObject
go:SetActive(true)
allBtns[i].gameObject:SetActive(true)
2022-01-11 18:11:13 +08:00
local line=Util.GetGameObject(go.transform,"line")
line:SetActive(false)
local bg=Util.GetGameObject(go.transform,"Image"):GetComponent("Image")
2022-01-18 11:44:36 +08:00
Util.GetGameObject(go.transform,"frame"):SetActive(false)
2021-04-21 13:12:04 +08:00
Util.GetGameObject(go.transform,"s"):GetComponent("Image").sprite=this.spLoader:LoadSprite(GetResourcePath(skillList[i].skillConfig.Icon))
Util.GetGameObject(go.transform,"s/Text"):SetActive(false)
local index=i
if index==3 then
Util.GetGameObject(go.transform,"SkillTypeImage"):GetComponent("Image").sprite=this.spLoader:LoadSprite(SkillIconType[4])
else
Util.GetGameObject(go.transform,"SkillTypeImage"):GetComponent("Image").sprite=this.spLoader:LoadSprite(GetSkillType(skillList[i]))
end
2022-01-15 14:32:55 +08:00
Util.GetGameObject(go.transform,"SkillTypeImage"):GetComponent("Image"):SetNativeSize()
local di=Util.GetGameObject(go.transform,"pro"):GetComponent("Image")
local diTxt=Util.GetGameObject(go.transform,"pro/Text"):GetComponent("Text")
if skillList[i].skillConfig.Skilltips and skillList[i].skillConfig.Skilltips > 0 then
if skillList[i].skillConfig.Skilltips == 6 then
di.sprite=this.spLoader:LoadSprite("r_hero_lvdi")--被动技
else
di.sprite=this.spLoader:LoadSprite("r_hero_hongdi")--被动技
end
di.gameObject:SetActive(true)
di:SetNativeSize()
diTxt.text=SkillProType[skillList[i].skillConfig.Skilltips]
else
di.gameObject:SetActive(false)
end
Util.AddOnceClick(allBtns[i], function()
local skillData = {}
skillData.skillConfig = skillList[i].skillConfig
local maxLv= HeroManager.GetHeroSkillMaxLevel(heroConFigData.Id,skillData.skillConfig.Type)
2022-01-15 14:32:55 +08:00
if index~=3 then
if Game.GlobalEvent:HasEvent(GameEvent.UI.OnClose, triggerCallBack) then
Game.GlobalEvent:RemoveEvent(GameEvent.UI.OnClose, triggerCallBack)
end
-- if currPanelName~= UIName.SkillInfoPopup then
UIManager.ClosePanel(currPanelName)
-- end
self.selsectSkillImage.transform.position=Util.GetGameObject(go.transform,"s").transform.position
self.selsectSkillImage.transform:SetParent(Util.GetGameObject(go.transform,"s").transform)
local panel = UIManager.OpenPanel(UIName.SkillInfoPopup,skillData,1,10,maxLv,i)
self.selsectSkillImage:SetActive(true)
CurrOpenPanel=panel
currPanelName=UIName.SkillInfoPopup
self:SetBtnsLayer()
--self.skillGrid:GetComponent("Canvas").sortingOrder = panel.sortingOrder + 1
else
UIManager.ClosePanel(currPanelName)
currPanelName=UIName.TalismanInfoPopup
CurrOpenPanel=UIManager.OpenPanel(UIName.TalismanInfoPopup,heroConFigData,1,1)
self.selsectSkillImage.transform.position=Util.GetGameObject(go.transform,"s").transform.position
self.selsectSkillImage.transform:SetParent(Util.GetGameObject(go.transform,"s").transform)
self.selsectSkillImage:SetActive(true)
self:SetBtnsLayer()
end
end)
triggerCallBack = function (panelType, p)
if panelType == UIName.SkillInfoPopup or panelType==currPanelName then --监听到SkillInfoPopup关闭把层级设回去
--self.skillGrid:GetComponent("Canvas").sortingOrder = self.sortingOrder + 1
self.btnsLayer.sortingOrder=orginLayer+2
Game.GlobalEvent:RemoveEvent(GameEvent.UI.OnClose, triggerCallBack)
--self.selsectSkillImage:SetActive(false)
end
end
self:SetBtnsLayer()
Game.GlobalEvent:AddEvent(GameEvent.UI.OnClose, triggerCallBack)
end
end
if btnCount>2 then
self.line1:SetActive(true)
self.line3:SetActive(true)
else
self.line1:SetActive(false)
self.line3:SetActive(false)
end
if btnCount>4 then
self.line2:SetActive(true)
self.line4:SetActive(true)
else
self.line2:SetActive(false)
self.line4:SetActive(false)
end
Util.AddClick(self.posBtn, function()
2022-01-11 18:11:13 +08:00
UIManager.OpenPanel(UIName.RolePosInfoPopup,heroConFigData,star)
end)
end
function HandBookRoleInfoLayout:SetBtnsLayer()
if CurrOpenPanel then
self.btnsLayer.sortingOrder=CurrOpenPanel.sortingOrder + 1
end
end
2022-01-11 18:11:13 +08:00
--计算英雄属性 1 初始 2 指定星级 _starNum星级变化
2022-01-11 18:11:13 +08:00
function HandBookRoleInfoLayout:CalculateHeroAllProValList(_starType,_starNum,curLvNum)
local allAddProVal = {}
for i, v in ConfigPairs(propertyConfig) do
allAddProVal[i] = 0
end
breakId = 0
upStarId = 0
if _starType == 2 then
--等级
--解锁天赋
for i, v in ConfigPairs(ConfigManager.GetConfig(ConfigName.HeroRankupConfig)) do
if v.OpenStar == _starNum and v.Star==heroConFigData.Star then
if v.Type == 1 then
breakId = v.Id
end
if v.Type == 2 then
upStarId = v.Id
end
end
end
if breakId==0 then
breakId=6
end
end
local allOpenPassiveSkillIds = HeroManager.GetAllPassiveSkillIds(heroConFigData, breakId, upStarId)
--单体加成 --单体等级限制加成 --团体加成 --减乘
local singleHeroProVal, lvProVal, allHeroProVal, specialProVal =
HeroManager.CalculatePassiveSkillsValList(WarPowerType.Hero, allOpenPassiveSkillIds)
HeroManager.DoubleTableCompound(allAddProVal, singleHeroProVal)
HeroManager.DoubleTableCompound(allAddProVal, lvProVal)
HeroManager.DoubleTableCompound(allAddProVal, allHeroProVal)
for k, v in pairs(allAddProVal) do
allAddProVal[k] = allAddProVal[k] / 100
end
allAddProVal[HeroProType.Attack]=HeroManager.CalculateProVal(heroConFigData.Attack, curLvNum, breakId,upStarId,HeroProType.Attack) + allAddProVal[HeroProType.Attack]
allAddProVal[HeroProType.Hp]=HeroManager.CalculateProVal(heroConFigData.Hp, curLvNum, breakId,upStarId,HeroProType.Hp) + allAddProVal[HeroProType.Hp]
allAddProVal[HeroProType.PhysicalDefence]=HeroManager.CalculateProVal(heroConFigData.PhysicalDefence, curLvNum, breakId,upStarId,HeroProType.PhysicalDefence) + allAddProVal[HeroProType.PhysicalDefence]
allAddProVal[HeroProType.MagicDefence]=HeroManager.CalculateProVal(heroConFigData.MagicDefence, curLvNum, breakId,upStarId,HeroProType.MagicDefence) + allAddProVal[HeroProType.MagicDefence]
--allAddProVal[HeroProType.Speed]= math.floor(((curSpeedFormulaData[1] * math.pow(breakId, 3) + curSpeedFormulaData[2] * math.pow(breakId, 2) + curSpeedFormulaData[3] * breakId + curSpeedFormulaData[4]) + heroConFigData.Speed * speedNum))
--for i = 1, #heroConFigData.SecondaryFactor do
-- local proId = heroConFigData.SecondaryFactor[i][1]
-- if propertyConfig[proId].Style ==2 then
-- allAddProVal[heroConFigData.SecondaryFactor[i][1]] = heroConFigData.SecondaryFactor[i][2]/10000
-- else
-- allAddProVal[heroConFigData.SecondaryFactor[i][1]] = heroConFigData.SecondaryFactor[i][2]
-- end
--end
2022-01-11 18:11:13 +08:00
for key, value in pairs(allAddProVal) do
allAddProVal[key] = math.floor(value)
end
return allAddProVal
end
function HandBookRoleInfoLayout:OnHide()
self.gameObject:SetActive(false)
end
--界面关闭时调用(用于子类重写)
function HandBookRoleInfoLayout:OnClose()
end
--界面销毁时调用(用于子类重写)
function HandBookRoleInfoLayout:OnDestroy()
2021-04-21 13:12:04 +08:00
this.spLoader:Destroy()
end
return HandBookRoleInfoLayout