miduo_client/Assets/ManagedResources/~Lua/Modules/Formation/FormationPanelV2.lua

1392 lines
57 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.

-- 编队动作
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="<color=#0f0>"..level.."</color>"
-- elseif HarmonyManager:IsEnvoy(heroData.dynamicId) and HarmonyManager:HongMengTowerUpLimit() >= HarmonyManager.TowerStartLimit then
-- lv.text="<color=#ffbe22>"..level.."</color>"
-- 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.property
else
return a.sortId > 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="<color=#0f0>"..level.."</color>"
elseif HarmonyManager:IsEnvoy(heroData.dynamicId) and HarmonyManager:HongMengTowerUpLimit() >= HarmonyManager.TowerStartLimit then
-- bod
lv.text="<color=#ffbe22>"..level.."</color>"
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("<color=blue>被拖动名。。。</color><color=red>"..Pointgo.transform.name.."</color> ".." <color=blue>进入的UI名。。。</color><color=red>"..data.pointerEnter.gameObject.name.."</color>")
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