-- 编队动作
FORMATION_ACTION = {
DOWN = 0, -- 下阵神将
UP = 1 -- 上阵神将
}
require("Base/BasePanel")
FormationPanelV2 = Inherit(BasePanel)
local this = FormationPanelV2
local heroConfig=ConfigManager.GetConfig(ConfigName.HeroConfig)
local elementalResonanceConfig = ConfigManager.GetConfig(ConfigName.ElementalResonanceConfig)
local endLess=ConfigManager.GetConfig(ConfigName.EndlessHeroProp)
local roleConfig=ConfigManager.GetConfig(ConfigName.RoleConfig)
local orginLayer
local curFormation --打开面板编队信息
this.choosedList={}--选择上阵列表 临时数据
this.curFormationIndex = 1 --当前编队索引
this.trigger={}
local bgListGo={} --上阵背景预设
local heroListGo = {}--英雄上阵预设列表
local maskListGo={} --上阵遮罩
local dragViewListGo={}--dragView预设列表
local effectList = {}--特效列表
local tabs = {}--筛选按钮
local proId=0--0 全部 1 火 2风 3 水 4 地
local sortType = 1 -- 1:品阶 2:等级
local chooseIndex=0
local chooseHeroObj --当前选中英雄
this.formationPower = 0--战力
local oldPowerNum = 0 --旧战力
local tempPowerNum=0 --临时战力
local liveNodes={}--立绘容器
local liveNames={}--立绘名容器
local panelType
local parameter --透传参数
local tabsImg = {"z_icon_01_zh", "r_hero_huo 1_zh", "r_hero_feng 1_zh", "r_hero_shui 1_zh", "r_hero_dadi 1_zh","z_icon_qingjinbao"}
local isPress = false
-- 各个类型编队系统逻辑列表
this.PanelOptionView = {
[FORMATION_TYPE.CARBON] = "Modules/Formation/View/CarbonFormation",
[FORMATION_TYPE.STORY] = "Modules/Formation/View/StoryFormation",
[FORMATION_TYPE.MAIN] = "Modules/Formation/View/MainFormation",
[FORMATION_TYPE.ARENA_DEFEND] = "Modules/Formation/View/ArenaDefendFormation",
[FORMATION_TYPE.ARENA_ATTACK] = "Modules/Formation/View/ArenaAttackFormation",
[FORMATION_TYPE.ARENA_TOP_MATCH] = "Modules/Formation/View/ArenaTopMatchFormation",
[FORMATION_TYPE.ADVENTURE] = "Modules/Formation/View/AdventureFormation",
[FORMATION_TYPE.ADVENTURE_BOSS] = "Modules/Formation/View/AdventureBossFormation",
[FORMATION_TYPE.ELITE_MONSTER] = "Modules/Formation/View/EliteMonsterFormation",
[FORMATION_TYPE.GUILD_DEFEND] = "Modules/Formation/View/GuildFightDefendFormation",
[FORMATION_TYPE.GUILD_ATTACK] = "Modules/Formation/View/GuildFightAttackFormation",
[FORMATION_TYPE.GUILD_BOSS] = "Modules/Formation/View/GuildBossFormation",
[FORMATION_TYPE.MONSTER_CAMP] = "Modules/Formation/View/MonsterCampFormation",
[FORMATION_TYPE.BLOODY_BATTLE] = "Modules/Formation/View/FormFightFormation",
[FORMATION_TYPE.PLAY] = "Modules/Formation/View/PlayWithSBFormation",
[FORMATION_TYPE.EXPEDITION] = "Modules/Formation/View/ExpeditionFormation",
[FORMATION_TYPE.SAVE_FORMATION]="Modules/Formation/View/SaveFormation",
[FORMATION_TYPE.GUILD_CAR_DELEAY]="Modules/Formation/View/GuildCarDeleayFormation",
[FORMATION_TYPE.GUILD_DEATHPOS]="Modules/Formation/View/GuildDeathPosFormation",
[FORMATION_TYPE.XUANYUAN_MIRROR]="Modules/Formation/View/XuanYuanMirrorFormation",
[FORMATION_TYPE.GUILD_TRANSCRIPT]="Modules/Formation/View/GuildTranscriptFormation",
[FORMATION_TYPE.FOUR_ELEMENT]="Modules/Formation/View/FourElementFormation",
[FORMATION_TYPE.FIGHTLEVEL]="Modules/Formation/View/FightLevelFormation",
[FORMATION_TYPE.JUMPSERVER_HIGHTLADDER]="Modules/Formation/View/JumpServerHightLadderFormation",
[FORMATION_TYPE.WORLDARENA]="Modules/Formation/View/WorldArenaFormation",
[FORMATION_TYPE.QIJIESHILIAN]="Modules/Formation/View/QiJieFormation",
[FORMATION_TYPE.LINGMAIMIJING]="Modules/Formation/View/LingMaiFormation",
[FORMATION_TYPE.ExploreFunc]="Modules/Formation/View/ExploreFormation",
[FORMATION_TYPE.ChallengeCopy_1]="Modules/Formation/View/ChallengeCopyFormation",
[FORMATION_TYPE.ChallengeCopy_2]="Modules/Formation/View/ChallengeCopyFormation",
[FORMATION_TYPE.GodsWayTower_two]="Modules/Formation/View/GodsWayTowerFormation",
[FORMATION_TYPE.GodsWayTower_three]="Modules/Formation/View/GodsWayTowerFormation",
}
function this:InitComponent()
this.spLoader = SpriteLoader.New()
orginLayer=0
this.UpView = SubUIManager.Open(SubUIConfig.UpView, self.gameObject.transform, { showType = UpViewOpenType.ShowLeft })
this.bg = Util.GetGameObject(this.gameObject, "Bg")
this.backBtn = Util.GetGameObject(this.gameObject, "BackBtn")
this.exampleBtn=Util.GetGameObject(this.gameObject,"ExampleBtn")
this.effect = Util.GetGameObject(this.gameObject, "effect")
this.power = Util.GetGameObject(this.gameObject, "Power/Value"):GetComponent("Text")
this.root=Util.GetGameObject(this.gameObject,"Root")
-- Util.GetGameObject(this.gameObject, "Power"):GetComponent("Image").sprite = this.spLoader:LoadSprite("t_tongyong-zhanli_zh")
this.roleGrid=Util.GetGameObject(this.gameObject,"RoleGrid")
this.line=Util.GetGameObject(this.gameObject,"RoleGrid/Line")
for i = 1, 6 do
bgListGo[i]=Util.GetGameObject(this.gameObject,"RoleGrid/Bg"..i)
heroListGo[i] = Util.GetGameObject(this.gameObject,"RoleGrid/Bg"..i.."/Hero"..i)
maskListGo[i]=Util.GetGameObject(this.gameObject,"RoleGrid/Mask"..i)
if not dragViewListGo[i] then
dragViewListGo[i] = SubUIManager.Open(SubUIConfig.DragView, bgListGo[i].transform)
end
dragViewListGo[i].gameObject.name="DragView"..i
dragViewListGo[i].gameObject:SetActive(false)
dragViewListGo[i]:SetScrollMouse(false)
this.trigger[i]=Util.GetEventTriggerListener(dragViewListGo[i].gameObject)
this.trigger[i].onPointerDown= this.trigger[i].onPointerDown+this.OnPointerDown
this.trigger[i].onPointerUp= this.trigger[i].onPointerUp+this.OnPointerUp
this.trigger[i].onEndDrag= this.trigger[i].onEndDrag+this.OnEndDrag
this.trigger[i].onDrag=this.trigger[i].onDrag+this.OnDrag
dragViewListGo[i]:SetDragGO(heroListGo[i])
end
--滚动条
this.heroPre = Util.GetGameObject(this.gameObject, "Scroll/HeroPre")
this.empty=Util.GetGameObject(this.gameObject,"Scroll/Empty")
this.scroll = Util.GetGameObject(this.gameObject, "Scroll")
this.scrollBar = Util.GetGameObject(this.gameObject, "Scrollbar"):GetComponent("Scrollbar")
this.scrollView = SubUIManager.Open(SubUIConfig.ScrollCycleView,this.scroll.transform,
this.heroPre, this.scrollBar, Vector2.New(1010, 490), 1, 5, Vector2.New(40, 35))
this.scrollView.gameObject:GetComponent("RectTransform").anchoredPosition = Vector2.New(0, 0)
this.scrollView.gameObject:GetComponent("RectTransform").anchorMin = Vector2.New(0.5, 0.5)
this.scrollView.gameObject:GetComponent("RectTransform").anchorMax = Vector2.New(0.5, 0.5)
this.scrollView.gameObject:GetComponent("RectTransform").pivot = Vector2.New(0.5, 0.5)
this.scrollView.moveTween.MomentumAmount = 1
this.scrollView.moveTween.Strength = 2
--筛选按钮
for i = 0, 5 do
tabs[i] = Util.GetGameObject(this.gameObject, "Grid/Tabs/Btn" .. i)
Util.GetGameObject(tabs[i], "Text"):GetComponent("Text"):GetComponent("Text").text=PropertyType[i]
tabs[i]:SetActive(true)
-- if tabsImg[i + 1] then
-- tabs[i]:GetComponent("Image").sprite = this.spLoader:LoadSprite(tabsImg[i + 1])
-- end
end
this.selectBtn = Util.GetGameObject(this.gameObject, "Grid/selectBtn")
this.selectTxt=Util.GetGameObject(this.gameObject, "Grid/selectBtn/Text"):GetComponent("Text")
--副本扫荡
this.mopUpGo = Util.GetGameObject(self.transform, "root/showMopUp")
this.btnMpoUpBack = Util.GetGameObject(self.transform, "showMopUp/bg/btnBack")
this.Slider = Util.GetGameObject(self.transform, "showMopUp/bg/Slider")
this.numText = Util.GetGameObject(self.transform, "showMopUp/bg/Slider/numText"):GetComponent("Text")
this.btnMpoUpSure = Util.GetGameObject(self.transform, "showMopUp/bg/btnSure")
this.buyGoNumTex = Util.GetGameObject(self.transform, "showMopUp/bg/buyGo/numText"):GetComponent("Text")
-- 购买次数
this.btnBuyCount = Util.GetGameObject(self.transform, "showMopUp/bg/buyGo/addBtn/GameObject")
-- 底部panel
this.bottom = Util.GetGameObject(self.gameObject, "bottom")
-- 获取按钮
this.btn_1 = Util.GetGameObject(self.gameObject, "bottom/btnbox/btn_1")
this.btn_1_lab = Util.GetGameObject(self.gameObject, "bottom/btnbox/btn_1/btnLab"):GetComponent("Text")
this.btn_2 = Util.GetGameObject(self.gameObject, "bottom/btnbox/btn_2")
this.btn_2_lab = Util.GetGameObject(self.gameObject, "bottom/btnbox/btn_2/btnLab"):GetComponent("Text")
-- tip
this.mobTip = Util.GetGameObject(self.gameObject, "bottom/mobtip")
this.costTip = Util.GetGameObject(self.gameObject, "bottom/costtip")
this.failText = Util.GetGameObject(self.gameObject, "bottom/costtip/fail")
-- 精英副本扫荡提示
this.eliteTip = Util.GetGameObject(self.gameObject, "bottom/eliTip")
this.eliteNumNeed = Util.GetGameObject(this.eliteTip, "condition"):GetComponent("Text")
-- 跳过战斗
this.passBattle0 = Util.GetGameObject(self.transform, "bottom/passBattle0")
this.passBattle1 = Util.GetGameObject(self.transform, "bottom/passBattle1")
-- 上阵等级提示
this.formTip = Util.GetGameObject(self.transform, "formTip")
-- 上阵元素提示
this.tips = Util.GetGameObject(self.transform, "bottom/tips")
this.tip = Util.GetGameObject(self.transform, "bottom/tips/tip")
this.tips.gameObject:SetActive(false)
this.mopUpGo.transform:SetParent(self.gameObject.transform)
this.mopUpGo:SetActive(false)
--元素共鸣
this.ElementalResonanceView = SubUIManager.Open(SubUIConfig.ElementalResonanceView, this.gameObject.transform)
--玉虚论道(3队)切换
this.switchBar = Util.GetGameObject(self.transform, "SwitchBar")
this.switchBar:SetActive(false)
--七界试炼
this.conditionBar = Util.GetGameObject(self.transform, "ConditionBar")
this.conditionBar:SetActive(false)
--山河社稷图
this.fightlevelconditionBar = Util.GetGameObject(self.transform, "FightLevelConditionBar")
this.fightlevelconditionBar:SetActive(false)
this.jumpFightObj=Util.GetGameObject(self.transform, "jumpFight")
this.jumpFightBtn=Util.GetGameObject(self.transform, "jumpFight/btn")
this.jumpFightGou=Util.GetGameObject(self.transform, "jumpFight/Image")
end
function this:BindEvent()
--返回按钮
Util.AddOnceClick(this.backBtn, function()
this:ClosePanel()
end)
--筛选按钮
for i = 0, 5 do
Util.AddOnceClick(tabs[i], function()
if i == proId then
proId=ProIdConst.All
else
proId=i
end
this.OnClickTabBtn(proId, true,true)
end)
end
--推荐阵容
Util.AddOnceClick(this.exampleBtn,function()
UIManager.OpenPanel(UIName.FormationExamplePopup)
end)
Util.AddOnceClick(this.jumpFightBtn,function()
local state=PlayerPrefs.GetInt(PlayerManager.uid.."isJumpFight")
if state==0 then
PlayerPrefs.SetInt(PlayerManager.uid.."isJumpFight",1)
this.jumpFightGou:SetActive(true)
elseif state==1 then
PlayerPrefs.SetInt(PlayerManager.uid.."isJumpFight",0)
this.jumpFightGou:SetActive(false)
end
end)
--通用逻辑调用
Util.AddOnceClick(this.btn_1, function()
if this.opView and this.opView.On_Btn1_Click then
this.opView.On_Btn1_Click(this.curFormationIndex)
end
end)
Util.AddOnceClick(this.btn_2, function()
if isPress then
return
end
isPress = true
if this.opView and this.opView.On_Btn2_Click then
this.opView.On_Btn2_Click(this.curFormationIndex)
end
Timer.New(function()
isPress = false
end,1):Start()
end)
end
function this:AddListener()
Game.GlobalEvent:AddEvent(GameEvent.Formation.OnFormationChange, this.RefreshPower)
Game.GlobalEvent:AddEvent(GameEvent.Formation.OnFormationChange1, this.OnShow)
end
function this:RemoveListener()
Game.GlobalEvent:RemoveEvent(GameEvent.Formation.OnFormationChange, this.RefreshPower)
Game.GlobalEvent:RemoveEvent(GameEvent.Formation.OnFormationChange1, this.OnShow)
end
function this:OnSortingOrderChange()
-- 设置特效
Util.AddParticleSortLayer(this.effect, self.sortingOrder - orginLayer+1)
for _,o in pairs(heroListGo) do
Util.AddParticleSortLayer(o, self.sortingOrder - orginLayer+1)
end
this.scrollView:ForeachItemGO(function (index, go)
Util.SetParticleSortLayer(go, self.sortingOrder + 2)
end)
orginLayer = self.sortingOrder
end
function this:OnOpen(_panelType,...)
Log("panelType:".._panelType)
panelType = _panelType
this.jumpFightObj:SetActive(CheckFunctionOpen(FUNCTION_OPEN_TYPE.FightJump) and panelType==FORMATION_TYPE.STORY)
if panelType == FORMATION_TYPE.EXPEDITION or panelType == FORMATION_TYPE.CARBON then
for k,v in pairs(bgListGo) do
-- v:GetComponent("Image").sprite = this.spLoader:LoadSprite("bd_xinkapaifan")
this.line:GetComponent("RectTransform").sizeDelta = Vector2.New(294.2,439.48)
end
else
for k,v in pairs(bgListGo) do
-- v:GetComponent("Image").sprite = this.spLoader:LoadSprite("t_chengyuankuang_kuang")
this.line:GetComponent("RectTransform").sizeDelta = Vector2.New(294.2,414.87)
end
end
-- tempPowerNum=0
this.selectBtn:SetActive(false)
this.passBattle0:SetActive(false)
this.passBattle1:SetActive(false)
this.btn_1:SetActive(false)
this.btn_1:GetComponent("Button").enabled = true
Util.SetColor(this.btn_1, Color.New(1, 1, 1, 1))
this.btn_2:SetActive(false)
this.mobTip:SetActive(false)
this.costTip:SetActive(false)
this.eliteTip:SetActive(false)
this.failText:SetActive(false)
this.formTip:SetActive(false)
this.tips:SetActive(false)
this.empty:SetActive(false)
this.opView = require(this.PanelOptionView[_panelType])
LogError("paneltype==".._panelType)
this.opView.Init(this, ...)
parameter = ...
this.SetCurFormationIndex(this.opView:GetFormationIndex())
SoundManager.PlaySound(SoundConfig.Sound_BattleStart_01)
end
function this:OnShow()
isPress = false
this.ElementalResonanceView:OnOpen({sortOrder=self.sortingOrder})
this.SetDrawLevel()
--部分界面有特殊条件显示,集体管理
this.CheckCondition()
this.jumpFightGou:SetActive(PlayerPrefs.GetInt(PlayerManager.uid.."isJumpFight")==1)
end
-- update方法
function this:Update()
if this.opView.Update then
this.opView.Update()
end
end
function this:OnClose()
isPress = false
tempPowerNum = 0
this.formationPower = 0
oldPowerNum = 0
proId=0--面板关闭时 重置筛选按钮为全部
for i = 1, #this.choosedList do
local pos=this.choosedList[i].position
local o=heroListGo[pos]
if liveNodes[o] then
poolManager:UnLoadLive(liveNames[o], liveNodes[o])
liveNames[o] = nil
end
end
if this.curFormationIndex == FormationTypeDef.FORMATION_ENDLESS_MAP then
EndLessMapManager.SetCanUseHeroNew()
CheckRedPointStatus(RedPointType.wujinBianDui)
CheckRedPointStatus(RedPointType.EndlessPanel)
end
end
function this:OnDestroy()
this.spLoader:Destroy()
SubUIManager.Close(this.UpView)
SubUIManager.Close(this.ElementalResonanceView)
dragViewListGo={}
this.choosedList={}
heroListGo={}
this.scrollView = nil
end
function this.SetCurFormationIndex(_index)
this.curFormationIndex = _index
FormationManager.currentFormationIndex = _index
-- 刷新显示
this.RefreshFormation(true,true)
end
--刷新编队
function this.RefreshFormation(isTop,isAni)
proId= ProIdConst.All
if this.opView.GetCurFormation then
curFormation = this.opView.GetCurFormation()
LogError("获取编对=======")
else
--获取当前编队数据
if this.curFormationIndex == FormationTypeDef.FORMATION_ENDLESS_MAP then
this.opView:RrefreshFormation()
elseif this.curFormationIndex == FormationTypeDef.FORMATION_ENDLESS_MAP then
EndLessMapManager.RrefreshFormation()
elseif this.curFormationIndex == FormationTypeDef.EXPEDITION then
ExpeditionManager.ExpeditionRrefreshFormation()--刷新编队
elseif this.curFormationIndex == FormationTypeDef.FIGHT_ASSISTANTLEVEL then
FightLevelManager.RrefreshFormation(parameter)--刷新编队
end
LogError("this.curFormationIndex===="..this.curFormationIndex)
curFormation = FormationManager.GetFormationByID(this.curFormationIndex)
end
--上阵列表赋值
this.choosedList ={}
if curFormation.teamHeroInfos then
for j = 1, #curFormation.teamHeroInfos do
local teamInfo = curFormation.teamHeroInfos[j]
-- 加空判断避免不知名错误
if teamInfo then
table.insert(this.choosedList, {heroId = teamInfo.heroId, position = teamInfo.position})
end
end
end
-- 刷新显示
this.RefreshShow(isTop,isAni)
end
function this.RefreshShow(isTop,isAni)
--设置上阵英雄信息
this.SetCardsData()
--显示英雄列表
this.OnClickTabBtn(proId, isTop, isAni)
--战力
if this.curFormationIndex~=2001 and this.curFormationIndex~=2002 and this.curFormationIndex~=2003 then
this.RefreshPower()
end
end
function this.RefreshHeroList()
this.OnClickTabBtn(proId,false,false)
end
--设置编队上阵英雄信息
function this.SetCardsData()
if this.curFormationIndex == FormationTypeDef.PEOPLE_MIRROR
or this.curFormationIndex == FormationTypeDef.BUDDHIST_MIRROR
or this.curFormationIndex == FormationTypeDef.MAGIC_MIRROR
or this.curFormationIndex == FormationTypeDef.TAOIST_MIRROR then
this.opView.RefreshFormation(this.choosedList)
end
LogGreen("刷新编队·············· ")
FormationManager.UpdateTemporaryFormation(FormationTypeDef.FORMATION_TEMPORARY, this.choosedList)
this.formationPower = 0--战力
this.formationPowerOld = 0--战力
--元素共鸣
this.ElementalResonanceView:GetElementalType(this.choosedList,1)
this.ElementalResonanceView:SetPosition(1)
this.InitArmPos()
this.InitArmData()
--编队为0显示0战力
if #this.choosedList<=0 then
this.formationPower=0
this.formationPowerOld = 0
end
this.power.text=this.formationPower
--飘战力
local newPowerNum = this.formationPower
if tempPowerNum ~= newPowerNum and tempPowerNum ~= 0 then
UIManager.OpenPanel(UIName.WarPowerChangeNotifyPanelV2,{oldValue = tempPowerNum,newValue = newPowerNum,pos=Vector3.New(-467,837.2),duration=0.7,isShowBg=false,isShowOldNum=false,pivot=Vector2.New(0,0.5)})
end
tempPowerNum = this.formationPower
--部分界面有特殊条件显示,集体管理
this.CheckCondition()
end
-- 设置编队上阵位置显隐
function this.InitArmPos()
for i = 1, 6 do
local mask =maskListGo[i]
local info= heroListGo[i]
local limitStr = Util.GetGameObject(mask, "lvLimit"):GetComponent("Text")
local armNum = ActTimeCtrlManager.MaxArmyNum()--最大上阵人数
local canOn = i<= armNum--能上阵
limitStr.text = ActTimeCtrlManager.UnLockCondition(i)
-- 显示解锁条件
mask:SetActive(not canOn)
if #this.choosedList==0 then
info:SetActive(false)
dragViewListGo[i].gameObject:SetActive(false)
end
-- 显示上阵的英雄
local heroData
for j = 1, #this.choosedList do
if i== this.choosedList[j].position then
heroData = HeroManager.GetSingleHeroData(this.choosedList[j].heroId)
if not heroData then
LogError("heroData is not exist! error Did:" .. this.choosedList[j].heroId)
return
end
info:SetActive(true)
dragViewListGo[i].gameObject:SetActive(true)
break
else
info:SetActive(false)
dragViewListGo[i].gameObject:SetActive(false)
end
end
end
end
-- 设置编队上阵数据
function this.InitArmData()
--为每个英雄添加拖动组件
for n = 1, #this.choosedList do
local allHeroTeamAddProVal = HeroManager.GetAllHeroTeamAddProVal(this.choosedList,this.choosedList[n].heroId)
--已上阵操作
local pos=this.choosedList[n].position
-- LogBlue("源数据位置信息"..pos.." "..HeroManager.GetSingleHeroData(this.choosedList[n].heroId).id.." "..this.choosedList[n].position)
local heroId = this.choosedList[n].heroId
local heroData = HeroManager.GetSingleHeroData(heroId)
--设置单个上阵英雄信息
this.SetCardSingleData(heroListGo[pos],heroId,tonumber(pos), heroData)
--战力计算
this.CalculateAllHeroPower(heroData,allHeroTeamAddProVal)
--英雄长按
local heroClick=Util.GetGameObject(bgListGo[pos],"DragView"..pos)
Util.AddLongPressClick(heroClick, function()
UIManager.OpenPanel(UIName.RoleInfoPopup, heroData,nil,this.choosedList,#this.choosedList)
end, 0.5)
end
this.formationPower=this.formationPower+PracticeManager.GetPracticeAddPower()
if this.curFormationIndex == FormationTypeDef.EXPEDITION then-- 远征加圣物战力
this.formationPower = math.floor(this.formationPower * (1 + ExpeditionManager.CalculateallHolyWarPower()/10000))
-- Log("所有圣物战力万分比 "..ExpeditionManager.CalculateallHolyWarPower())
elseif this.curFormationIndex == FormationTypeDef.FORMATION_ENDLESS_MAP then-- 远征加圣物战力
local id,lv = EndLessMapManager.GetShiQiValue()
if lv > 0 then
local config = ConfigManager.GetConfigData(ConfigName.endlessMorale,id)
this.formationPower = math.floor(this.formationPower * (1 + config.FightUp/100))
end
end
end
--设置单个上阵英雄信息
function this.SetCardSingleData(o, heroId, _pos, _heroData)
local bg=Util.GetGameObject(o,"Bg1"):GetComponent("Image")
local icon=Util.GetGameObject(o,"Bg1/icon"):GetComponent("Image")
local lv=Util.GetGameObject(o,"lv/Text"):GetComponent("Text")
local hp = Util.GetGameObject(o,"hpProgress/hp"):GetComponent("Image")
local hpPass = Util.GetGameObject(o,"hpProgress/hpPass"):GetComponent("Image")
local rage = Util.GetGameObject(o,"rageProgress/rage"):GetComponent("Image")
local fg=Util.GetGameObject(o,"Bg2"):GetComponent("Image")
-- local live=Util.GetGameObject(o,"Mask/Live")
local pro=Util.GetGameObject(o,"Pro/Image"):GetComponent("Image")
local starGrid=Util.GetGameObject(o,"StarGrid")
local nameParent = Util.GetGameObject(o,"Name")
local name=Util.GetGameObject(nameParent,"Text"):GetComponent("Text")
-- local pos=Util.GetGameObject(o,"Pos"):GetComponent("Image")
local yuanImage=Util.GetGameObject(o,"yuanImage")
--local flyImg=Util.GetGameObject(o,"flyImg"):GetComponent("Image")
local heroData = HeroManager.GetSingleHeroData(heroId)
local kaPaiEffect=Util.GetGameObject(o,"UI_Effect_jinkuang_KaPai")
local live = Util.GetGameObject(o, "Mask/icon"):GetComponent("RawImage")
local liveName = heroData.painting
local roleConfig = {}
local toward=0
local star,starType = heroData.GetStar(1)
local level=heroData.lv
if panelType == FORMATION_TYPE.WORLDARENA then
star=endLess[heroData.heroConfig.Id].Star
level=endLess[heroData.heroConfig.Id].Level
end
if panelType == FORMATION_TYPE.EXPEDITION or panelType == FORMATION_TYPE.CARBON then
-- bg.sprite = this.spLoader:LoadSprite(GetFormationHeroCardStarBg[star])
Util.GetGameObject(o,"hpProgress").gameObject:SetActive(true)
Util.GetGameObject(o,"rageProgress").gameObject:SetActive(false)
kaPaiEffect.transform.localScale=Vector3.New(1,1.1,1)
kaPaiEffect.transform.localPosition=Vector3.New(-8,-16,0)
else
-- bg.sprite = this.spLoader:LoadSprite(GetHeroCardStarBg[star])
Util.GetGameObject(o,"hpProgress").gameObject:SetActive(false)
Util.GetGameObject(o,"rageProgress").gameObject:SetActive(false)
kaPaiEffect.transform.localScale=Vector3.New(1,1,1)
kaPaiEffect.transform.localPosition=Vector3.New(-8,0,0)
end
if heroData.skinId == 0 then
roleConfig = ConfigManager.GetConfigData(ConfigName.RoleConfig, heroData.heroConfig.Id)
toward=heroData.heroConfig.Toward
else
roleConfig = ConfigManager.GetConfigData(ConfigName.RoleConfig, heroData.skinId)
toward=roleConfig.Toward
end
local scale = roleConfig.play_liveScale
local livePos = Vector3.New(roleConfig.offset[1], roleConfig.offset[2], 0)
--local livePos = Vector3.New(0,-600, 0)
live.texture = CardRendererManager.GetSpineTexture(_pos, liveName, Vector3.one * scale, livePos, true)
SetHEeroLiveToward(live,toward,heroData.heroConfig.Position)
live.transform.localScale = Vector3.one
live.transform.localPosition = Vector3.zero
local zs = Util.GetGameObject(o, "zs")
local zsName = GetHeroCardStarZs[star]
if zsName == "" then
zs:SetActive(false)
else
zs:SetActive(false)
zs:GetComponent("Image").sprite = this.spLoader:LoadSprite(zsName)
end
yuanImage:SetActive(heroData.createtype == 1)
fg.sprite = this.spLoader:LoadSprite(GetHeroCardStarFg[star])
pro.sprite=this.spLoader:LoadSprite(GetProStrImageByProNum(heroData.property))
icon.sprite=this.spLoader:LoadSprite(GetResourcePath(heroData.heroConfig.ShowLive))
if starType == 3 then
if heroData.star>11 then
fg.sprite = this.spLoader:LoadSprite("t_zhandoukuang_lanjin02")
else
fg.sprite = this.spLoader:LoadSprite("t_zhandoukuang_zhuangshi006")
end
end
-- if HarmonyManager.IsChangeColor(heroData.dynamicId) then
-- lv.text=""..level..""
-- elseif HarmonyManager:IsEnvoy(heroData.dynamicId) and HarmonyManager:HongMengTowerUpLimit() >= HarmonyManager.TowerStartLimit then
-- lv.text=""..level..""
-- else
-- lv.text=level
-- end
lv.text=level
SetCardStars(starGrid,star,starType)
if star > 9 then
kaPaiEffect:SetActive(false)
else
kaPaiEffect:SetActive(false)
end
SetHeroFormationFlyEffect(o,this.spLoader,kaPaiEffect,star,orginLayer)
name.text=GetLanguageStrById(heroData.heroConfig.ReadingName)
SetTextVerTial(name.gameObject,Vector3.New(29.24,-7.45,0),nil,nil,8)
local curHeroHpVal = FormationManager.GetFormationHeroHp(this.curFormationIndex,_heroData.dynamicId)
hp.fillAmount = curHeroHpVal or 1
hpPass.fillAmount = curHeroHpVal or 1
rage.fillAmount = 0.5
end
--战力计算
function this.CalculateAllHeroPower(curHeroData,allHeroTeamAddProVal)
-- HeroPowerManager.GetHeroPower(dId, formationId)
-- local allEquipAddProVal = HeroManager.CalculateHeroAllProValList(1, curHeroData.dynamicId, false,nil,nil,true,allHeroTeamAddProVal, nil, FormationTypeDef.FORMATION_TEMPORARY)
-- this.formationPowerOld = this.formationPowerOld + allEquipAddProVal[HeroProType.WarPower]
-- LogPink("OLD TEAM POWER:"..this.formationPowerOld)
local allEquipAddProVal = HeroPowerManager.GetHeroPower(curHeroData.dynamicId, FormationTypeDef.FORMATION_TEMPORARY)--HeroManager.CalculateHeroAllProValList(1, curHeroData.dynamicId, false,nil,nil,true,allHeroTeamAddProVal)
this.formationPower = this.formationPower + allEquipAddProVal--[HeroProType.WarPower]
LogPink("NEW TEAM POWER:"..this.formationPower)
end
--点击筛选
function this.OnClickTabBtn(_proId, isTop,isAni)
this.selectBtn:SetActive(proId ==_proId)
this.selectBtn.transform:SetParent(tabs[_proId].transform)
this.selectBtn.transform:DOAnchorPos(Vector3.zero,0)
this.selectBtn.transform:DOScale(Vector3.one,0)
this.selectTxt.text=PropertyType[_proId]
-- 定制显示
local heros = {}
if this.opView.GetHeroList then
heros = this.opView.GetHeroList(_proId)
else
if _proId == ProIdConst.All then
heros = HeroManager.GetAllHeroDatas()
else
heros = HeroManager.GetHeroDataByProperty(_proId)
end
end
this.empty:SetActive(#heros<=0)
this.SetRoleList(heros, isTop,isAni)
if this.opView.SetCampIconByCurType then
this.opView.SetCampIconByCurType(tabs,this.selectBtn,this.selectTxt)
else
for i = 0 , #tabs do
Util.SetGray(tabs[i],false)
tabs[i]:GetComponent("Button").enabled = true
end
this.selectBtn:SetActive(proId ==_proId)
this.selectBtn.transform:SetParent(tabs[_proId].transform)
this.selectBtn.transform:DOAnchorPos(Vector3.zero,0)
this.selectBtn.transform:DOScale(Vector3.one,0)
end
end
--设置英雄列表数据
function this.SetRoleList(_roleDatas, isTop,isAni)
if panelType == FORMATION_TYPE.ExploreFunc then
_roleDatas = this.opView.SortHeroDatas(_roleDatas)
elseif panelType == FORMATION_TYPE.WORLDARENA then
_roleDatas=this.opView.SortHeroDatas(_roleDatas)
elseif this.opView.SortHeroDatas then
this.opView.SortHeroDatas(_roleDatas)
else
this.SortHeroDatas(_roleDatas)
end
--刷新玉虚论道缓存的阵容数据
if this.curFormationIndex==2001 or this.curFormationIndex==2002 or this.curFormationIndex==2003 then
this.opView.RemoveTeamByIndex(this.curFormationIndex)
for i,v in pairs(this.choosedList) do
--LogError("刷新添加=== id=="..v.heroId.." pos=="..v.position)
this.opView.AddHeroToTeam(v.heroId,v.position,this.curFormationIndex)
end
end
if panelType == FORMATION_TYPE.GodsWayTower_two or panelType == FORMATION_TYPE.GodsWayTower_three then
LogError("this.curFormationIndex="..this.curFormationIndex)
this.opView.RemoveTeamByIndex(this.curFormationIndex)
for i,v in pairs(this.choosedList) do
LogError("多队战刷新添加=== id=="..v.heroId.." pos=="..v.position)
this.opView.AddHeroToTeam(v.heroId,v.position,this.curFormationIndex)
end
end
-- local curFormation = FormationManager.formationList[this.curFormationIndex]
this.scrollView:SetData(_roleDatas, function(index, go)
-- 基础显示
this.SingleHeroDataShow(go, _roleDatas[index])
-- 神将列表单个神将内容显示定制
if this.opView.HeroItemAdapter then
this.opView.HeroItemAdapter(go, _roleDatas[index])
else
Util.GetGameObject(go, "specialType"):SetActive(false)
Util.GetGameObject(go, "posCha"):SetActive(false)
end
end, not isTop,not isAni)
end
--排序英雄数据
function this.SortHeroDatas(_heroDatas)
local choosed = {}
local dieHeros = {}
local notExisted = {}
local curFormation = FormationManager.GetFormationByID(this.curFormationIndex)
for i = 1, #_heroDatas do
local heroHp = FormationManager.GetFormationHeroHp(this.curFormationIndex, _heroDatas[i].dynamicId)
if heroHp then
if heroHp <= 0 then
dieHeros[_heroDatas[i].dynamicId] = _heroDatas[i].dynamicId
end
end
end
for i = 1, #_heroDatas do
if _heroDatas[i].exist and _heroDatas[i].exist == 0 then
notExisted[_heroDatas[i].dynamicId] = _heroDatas[i].dynamicId
end
end
for j = 1, #curFormation.teamHeroInfos do
local teamInfo = curFormation.teamHeroInfos[j]
if teamInfo then
choosed[teamInfo.heroId] = j
end
end
table.sort(_heroDatas, function(a, b)
if (choosed[a.dynamicId] and choosed[b.dynamicId]) or
(not choosed[a.dynamicId] and not choosed[b.dynamicId])
then
if (notExisted[a.dynamicId] and notExisted[b.dynamicId]) or
(not notExisted[a.dynamicId] and not notExisted[b.dynamicId])
then
if (dieHeros[a.dynamicId] and dieHeros[b.dynamicId]) or
(not dieHeros[a.dynamicId] and not dieHeros[b.dynamicId])
then
return this.NaturalSort(sortType == SortTypeConst.Natural,a,b)
else
return not dieHeros[a.dynamicId] and dieHeros[b.dynamicId]
end
else
return not notExisted[a.dynamicId] and notExisted[b.dynamicId]
end
else
return choosed[a.dynamicId] and not choosed[b.dynamicId]
end
end)
end
function this.NaturalSort(isNature,a,b)
if isNature then
if a.heroConfig.Natural == b.heroConfig.Natural then
if a.heroConfig.Quality == b.heroConfig.Quality then
local aGodLv = GodSoulManager.GetGodSoulLv(a.dynamicId)
local bGodLv = GodSoulManager.GetGodSoulLv(b.dynamicId)
if aGodLv == bGodLv then
if a.star == b.star then
if a.lv == b.lv then
if a.warPower == b.warPower then
if a.id == b.id then
if a.property==b.property then
return a.property b.sortId
end
else
return a.id > b.id
end
else
return a.warPower > b.warPower
end
else
return a.lv > b.lv
end
else
return a.star > b.star
end
else
return aGodLv > bGodLv
end
else
return a.heroConfig.Quality > b.heroConfig.Quality
end
else
return a.heroConfig.Natural > b.heroConfig.Natural
end
else
if a.lv == b.lv then
if a.heroConfig.Quality == b.heroConfig.Quality then
local aGodLv = GodSoulManager.GetGodSoulLv(a.dynamicId)
local bGodLv = GodSoulManager.GetGodSoulLv(b.dynamicId)
if aGodLv == bGodLv then
if a.star == b.star then
if a.heroConfig.Natural == b.heroConfig.Natural then
if a.warPower == b.warPower then
if a.id == b.id then
return a.sortId > b.sortId
else
return a.id > b.id
end
else
return a.warPower > b.warPower
end
else
return a.heroConfig.Natural > b.heroConfig.Natural
end
else
return a.star > b.star
end
else
return aGodLv > bGodLv
end
else
return a.heroConfig.Quality > b.heroConfig.Quality
end
else
return a.lv > b.lv
end
end
end
--设置每条英雄数据
function this.SingleHeroDataShow(_go, _heroData)
local go=_go
local heroData=_heroData
local frame=Util.GetGameObject(go,"frame"):GetComponent("Image")
local icon=Util.GetGameObject(go, "icon"):GetComponent("Image")
local lv= Util.GetGameObject(go, "lv/Text"):GetComponent("Text")
local pro= Util.GetGameObject(go, "proIcon"):GetComponent("Image")
local pos= Util.GetGameObject(go, "posIcon"):GetComponent("Image")
local teamList={}
for i = 1, 3 do
table.insert(teamList,Util.GetGameObject(go, "yxteamName/Image"..i))
end
local yxInfo=Util.GetGameObject(go, "yxteamName")
--local yxTeamName=Util.GetGameObject(go, "yxteamName/Text"):GetComponent("Text")
yxInfo:SetActive(false)
Util.GetGameObject(go, "posIcon"):SetActive(this.curFormationIndex == FormationTypeDef.FIGHT_LEVEL or this.curFormationIndex == FormationTypeDef.FIGHT_ASSISTANTLEVEL or
this.curFormationIndex == FormationTypeDef.FORMATION_QIJIESHILIAN)
local starGrid = Util.GetGameObject(go, "star")
local yuanImage = Util.GetGameObject(go, "yuanImage")
local choosedObj = Util.GetGameObject(go, "choosed")
local hpExp = Util.GetGameObject(go, "hpExp")
local redPot = Util.GetGameObject(go, "redpoint")
local changeProBtn=Util.GetGameObject(go,"proMaskObj")
if heroData.isNew and heroData.isNew == 1 then
redPot.gameObject:SetActive(true)
else
redPot.gameObject:SetActive(false)
end
-- if _heroData.property then
-- changeProBtn:SetActive(_heroData.property>=5)
-- pro.sprite= this.spLoader:LoadSprite(GetProStrImageByProNum(heroData.property))
-- else
changeProBtn:SetActive(false)
pro.sprite= this.spLoader:LoadSprite(GetProStrImageByProNum(heroData.heroConfig.PropertyName))
--end
icon.sprite=this.spLoader:LoadSprite(heroData.icon)
local level=heroData.lv
pos.sprite = this.spLoader:LoadSprite(heroData.professionIcon)
local star,starType = heroData.GetStar(1)
local starSize = Vector2.New(30,30)
local starScale = -8
if starType == 3 then
starSize = Vector2.New(1,-15.65)
starScale = -13
elseif starType == 2 then
starSize = Vector2.New(60,57)
end
if panelType == FORMATION_TYPE.WORLDARENA then
if this.opView.GetHeroTeam then
local index = this.opView.GetHeroTeam(heroData.dynamicId)
if index and index ~= this.curFormationIndex then
yxInfo:SetActive(true)
for i = 1, 3 do
teamList[i]:SetActive(false)
end
teamList[index-2000]:SetActive(true)
end
end
LogError("heroData.heroConfig.Id=="..heroData.heroConfig.Id)
star=endLess[heroData.heroConfig.Id].Star
LogError("star=="..star)
if star>11 then
starSize = Vector3.New(1,-15.6)
else
starSize = Vector2.New(60,57)
end
level=endLess[heroData.heroConfig.Id].Level
end
if panelType == FORMATION_TYPE.GodsWayTower_two or panelType == FORMATION_TYPE.GodsWayTower_three then
if this.opView.GetHeroTeam then
local index = this.opView.GetHeroTeam(heroData.dynamicId)
if index and index ~= this.curFormationIndex then
yxInfo:SetActive(true)
for i = 1, 3 do
teamList[i]:SetActive(false)
end
local ids=GodsWayTeam[panelType-30]
for i = 1, #ids do
if ids[i]==index then
teamList[i]:SetActive(true)
end
end
end
end
end
if star>11 then
starSize = Vector3.New(1,-15.6)
starScale = -13
end
frame.sprite=this.spLoader:LoadSprite(GetQuantityImageByquality(heroData.heroConfig.Quality,star))
if HarmonyManager.IsChangeColor(heroData.dynamicId) then
-- body
lv.text=""..level..""
elseif HarmonyManager:IsEnvoy(heroData.dynamicId) and HarmonyManager:HongMengTowerUpLimit() >= HarmonyManager.TowerStartLimit then
-- bod
lv.text=""..level..""
else
lv.text=level
end
SetHeroStars(this.spLoader, starGrid, star)
local effect=SetHeroFlyEffect(go,this.spLoader,star,this.sortingOrder,1,4)
if effect then
local meshs2=effect:GetComponentsInChildren(typeof(UnityEngine.SkinnedMeshRenderer))
for key, value in pairs(meshs2:ToTable()) do
if value.material.shader.name=="YXZ/Effect/TransparentRim" then
value.material.shader=poolManager:LoadAsset("YXZ_Effect_TransparentRim_1",poolManager.AssetType.Other)
end
end
local particles=effect:GetComponentsInChildren(typeof(UnityEngine.ParticleSystem))
for key, value in pairs(particles:ToTable()) do
local mat=value:GetComponent(typeof(UnityEngine.Renderer))
if mat.material.shader.name=="YXZ/Effect/Mix Masking(Without Moving)_alphablend" then
mat.material.shader=poolManager:LoadAsset("YXZ_MixMaskingWithoutMoving_alphablend_1",poolManager.AssetType.Other)
end
end
end
local meshs1=starGrid:GetComponentsInChildren(typeof(UnityEngine.ParticleSystem))
for key, value in pairs(meshs1:ToTable()) do
local mat=value:GetComponent(typeof(UnityEngine.Renderer))
if mat.material.shader.name=="UI Particles/Additive" then
mat.material.shader=poolManager:LoadAsset("UI-Particle-Add_1",poolManager.AssetType.Other)
end
end
Util.SetParticleSortLayer(go, this.sortingOrder + 2)
--血量显示
local curHeroHpVal = FormationManager.GetFormationHeroHp(this.curFormationIndex,_heroData.dynamicId)
yuanImage:SetActive(heroData.createtype == 1)
if not curHeroHpVal then
Util.SetGray(go,false)
hpExp:SetActive(false)
else
hpExp:SetActive(true)
hpExp:GetComponent("Slider").value = curHeroHpVal
if curHeroHpVal <= 0 then
Util.SetGray(go,true)
else
if heroData.exist and heroData.exist == 0 then
Util.SetGray(go,true)
else
Util.SetGray(go,false)
end
end
end
choosedObj:SetActive(false)
for i,v in pairs(this.choosedList) do
if(heroData.dynamicId==v.heroId) then
choosedObj:SetActive(true)
end
end
local exploreTeamList = {}
local exploreTeam = Util.GetGameObject(go, "exploreTeamName")
exploreTeam.gameObject:SetActive(false)
for i = 1,exploreTeam.transform.childCount do
table.insert(exploreTeamList,exploreTeam.transform:GetChild(i-1))
end
for i = 1, #exploreTeamList do
exploreTeamList[i].gameObject:SetActive(false)
end
if panelType == FORMATION_TYPE.ExploreFunc then
exploreTeam.gameObject:SetActive(true)
if this.opView.GetHeroTeam then
local index = this.opView.GetHeroTeam(heroData.dynamicId)
if index and index ~= 0 and index ~= 100 and this.opView.CheckIsExploring(index) then
exploreTeamList[#exploreTeamList].gameObject:SetActive(true)
elseif index and index ~= 0 and index ~= 100 then
exploreTeamList[index].gameObject:SetActive(true)
end
end
end
-- 点击事件
Util.AddOnceClick(go, function()
-- if heroData.property and heroData.property>=5 then
-- UIManager.OpenPanel(UIName.GeneralPopup,GENERAL_POPUP_TYPE.ChangeHeroPro,heroData,function()
-- LogError("刷新界面数据")
-- this.RefreshShow(false,false)
-- end)
-- return
-- end
-- 判断是上阵还是下阵
local formationAction = FORMATION_ACTION.UP
for k, v in ipairs(this.choosedList) do
if v.heroId == heroData.dynamicId then
LogError("现在是下阵")
formationAction = FORMATION_ACTION.DOWN
break
end
end
-- 检测失败方法
local CheckFail = function(tip)
PopupTipPanel.ShowTip(tip)
end
-- 检测成功方法
local CheckSuccess = function(params)
if params.action == FORMATION_ACTION.UP then
if curHeroHpVal and curHeroHpVal <= 0 then
PopupTipPanel.ShowTip(Language[10688])
return
end
if heroData.exist and heroData.exist == 0 then
PopupTipPanel.ShowTip("激活英雄图鉴后才可使用!")
return
end
-- 当前可选的最大上阵人数
local maxNum = ActTimeCtrlManager.MaxArmyNum()
if LengthOfTable(this.choosedList) >= maxNum then
PopupTipPanel.ShowTip(Language[10689])
return
end
--判断是否上阵相同猎妖师
for k, v in pairs(this.choosedList) do
if HeroManager.GetSingleHeroData(v.heroId).id == heroData.id then
PopupTipPanel.ShowTip(Language[10690])
return
end
end
--自动计算位置 并赋值pos
local curPos=this.GetPos()
if curPos == 0 then
PopupTipPanel.ShowTip(Language[10689])
return
end
-- 上阵生效
table.insert(this.choosedList, {heroId = heroData.dynamicId, position=curPos})
-- 刷新显示
this.RefreshShow(false, false)
return curPos
elseif params.action == FORMATION_ACTION.DOWN then
for k, v in ipairs(this.choosedList) do
if v.heroId == heroData.dynamicId then
table.remove(this.choosedList,k)
-- 刷新显示
this.RefreshShow(false, false)
return
end
end
end
end
--
local curPos=this.GetPos()
if formationAction == FORMATION_ACTION.UP then
if curHeroHpVal and curHeroHpVal <= 0 then
PopupTipPanel.ShowTip(Language[10688])
return
end
if heroData.exist and heroData.exist == 0 then
PopupTipPanel.ShowTip("激活英雄图鉴后才可使用!")
return
end
-- 当前可选的最大上阵人数
local maxNum = ActTimeCtrlManager.MaxArmyNum()
if LengthOfTable(this.choosedList) >= maxNum then
PopupTipPanel.ShowTip(Language[10689])
return
end
--判断是否上阵相同猎妖师
for k, v in pairs(this.choosedList) do
if HeroManager.GetSingleHeroData(v.heroId).id == heroData.id then
PopupTipPanel.ShowTip(Language[10690])
return
end
end
--自动计算位置 并赋值pos
if curPos == 0 then
PopupTipPanel.ShowTip(Language[10689])
return
end
end
-- 判断是否有编队上阵条件
local params = {
action = formationAction,
heroData = heroData,
choosedList = this.choosedList,
position = curPos
}
if this.opView.HeroUpDownCheck then
this.opView.HeroUpDownCheck(params, CheckFail, CheckSuccess)
else
CheckSuccess(params)
end
end)
Util.AddLongPressClick(go, function()
--
local isChoosed = false
for i = 1, #this.choosedList do
if this.choosedList[i] and this.choosedList[i].heroId then
if this.choosedList[i].heroId == heroData.dynamicId then
isChoosed = true
end
end
end
if panelType == FORMATION_TYPE.WORLDARENA then
LogError("curindex==="..this.opView.curIndex)
NetManager.ViewHeroInfoRequest(PlayerManager.uid,heroData.dynamicId,PlayerManager.serverInfo.name,2000+this.opView.curIndex,function(msg)
local showData= GoodFriendManager.GetHeroDatas(msg.hero,msg.force,msg.SpecialEffects,msg.guildSkill)
GoodFriendManager.InitEquipData(msg.equip,showData)--HeroManager.GetSingleHeroData(heroData.dynamicId)
UIManager.OpenPanel(UIName.RoleInfoPopup, showData,true)
end)
return
end
if isChoosed then
UIManager.OpenPanel(UIName.RoleInfoPopup, heroData,nil,this.choosedList,#this.choosedList)
else
UIManager.OpenPanel(UIName.RoleInfoPopup, heroData)
end
end, 0.5)
end
--计算上阵空余位置 返回最小位置
function this.GetPos()
local data={}
for i = 1, 6 do
if heroListGo[i].gameObject.activeSelf then
table.insert(data,i,i)
end
end
for j = 1, 6 do
if data[j]==nil then
return j
end
if LengthOfTable(data) ==6 then
return 0
end
end
end
--计算上阵空余位置 返回所有位置列表
function this.GetPosList()
local data={}
-- for i = 1, 6 do
-- if heroListGo[i].gameObject.activeSelf then
-- table.insert(data,i,i)
-- end
-- end
local list={}
for j = 1, 6 do
if not list[j] then
table.insert(list,j)
end
end
return list
end
--拖拽
function this.OnPointerDown(Pointgo,data)--按下
local _j=tonumber(string.sub(Pointgo.transform.name,-1))
local heroObj=Util.GetTransform(Pointgo.transform.parent,"Hero".._j)
heroObj:DOScale(Vector3.one * 1.2, 0.15)
heroObj.transform:SetParent(this.root.transform)
heroObj:GetComponent("Image").raycastTarget = false
end
function this.OnPointerUp(Pointgo,data)--抬起
local _j=tonumber(string.sub(Pointgo.transform.name,-1))
Util.Peer(Pointgo.transform,"Pos").transform:SetAsFirstSibling()
local heroObj=Util.GetTransform(this.gameObject,"Hero".._j)
heroObj:DOScale(Vector3.one * 1, 0.15)
heroObj.transform:SetParent(bgListGo[_j].transform)
heroObj.transform:SetSiblingIndex(1)--SetAsFirstSibling()
heroObj:GetComponent("Image").raycastTarget = false
end
function this.OnEndDrag(Pointgo,data)--结束拖动
local _j=tonumber(string.sub(Pointgo.transform.name,-1))
local heroObj=Util.GetGameObject(this.gameObject,"Hero".._j)
if data.pointerEnter==nil then--防止拖到屏幕外
heroObj.transform:DOAnchorPos(Vector3.one,0)
heroObj.transform:SetParent(bgListGo[_j].transform)
heroObj.transform:SetSiblingIndex(1)
return
end
-- Log("被拖动名。。。"..Pointgo.transform.name.." ".." 进入的UI名。。。"..data.pointerEnter.gameObject.name.."")
local _i=tonumber(string.sub(data.pointerEnter.gameObject.name,-1))
local nameIn=data.pointerEnter.gameObject.name --进入的UI名
local _num=string.sub(nameIn,5,-1)
local itemName="item".._num
local heroObj=Util.GetGameObject(this.gameObject,"Hero".._j)
heroObj:GetComponent("Image").raycastTarget = true
heroObj.transform:DOScale(Vector3.one * 1, 0.15)
heroObj.transform:DOAnchorPos(Vector3.one,0)
heroObj.transform:SetParent(bgListGo[_j].transform)
heroObj.transform:SetSiblingIndex(1)
if _i==nil then
_i=tonumber(string.sub(Pointgo.transform.name,-1))
end
if nameIn=="DragView".._i then --有人
-- Log("有人")
local curData
local tarData
for i, v in ipairs(this.choosedList) do
if _j==v.position then
curData=v.heroId
end
if _i==v.position then
tarData=v.heroId
end
end
for i, v in ipairs(this.choosedList) do
if _j==v.position then
this.choosedList[i].heroId=tarData
end
if _i==v.position then
this.choosedList[i].heroId=curData
end
end
elseif nameIn=="Bg".._i then --没人
-- Log("没人")
local did
for i, v in ipairs(this.choosedList) do
if _j==v.position then
did=v.heroId
table.remove(this.choosedList,i)
end
end
table.insert(this.choosedList, {heroId = did, position=_i})
elseif nameIn=="ScrollCycleView" or nameIn==itemName or nameIn == "MaskClick" or nameIn == "btnLab"
or nameIn == "Btn0" or nameIn == "Btn1" or nameIn == "Btn2" or nameIn == "Btn3" or nameIn == "Btn4" or nameIn == "ExampleBtn" then
if not this.opView.NoUpOrDownFormation then
for i, v in ipairs(this.choosedList) do
if _j==v.position then
table.remove(this.choosedList,i)
dragViewListGo[_j].gameObject:SetActive(false)
break
end
end
else
PopupTipPanel.ShowTip(Language[10691])
end
end
this.line.gameObject:SetActive(false)
this.SetCardsData()
this.OnClickTabBtn(proId)
end
function this.OnDrag(Pointgo,data)--拖动中
if data.pointerEnter==nil then--拖到屏幕外
this.line.transform:SetParent(this.roleGrid.transform)
this.line.gameObject:SetActive(false)
return
end
local _i=tonumber(string.sub(data.pointerEnter.gameObject.name,-1))
if _i==nil then _i=0 end
local nameIn=data.pointerEnter.gameObject.name --进入的UI名
this.line:SetActive(nameIn=="DragView".._i or nameIn=="Bg".._i)
if nameIn=="DragView".._i then
this.line.transform:SetParent(bgListGo[_i].transform)
elseif nameIn=="Bg".._i then
this.line.transform:SetParent(bgListGo[_i].transform)
else
this.line.transform:SetParent(this.roleGrid.transform)
this.line.gameObject:SetActive(false)
end
this.line.transform:SetAsFirstSibling()
if panelType == FORMATION_TYPE.EXPEDITION or panelType == FORMATION_TYPE.CARBON then
this.line.transform:DOAnchorPos(Vector3.New(0,15,0),0)
else
this.line.transform:DOAnchorPos(Vector3.New(0,30,0),0)
end
end
--战力刷新
function this.RefreshPower()
local newPowerNum = this.formationPower
if oldPowerNum ~= newPowerNum and oldPowerNum ~= 0 then
UIManager.OpenPanel(UIName.WarPowerChangeNotifyPanelV2,{oldValue = oldPowerNum,newValue = newPowerNum})
end
oldPowerNum = this.formationPower
-- this.power.text =this.formationPower
-- this.RefreshFormation()
end
-- 设置扫荡显示的层级
function this.SetDrawLevel()
local go = this.ElementalResonanceView.gameObject
local canvas = go:GetComponent("Canvas")
canvas.overrideSorting = false
end
--部分界面有特殊条件显示,集体管理
function this.CheckCondition()
if this.curFormationIndex == FormationTypeDef.FORMATION_QIJIESHILIAN then
this.opView.RefreshConditon(this.choosedList)
elseif this.curFormationIndex == FormationTypeDef.FIGHT_LEVEL or this.curFormationIndex == FormationTypeDef.FIGHT_ASSISTANTLEVEL then
--山河社稷图不随阵容变化儿变化,不用写
end
end
--设置一键上阵
function this.SetOneKeyGo()
--获取需要上阵的位置
local posArr=this.GetPosList()
if #posArr==0 then
PopupTipPanel.ShowTip(Language[10689])
return
end
-- 获取数据
local heros = {}
if this.opView.GetOneKeyUpHeroList then
heros = this.opView.GetOneKeyUpHeroList()
else
heros = HeroManager.GetAllHeroDatas()
end
if not heros or #heros <= 0 then
PopupTipPanel.ShowTip("未找到符合条件得英雄")
return
end
--按战力从大到小排序
table.sort(heros,function(a,b)
if a.warPower == b.warPower then
return a.id>b.id
else
return a.warPower > b.warPower
end
end)
--修改 upHeroSidTable 静态id 存储 有则跳过
local upHeroSidTable = {}
this.choosedList = {}
if this.opView.RemoveTeamByIndex then
this.opView.RemoveTeamByIndex(this.curFormationIndex)
end
for k, v in ipairs(heros) do
local curSingleherodata = HeroManager.GetSingleHeroData(v.dynamicId)
--if curSingleherodata.property~=5 then
if not upHeroSidTable[curSingleherodata.id] then
if #this.choosedList < 6 then
for n = 1, #posArr do
upHeroSidTable[curSingleherodata.id] = curSingleherodata.id
table.insert(this.choosedList, {heroId = v.dynamicId, position=posArr[n]})
if this.opView.AddHeroToTeam then
this.opView.AddHeroToTeam(v.dynamicId, posArr[n], this.curFormationIndex)
end
table.remove(posArr,n)
break
end
end
end
--end
end
this.SetCardsData()
this.OnClickTabBtn(proId,false,false)
end
return FormationPanelV2