c1_lua/lua/app/ui/battle/battle_ui_pvp.lua
2023-07-03 19:57:39 +08:00

310 lines
14 KiB
Lua

local BattleBaseUI = require "app/ui/battle/battle_base_ui"
local BattleUIPVP = class("BattleUIPVP", BattleBaseUI)
local DEFAULT_X = 10000
---------------------------------必须重写的方法----------------------------------
function BattleUIPVP:initBaseInfo()
local uiMap = self.root:genAllChildren()
self.uiMap = uiMap
self.gridNode = uiMap["battle_ui_pvp.board_root_node.board_node_atk.grid_node"]
self.boardNode = uiMap["battle_ui_pvp.board_root_node"]
self.boardCenterNode = uiMap["battle_ui_pvp.board_root_node.board_center_node"]
self.boardNode:setAnchoredPositionX(DEFAULT_X)
self.boardMask2D = self.gridNode:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_RECT_MASK_2D)
self.boardMask = uiMap["battle_ui_pvp.board_root_node.board_mask"]
self.boardMask:setVisible(false)
self.boardCacheNode = uiMap["battle_ui_pvp.board_root_node.board_cache_node"]
self.boardCacheNode:setVisible(false)
self.boardCacheBox = uiMap["battle_ui_pvp.board_root_node.board_cache_node.skill_box"]
self.boardCacheBox:setAnchoredPositionX(DEFAULT_X)
self.battleRoot = uiMap["battle_ui_pvp.battle_root"]
self.maxLayerNode = uiMap["battle_ui_pvp.battle_root.battle_node.max_layer_show_node"]
self.aniNode = uiMap["battle_ui_pvp.board_root_node.ani_node"]
self.touchMask = uiMap["battle_ui_pvp.board_root_node.touch_mask"]
self.atkBoardImg = self.uiMap["battle_ui_pvp.board_root_node.board_center_node.board_node_atk.board_atk"]
self.defBoardImg = self.uiMap["battle_ui_pvp.board_root_node.board_center_node.board_node_atk.board_def"]
self.atkBoard = self.uiMap["battle_ui_pvp.board_root_node.board_center_node.board_node_atk.grid_node.board_atk"]
self.defBoard = self.uiMap["battle_ui_pvp.board_root_node.board_center_node.board_node_atk.grid_node.board_def"]
self.boardRootNodeMask = self.uiMap["battle_ui_pvp.board_root_node.mask"]
end
function BattleUIPVP:initBg()
self.bg = self.uiMap["battle_ui_pvp.battle_root.bg"]
self.bg:setLocalScale(0, 0, 0)
local width = self.bg:fastGetSizeDelta()
self.bg:setAnchoredPositionX(width/4)
end
function BattleUIPVP:initSkill()
local uiMap = self.root:genAllChildren()
local atkNode = uiMap["battle_ui_pvp.bottom_node.skill_node"]
local defNode = uiMap["battle_ui_pvp.top_node.skill_node"]
local atkCellPrefix = "battle_ui_pvp.bottom_node.skill_node.skill_node_cell_"
local defCellPrefix = "battle_ui_pvp.top_node.skill_node.skill_node_cell_"
self:_initSkill(atkNode, atkCellPrefix, defNode, defCellPrefix)
end
function BattleUIPVP:initBuff()
local atkBuffPrefix = "battle_ui_pvp.bottom_node.buff.tiny_buff_cell_"
local defBuffPrefix = "battle_ui_pvp.top_node.buff.tiny_buff_cell_"
local battleBuffTipsRoot = self.uiMap["battle_ui_pvp.battle_buff_tips"]
local battleBuffTipsMask = self.uiMap["battle_ui_pvp.battle_buff_tips.mask"]
local battleBuffTipsBg = self.uiMap["battle_ui_pvp.battle_buff_tips.bg"]
local battleBuffTipsBuff = self.uiMap["battle_ui_pvp.battle_buff_tips.bg.buff"]
self:_initBuff(atkBuffPrefix, defBuffPrefix, battleBuffTipsRoot, battleBuffTipsMask, battleBuffTipsBg, battleBuffTipsBuff)
end
function BattleUIPVP:initBattlefield()
self.battleNode = self.uiMap["battle_ui_pvp.battle_root.battle_node"]
end
function BattleUIPVP:initNumberNode()
self.battleNumberNode = self.uiMap["battle_ui_pvp.battle_root.battle_number_node"]
self.battleNumberRed = self.uiMap["battle_ui_pvp.cache_node.battle_number_red"]
self.battleNumberGreen = self.uiMap["battle_ui_pvp.cache_node.battle_number_green"]
self.battleNumberBlue = self.uiMap["battle_ui_pvp.cache_node.battle_number_blue"]
self.battleNumberWhite = self.uiMap["battle_ui_pvp.cache_node.battle_number_white"]
self.battleNumberSpecial = self.uiMap["battle_ui_pvp.cache_node.battle_number_special"]
end
function BattleUIPVP:initComboNode()
self.comboNode = self.uiMap["battle_ui_pvp.battle_root.combo"]
self.comboBg1 = self.uiMap["battle_ui_pvp.battle_root.combo.bg.bg_1"]
self.comboTx1 = self.uiMap["battle_ui_pvp.battle_root.combo.number.text.text_1"]
self.comboTx2 = self.uiMap["battle_ui_pvp.battle_root.combo.number.text.text_2"]
self.comboFx1 = self.uiMap["battle_ui_pvp.battle_root.combo.bg.vfx_ui_hit_b01"]
self.comboFx2 = self.uiMap["battle_ui_pvp.battle_root.combo.bg.vfx_ui_hit_b02"]
self.comboFx3 = self.uiMap["battle_ui_pvp.battle_root.combo.bg.vfx_ui_hit_b03"]
self:_initComboNode()
end
function BattleUIPVP:initHpNode()
self.hpProgressLeft = self.uiMap["battle_ui_pvp.bottom_node.hp_node.hp_progress"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER)
self.hpProgressRight = self.uiMap["battle_ui_pvp.top_node.hp_node.hp_progress"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER)
self.hpTextLeft = self.uiMap["battle_ui_pvp.bottom_node.hp_node.hp"]
self.hpTextRight = self.uiMap["battle_ui_pvp.top_node.hp_node.hp"]
self.hpProgressYellowLeft = self.uiMap["battle_ui_pvp.bottom_node.hp_node.hp_progress_yellow"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER)
self.hpProgressYellowRight = self.uiMap["battle_ui_pvp.top_node.hp_node.hp_progress_yellow"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER)
self:_initHpNode()
end
function BattleUIPVP:initFxNode()
self.fxNode = self.uiMap["battle_ui_pvp.battle_root.batttle_fx_node"]
end
function BattleUIPVP:hideGenerateSkillGridCells()
local generateSkillCellPrefix = "battle_ui_pvp.board_root_node.ani_node.grid_cell_"
self:_hideGenerateSkillGridCells(generateSkillCellPrefix)
end
function BattleUIPVP:initSkillLineSfx()
if not self.skillLineSfxs then
self.skillLineSfxs = {}
self.skillLineSfxs[13] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_2_1h"]
self.skillLineSfxs[11] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_2_1v"]
self.skillLineSfxs[15] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_2_1l"]
self.skillLineSfxs[17] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_2_1r"]
self.skillLineSfxs[23] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_1_2h"]
self.skillLineSfxs[21] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_1_2v"]
self.skillLineSfxs[25] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_1_2l"]
self.skillLineSfxs[27] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_1_2r"]
self.skillLineSfxs[33] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_3h"]
self.skillLineSfxs[31] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_3v"]
self.skillLineSfxs[35] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_3l"]
self.skillLineSfxs[37] = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b01_3r"]
end
if not self.root.skillLightSfxs then
self.root.skillLightSfxs = {
point = {
isLoaded = true,
obj = self.uiMap["battle_ui_pvp.board_root_node.ani_node.sfx_skill_b03"],
}
}
end
self:_initSkillLineSfx()
end
function BattleUIPVP:initGenerateSkillEffect()
local generateSkillEffecPrefix = "battle_ui_pvp.board_root_node.ani_node.sfx_piece_skill_b01_"
self:_initGenerateSkillEffect(generateSkillEffecPrefix)
end
function BattleUIPVP:initCounterAttack()
self.counterAttackNode = self.uiMap["battle_ui_pvp.battle_root.counter_attack"]
self.counterTx = self.uiMap["battle_ui_pvp.battle_root.counter_attack.text_number"]
self.counterTxbgComp = self.uiMap["battle_ui_pvp.battle_root.counter_attack.bg"]
self.counterTxTmp = self.counterTx:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO)
self.counterAttackNode:setVisible(false)
end
--------------------------------end必须重写的方法--------------------------------
function BattleUIPVP:getPrefabPath()
return "assets/prefabs/ui/battle/battle_ui_pvp.prefab"
end
function BattleUIPVP:_display()
BattleBaseUI._display(self)
self:refreshAvatar()
---- 适配
local w, h = GFunc.getUIExpandScreenSize()
local scale = math.min(1, h / 1280 * 0.84)
self.boardCenterNode:setVisible(true, scale)
end
function BattleUIPVP:_addListeners()
local uiMap = self.root:genAllChildren()
uiMap["battle_ui_pvp.top_node.close_btn"]:addClickListener(function()
ModuleManager.BattleManager:showPauseUI(self.battleController.battleType)
end)
end
function BattleUIPVP:getBoardRootNode()
local uiMap = self.root:genAllChildren()
return uiMap["battle_ui_pvp.board_root_node"]
end
function BattleUIPVP:refreshAvatar()
-- 等数据
local defInfo = self.battleController:getControllerParams().defInfo
if not defInfo then
return
end
if not self.atkPlayerHeadCell then
self.atkPlayerHeadCell = CellManager:addCellComp(self.uiMap["battle_ui_pvp.bottom_node.player_head_cell"], GConst.TYPEOF_LUA_CLASS.PLAYER_HEAD_CELL)
self.defPlayerHeadCell = CellManager:addCellComp(self.uiMap["battle_ui_pvp.top_node.player_head_cell"], GConst.TYPEOF_LUA_CLASS.PLAYER_HEAD_CELL)
end
self.atkPlayerHeadCell:refresh(nil, nil, false)
self.defPlayerHeadCell:refresh(defInfo.avatar, defInfo.avatar_frame, false)
end
function BattleUIPVP:showLeftBuffTips(buffList, autoClose)
local addY = self:showBuffTips(buffList, autoClose)
self.battleBuffTipsBg:setAnchoredPosition(-175, -1050 + addY)
end
function BattleUIPVP:showRightBuffTips(buffList, autoClose)
self:showBuffTips(buffList, autoClose)
self.battleBuffTipsBg:setAnchoredPosition(175, -200)
end
function BattleUIPVP:refreshWave(wave, iconAtlas, iconName)
local uiMap = self.root:genAllChildren()
local icon = uiMap["battle_ui_pvp.bottom_node.round_icon"]
local desc = uiMap["battle_ui_pvp.bottom_node.round_text"]
desc:setText(wave)
-- GFunc.centerImgAndTx(icon, desc, 10)
iconAtlas = iconAtlas or GConst.ATLAS_PATH.COMMON
iconName = iconName or "common_dec_15"
icon:setSprite(iconAtlas, iconName)
end
function BattleUIPVP:setGenerateSkillSfxsParent(posId, obj)
local isAtkAction = self.battleController.curActionSide == GConst.BattleConst.SIDE_ATK
if isAtkAction then
obj:setParent(self.atkBoard, true)
else
obj:setParent(self.defBoard, true)
end
end
function BattleUIPVP:dealBoardMaskOnShowAni(isOver)
local targetX = isOver and 0 or DEFAULT_X
self.boardMask:setAnchoredPositionX(targetX)
end
function BattleUIPVP:enterShowBoardAni(callback)
local isAtkAction = self.battleController.curActionSide == GConst.BattleConst.SIDE_ATK
if self.touchMask then
self.touchMask:setVisible(not isAtkAction)
end
self:dealBoardMaskOnShowAni()
for posId, entity in pairs(self.battleController.battleData:getGridEnties()) do
if entity:getCell() then
local inCurRange = self.battleController:getPosIdInCurActionBoardRowRange(posId)
local parent
if isAtkAction then
parent = inCurRange and self.atkBoard or self.defBoard
else
parent = inCurRange and self.defBoard or self.atkBoard
end
if parent then
entity:getCell():getBaseObject():setParent(parent, true)
end
end
end
self:clearEnterShowBoardSeq()
self:getBoardRootNode():setVisible(true)
self:getBoardRootNode():setAnchoredPositionX(0)
self.enterShowBoardSeq = self.root:createBindTweenSequence()
self.enterShowBoardSeq:Join(self.defBoardImg:getTransform():DOAnchorPosX(0, 0.5))
self.enterShowBoardSeq:Join(self.atkBoardImg:getTransform():DOAnchorPosX(0, 0.5))
self.enterShowBoardSeq:Join(self.boardRootNodeMask:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_IMAGE):DOFade(0.9, 0.5))
self.enterShowBoardSeq:AppendCallback(function()
self:dealBoardMaskOnShowAni(true)
for posId, entity in pairs(self.battleController.battleData:getGridEnties()) do
if entity:getCell() then
entity:getCell():getBaseObject():setParent(self.gridNode, true)
end
end
local str
if isAtkAction then
str = I18N:getGlobalText(I18N.GlobalConst.ARENA_BATTLE_DESC_1)
else
str = I18N:getGlobalText(I18N.GlobalConst.ARENA_BATTLE_DESC_2)
end
GFunc.showToast(str)
if callback then
callback()
end
end)
end
function BattleUIPVP:enterHideBoardAni(callback)
self:dealBoardMaskOnShowAni()
local isAtkAction = self.battleController.curActionSide == GConst.BattleConst.SIDE_ATK
for posId, entity in pairs(self.battleController.battleData:getGridEnties()) do
if entity:getCell() then
local inCurRange = self.battleController:getPosIdInCurActionBoardRowRange(posId)
local parent
if isAtkAction then
parent = inCurRange and self.atkBoard or self.defBoard
else
parent = inCurRange and self.defBoard or self.atkBoard
end
if parent then
entity:getCell():getBaseObject():setParent(parent, true)
end
end
end
self:clearEnterShowBoardSeq()
self.enterShowBoardSeq = self.root:createBindTweenSequence()
self.enterShowBoardSeq:AppendInterval(0.5)
local w, h = GFunc.getUIExpandScreenSize()
self.enterShowBoardSeq:Join(self.defBoardImg:getTransform():DOAnchorPosX(w + 360, 0.5))
self.enterShowBoardSeq:Join(self.atkBoardImg:getTransform():DOAnchorPosX(-(w + 360), 0.5))
self.enterShowBoardSeq:Join(self.boardRootNodeMask:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_IMAGE):DOFade(0, 0.5))
self.enterShowBoardSeq:AppendCallback(function()
self:dealBoardMaskOnShowAni(true)
self:getBoardRootNode():setVisible(false)
if callback then
callback()
end
end)
end
return BattleUIPVP