321 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Lua
		
	
			
		
		
	
	
			321 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Lua
		
	
require("Base/BasePanel")
 | 
						|
XiaoyaoHeroGetPopup = Inherit(BasePanel)
 | 
						|
local this=XiaoyaoHeroGetPopup
 | 
						|
 | 
						|
local itemConfig=ConfigManager.GetConfig(ConfigName.ItemConfig)
 | 
						|
local FreeTravelStore=ConfigManager.GetConfig(ConfigName.FreeTravelStore)
 | 
						|
local HeroConfig = ConfigManager.GetConfig(ConfigName.HeroConfig)
 | 
						|
local artResourceConfig = ConfigManager.GetConfig(ConfigName.ArtResourcesConfig)
 | 
						|
local propertyConfig = ConfigManager.GetConfig(ConfigName.PropertyConfig)
 | 
						|
 | 
						|
local curHeroData = {}
 | 
						|
local curIndex = 1
 | 
						|
local heroData = {}
 | 
						|
local pointPrefabs = {}
 | 
						|
local allSkillDatas = {}
 | 
						|
local costId = 0
 | 
						|
local costNum = 0
 | 
						|
local heroSData
 | 
						|
--初始化组件(用于子类重写)
 | 
						|
function XiaoyaoHeroGetPopup:InitComponent()
 | 
						|
    this.spLoader = SpriteLoader.New()
 | 
						|
    this.titleText = Util.GetGameObject(self.transform, "Panel/bg/title"):GetComponent("Text")
 | 
						|
    this.BtnBack=Util.GetGameObject(self.transform, "Panel/bg/btnBack")
 | 
						|
    this.remainTimes = Util.GetGameObject(self.transform, "Panel/remainTimes"):GetComponent("Text")
 | 
						|
 | 
						|
    this.liveRoot=Util.GetGameObject(self.transform, "Panel/liveRoot")
 | 
						|
    this.heroName = Util.GetGameObject(self.transform, "Panel/RoleInfo/nameAndPossLayout/heroName"):GetComponent("Text")
 | 
						|
    this.profession = Util.GetGameObject(self.transform, "Panel/RoleInfo/nameAndPossLayout/proImage/proImage"):GetComponent("Image")
 | 
						|
    this.starGrid = Util.GetGameObject(self.transform, "Panel/RoleInfo/sartAndLvLayout")
 | 
						|
 | 
						|
    this.posBgImage = Util.GetGameObject(self.transform,"Panel/RoleInfo/pos"):GetComponent("Image")
 | 
						|
    this.posImage=Util.GetGameObject(self.transform,"Panel/RoleInfo/pos/posImage"):GetComponent("Image")
 | 
						|
    this.posText=Util.GetGameObject(self.transform,"Panel/RoleInfo/pos/posText"):GetComponent("Text")
 | 
						|
   
 | 
						|
    this.skillGrid=Util.GetGameObject(self.transform,"Panel/RoleInfo/skill")
 | 
						|
    this.skillPre=Util.GetGameObject(self.transform,"Panel/RoleInfo/skill/sBg1")
 | 
						|
   
 | 
						|
    this.talismanBtn=Util.GetGameObject(self.transform,"Panel/RoleInfo/Other/TalismanBtn")
 | 
						|
    this.talismanIcon=Util.GetGameObject(self.transform,"Panel/RoleInfo/Other/TalismanBtn/Icon"):GetComponent("Image")
 | 
						|
    this.talentBtn=Util.GetGameObject(self.transform,"Panel/RoleInfo/Other/talentBtn")
 | 
						|
    this.talentProgress=Util.GetGameObject(self.transform,"Panel/RoleInfo/Other/talentBtn/progress"):GetComponent("Text")
 | 
						|
 | 
						|
    this.costIcon=Util.GetGameObject(self.transform,"Panel/buyPanel/item/proImage/proImage"):GetComponent("Image")
 | 
						|
    this.costNum=Util.GetGameObject(self.transform,"Panel/buyPanel/item/heroName"):GetComponent("Text")
 | 
						|
 | 
						|
    this.buyBtn = Util.GetGameObject(self.transform,"Panel/buyPanel/buy")
 | 
						|
 | 
						|
    this.pointGrid = Util.GetGameObject(self.transform,"Panel/buyPanel/grid")
 | 
						|
    this.point = Util.GetGameObject(self.transform,"Panel/buyPanel/point")
 | 
						|
    this.selectKuang = Util.GetGameObject(self.transform,"Panel/buyPanel/select")
 | 
						|
 | 
						|
    this.leftBtn= Util.GetGameObject(self.transform,"Panel/leftBtn")
 | 
						|
    this.rightBtn = Util.GetGameObject(self.transform,"Panel/rightBtn")
 | 
						|
 | 
						|
    this.zhekouImage = Util.GetGameObject(self.transform,"Panel/buyPanel/Image"):GetComponent("Image")
 | 
						|
end
 | 
						|
 | 
						|
local triggerCallBack
 | 
						|
--绑定事件(用于子类重写)
 | 
						|
function XiaoyaoHeroGetPopup:BindEvent()
 | 
						|
    Util.AddClick(this.BtnBack, function()
 | 
						|
        PlaySoundWithoutClick(SoundConfig.Sound_UICancel)
 | 
						|
        self:ClosePanel()
 | 
						|
    end)
 | 
						|
    Util.AddClick(this.rightBtn, function()
 | 
						|
        poolManager:UnLoadLive(this.testLiveGO.name, this.testLiveGO)
 | 
						|
        this.testLiveGO = nil
 | 
						|
        curIndex = curIndex + 1
 | 
						|
        if curIndex > #heroData then
 | 
						|
            curIndex = 1
 | 
						|
        end
 | 
						|
        curHeroData = heroData[curIndex]
 | 
						|
        this:SetSelectHero(curHeroData)
 | 
						|
    end)
 | 
						|
 | 
						|
    Util.AddClick(this.leftBtn, function()
 | 
						|
        poolManager:UnLoadLive(this.testLiveGO.name, this.testLiveGO)
 | 
						|
        this.testLiveGO = nil
 | 
						|
        curIndex = curIndex - 1
 | 
						|
        if curIndex < 1 then
 | 
						|
            curIndex = #heroData
 | 
						|
        end
 | 
						|
        curHeroData = heroData[curIndex]
 | 
						|
        this:SetSelectHero(curHeroData)
 | 
						|
    end)
 | 
						|
 | 
						|
    Util.AddClick(this.buyBtn, function(msg)
 | 
						|
        if BagManager.GetItemCountById(costId) < costNum then
 | 
						|
            PopupTipPanel.ShowTip(GetLanguageStrById(itemConfig[costId].Name)..Language[10657])
 | 
						|
        else
 | 
						|
        local rightAction = function() 
 | 
						|
            NetManager.XiaoyaoyouGetHeroRequest(curHeroData.goodsIndex,function(msg)
 | 
						|
                if  this.testLiveGO then
 | 
						|
                    poolManager:UnLoadLive(this.testLiveGO.name, this.testLiveGO)
 | 
						|
                    this.testLiveGO = nil
 | 
						|
                end
 | 
						|
                XiaoYaoManager.UpdateHeroData(curHeroData.goodsIndex)
 | 
						|
                XiaoYaoManager.GetHeroIndex = 0
 | 
						|
                this:OnShow()
 | 
						|
                UIManager.OpenPanel(UIName.RewardItemPopup, msg.drop,1)
 | 
						|
            end)
 | 
						|
        end
 | 
						|
            --UIManager.OpenPanel(UIName.MsgPanel)
 | 
						|
            MsgPanel.ShowTwo(Language[11999]..costNum.."</color>"..GetLanguageStrById(itemConfig[costId].Name)..Language[12000]..GetLanguageStrById(heroSData.ReadingName).."</color>]?", nil, rightAction, Language[10731], Language[10732], Language[12001],false,"")          
 | 
						|
        end
 | 
						|
    end)
 | 
						|
end
 | 
						|
--添加事件监听(用于子类重写)
 | 
						|
function XiaoyaoHeroGetPopup:AddListener()
 | 
						|
 | 
						|
end
 | 
						|
 | 
						|
--移除事件监听(用于子类重写)
 | 
						|
function XiaoyaoHeroGetPopup:RemoveListener()
 | 
						|
 | 
						|
end
 | 
						|
function this.CalculateHeroAllProValList(heroConFigData,_starNum,isCalculateStarVal)
 | 
						|
    local allAddProVal = {}
 | 
						|
    for i, v in ConfigPairs(propertyConfig) do
 | 
						|
        allAddProVal[i] = 0
 | 
						|
    end
 | 
						|
    local heroRankupConfig = ConfigManager.GetConfigDataByDoubleKey(ConfigName.HeroRankupConfig, "Star", heroConFigData.Star, "LimitStar", _starNum)
 | 
						|
    local curLvNum=1
 | 
						|
    local breakId = 0
 | 
						|
    local upStarId = 0
 | 
						|
    if isCalculateStarVal then
 | 
						|
        --等级
 | 
						|
        curLvNum = heroRankupConfig.OpenLevel
 | 
						|
        --解锁天赋
 | 
						|
        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
 | 
						|
    allAddProVal[HeroProType.Attack]=HeroManager.CalculateProVal(heroConFigData.Attack, curLvNum, breakId,upStarId,HeroProType.Attack)
 | 
						|
    allAddProVal[HeroProType.Hp]=HeroManager.CalculateProVal(heroConFigData.Hp, curLvNum, breakId,upStarId,HeroProType.Hp)
 | 
						|
    allAddProVal[HeroProType.PhysicalDefence]=HeroManager.CalculateProVal(heroConFigData.PhysicalDefence, curLvNum, breakId,upStarId,HeroProType.PhysicalDefence)
 | 
						|
    allAddProVal[HeroProType.MagicDefence]=HeroManager.CalculateProVal(heroConFigData.MagicDefence, curLvNum, breakId,upStarId,HeroProType.MagicDefence)
 | 
						|
    Util.AddOnceClick(this.talentBtn,function()
 | 
						|
        UIManager.OpenPanel(UIName.RoleTalentPopup,heroConFigData,breakId,upStarId)
 | 
						|
    end)
 | 
						|
    if heroConFigData.OpenPassiveSkillRules then
 | 
						|
        local openlists,compoundOpenNum,compoundNum = HeroManager.GetAllPassiveSkillIds(heroConFigData,breakId,upStarId)
 | 
						|
        this.talentProgress.text = #openlists - compoundOpenNum .."/"..#heroConFigData.OpenPassiveSkillRules - compoundNum
 | 
						|
    end
 | 
						|
    return allAddProVal
 | 
						|
end
 | 
						|
--界面打开时调用(用于子类重写)
 | 
						|
function XiaoyaoHeroGetPopup:OnOpen()
 | 
						|
    this.titleText = Language[12002]
 | 
						|
end
 | 
						|
function XiaoyaoHeroGetPopup:OnShow()
 | 
						|
    curIndex = XiaoYaoManager.GetHeroIndex < 1 and 1 or XiaoYaoManager.GetHeroIndex
 | 
						|
    heroData = XiaoYaoManager.GetHeroDatas()
 | 
						|
    this.talentBtn:GetComponent("Image").sprite = this.spLoader:LoadSprite("r_hero_tianfu1_zh")
 | 
						|
    if not heroData or #heroData < 1 then
 | 
						|
        this:ClosePanel()
 | 
						|
        return
 | 
						|
    end
 | 
						|
 | 
						|
    curHeroData = heroData[curIndex]
 | 
						|
 | 
						|
    for i = 1 , #pointPrefabs do
 | 
						|
        pointPrefabs[i].gameObject:SetActive(false)
 | 
						|
    end
 | 
						|
    for i = 1 , #heroData do
 | 
						|
        if not pointPrefabs[i] then
 | 
						|
            pointPrefabs[i] = newObjToParent(this.point,this.pointGrid)
 | 
						|
        end
 | 
						|
        pointPrefabs[i].gameObject:SetActive(true)
 | 
						|
    end
 | 
						|
 | 
						|
    this:SetSelectHero(curHeroData)
 | 
						|
end
 | 
						|
 | 
						|
function this:TimerDown()
 | 
						|
    if this.timer then
 | 
						|
        this.timer:Stop()
 | 
						|
        this.timer = nil
 | 
						|
    end
 | 
						|
    local timeDown = curHeroData.remainTime - PlayerManager.serverTime
 | 
						|
    local temp = 0
 | 
						|
    this.remainTimes.text = Language[10023]..TimeToHMS(timeDown)
 | 
						|
    this.timer = Timer.New(function()
 | 
						|
        if timeDown < 1 then
 | 
						|
           XiaoYaoManager.GetHeroIndex = 0
 | 
						|
           this:OnShow()         
 | 
						|
           return 
 | 
						|
        end
 | 
						|
        for i = 1 , #heroData do
 | 
						|
            temp = heroData[i].remainTime - PlayerManager.serverTime
 | 
						|
            if temp < 1 then
 | 
						|
                this:OnShow()
 | 
						|
                return 
 | 
						|
            end
 | 
						|
        end
 | 
						|
        timeDown = timeDown - 1
 | 
						|
        this.remainTimes.text = Language[10023]..TimeToHMS(timeDown)
 | 
						|
    end, 1, -1, true)
 | 
						|
    this.timer:Start()
 | 
						|
end
 | 
						|
 | 
						|
function this:SetSelectHero(curHeroData)
 | 
						|
    --LogGreen("curHeroData.goodsId  :"..curHeroData.goodsId)
 | 
						|
    local heroSId = FreeTravelStore[curHeroData.goodsId].Goods[1]  
 | 
						|
    heroSData = HeroConfig[heroSId]
 | 
						|
    local heroStar = heroSData.Star
 | 
						|
    allSkillDatas = HeroManager.GetCurHeroSidAndCurStarAllSkillDatas(heroSId,heroStar)   
 | 
						|
 | 
						|
    this.ShowHeroLive(heroSData)
 | 
						|
    --星级
 | 
						|
    SetHeroStars(this.spLoader, this.starGrid, heroSData.Star,1,Vector2.New(42.44,42.44),-7.28, Vector2.New(0.5,0.5), Vector3.New(0,0,-15))
 | 
						|
    this.skillGrid:GetComponent("Canvas").sortingOrder = self.sortingOrder + 1
 | 
						|
    local skillList = HeroManager.GetCurHeroSidAndCurStarAllSkillDatas2(heroSData.Id,heroSData.Star)
 | 
						|
 | 
						|
    for i = 1, this.skillGrid.transform.childCount do
 | 
						|
        this.skillGrid.transform:GetChild(i-1).gameObject:SetActive(false)
 | 
						|
    end
 | 
						|
 | 
						|
    for i = 1, 2 do
 | 
						|
        if skillList[i] and skillList[i].skillConfig and skillList[i].skillConfig.Name then
 | 
						|
            local go = this.skillGrid.transform:GetChild(i-1).gameObject
 | 
						|
            go:SetActive(true)
 | 
						|
            Util.GetGameObject(go.transform,"s"):GetComponent("Image").sprite=this.spLoader:LoadSprite(GetResourcePath(skillList[i].skillConfig.Icon))
 | 
						|
            Util.GetGameObject(go.transform,"s/Text"):GetComponent("Text").text=SubString2(GetLanguageStrById(skillList[i].skillConfig.Name),10)--Language[10453].. 1(skillList[i].skillConfig.Id % 10)
 | 
						|
            Util.GetGameObject(go.transform,"SkillTypeImage"):GetComponent("Image").sprite=this.spLoader:LoadSprite(GetSkillType(allSkillDatas[i]))
 | 
						|
            Util.AddOnceClick(Util.GetGameObject(go.transform,"s"), function()
 | 
						|
                local skillData = {}
 | 
						|
                skillData.skillConfig = skillList[i].skillConfig
 | 
						|
                skillData.isOpen=skillList[i].isOpen
 | 
						|
                skillData.needStar=skillList[i].needStar
 | 
						|
                UIManager.OpenPanel(UIName.SkillInfoPopup,skillData,1,heroStar,1,i)
 | 
						|
            end)
 | 
						|
        end
 | 
						|
    end
 | 
						|
    --法宝
 | 
						|
    this.talismanBtn.gameObject:SetActive(heroSData.EquipTalismana~=nil)
 | 
						|
    if heroSData.EquipTalismana~=nil then
 | 
						|
        this.talismanIcon.sprite = this.spLoader:LoadSprite(GetResourcePath(itemConfig[heroSData.EquipTalismana[2]].ResourceID))
 | 
						|
    end
 | 
						|
    Util.AddOnceClick(this.talismanBtn.gameObject,function()
 | 
						|
        UIManager.OpenPanel(UIName.TalismanInfoPopup,heroSData,1,1)
 | 
						|
    end)
 | 
						|
    this.selectKuang.transform:SetParent(pointPrefabs[curIndex].transform)
 | 
						|
    this.selectKuang:GetComponent("RectTransform").localPosition = Vector3.zero
 | 
						|
    this.ShowHeroBuyInfo(curHeroData)
 | 
						|
 | 
						|
    this.CalculateHeroAllProValList(heroSData,heroStar,heroStar ~= heroSData.Star)
 | 
						|
 | 
						|
    this:TimerDown()
 | 
						|
end
 | 
						|
 | 
						|
function this.ShowHeroLive(_heroSConfigData)
 | 
						|
    this.testLiveGO = poolManager:LoadLive(GetResourcePath(_heroSConfigData.Live), this.liveRoot.transform,
 | 
						|
            Vector3.one * _heroSConfigData.Scale*0.7, Vector3.New(_heroSConfigData.PositionView[1], _heroSConfigData.PositionView[2], 0))
 | 
						|
    local SkeletonGraphic = this.testLiveGO:GetComponent("SkeletonGraphic")
 | 
						|
    local idle = function() SkeletonGraphic.AnimationState:SetAnimation(0, "idle", true) end
 | 
						|
    SkeletonGraphic.AnimationState.Complete = SkeletonGraphic.AnimationState.Complete + idle
 | 
						|
    poolManager:SetLiveClearCall(GetResourcePath(_heroSConfigData.Live), this.testLiveGO, function ()
 | 
						|
        SkeletonGraphic.AnimationState.Complete = SkeletonGraphic.AnimationState.Complete - idle
 | 
						|
    end)
 | 
						|
    
 | 
						|
    this.posBgImage.sprite=this.spLoader:LoadSprite(GetHeroPosBgStr(_heroSConfigData.Profession))
 | 
						|
    this.posImage.sprite=this.spLoader:LoadSprite(GetHeroPosStr(_heroSConfigData.Profession))
 | 
						|
    this.posText.text=GetLanguageStrById(_heroSConfigData.HeroLocation)
 | 
						|
	SetTextVerTial(this.posText,Vector3.New(83.4,0.5,0))
 | 
						|
    this.heroName.text = GetLanguageStrById(_heroSConfigData.ReadingName)
 | 
						|
  
 | 
						|
    this.profession.sprite = this.spLoader:LoadSprite(GetProStrImageByProNum(_heroSConfigData.PropertyName))
 | 
						|
end
 | 
						|
 | 
						|
function this.ShowHeroBuyInfo(_heroSConfigData)
 | 
						|
    local heroBuyInfo = FreeTravelStore[curHeroData.goodsId]
 | 
						|
    costId = heroBuyInfo.Cost[1]
 | 
						|
    costNum = heroBuyInfo.Cost[2]
 | 
						|
    this.costIcon.sprite = this.spLoader:LoadSprite(artResourceConfig[itemConfig[costId].ResourceID].Name) 
 | 
						|
    if BagManager.GetItemCountById(costId) < costNum then
 | 
						|
        this.costNum.text = "<color=#FF0000>" .. costNum .. "</color>"
 | 
						|
    else
 | 
						|
        this.costNum.text = "<color=#C8AD83>" .. costNum .. "</color>"
 | 
						|
    end
 | 
						|
    this.zhekouImage.sprite = this.spLoader:LoadSprite(heroBuyInfo.Discount)
 | 
						|
end
 | 
						|
 | 
						|
--界面关闭时调用(用于子类重写)
 | 
						|
function XiaoyaoHeroGetPopup:OnClose()
 | 
						|
    Game.GlobalEvent:DispatchEvent(GameEvent.XiaoYao.RefreshEventShow)
 | 
						|
    if  this.testLiveGO then
 | 
						|
        poolManager:UnLoadLive(this.testLiveGO.name, this.testLiveGO)
 | 
						|
        this.testLiveGO = nil
 | 
						|
    end
 | 
						|
    if this.timer then
 | 
						|
        this.timer:Stop()
 | 
						|
        this.timer = nil
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
--界面销毁时调用(用于子类重写)
 | 
						|
function XiaoyaoHeroGetPopup:OnDestroy()
 | 
						|
    this.spLoader:Destroy()
 | 
						|
    if  this.testLiveGO then
 | 
						|
        poolManager:UnLoadLive(this.testLiveGO.name, this.testLiveGO)
 | 
						|
        this.testLiveGO = nil
 | 
						|
    end
 | 
						|
    if this.timer then
 | 
						|
        this.timer:Stop()
 | 
						|
        this.timer = nil
 | 
						|
    end
 | 
						|
    pointPrefabs = {}
 | 
						|
end
 | 
						|
 | 
						|
return XiaoyaoHeroGetPopup |