2194 lines
78 KiB
Lua
2194 lines
78 KiB
Lua
local UIPrefabObject = require "app/bf/unity/uiprefab_object"
|
|
local BattleUI = class("BattleUI", BaseUI)
|
|
local GRID_CELL = "app/ui/battle/cell/grid_cell"
|
|
local GRID_CELL_PATH = "assets/prefabs/ui/battle/cell/grid_cell.prefab"
|
|
local SKILL_NODE_CELL = "app/ui/battle/cell/skill_node_cell"
|
|
local SELECT_SKILL_CELL = "app/ui/battle/cell/select_skill_cell"
|
|
local BATTLE_SELECT_SKILL_COMP = "app/ui/battle/battle_skill_select_comp"
|
|
|
|
local DEFAULT_X = 10000
|
|
local BOARD_POS_UP = BF.Vector2(0, 47)
|
|
local BOARD_POS_DOWN = BF.Vector2(0, -740)
|
|
local BG_PATH = "assets/arts/textures/background/battle/%s.png"
|
|
local CacheVector2 = CS.UnityEngine.Vector2(0, 0)
|
|
|
|
local CACHE_SKILL_POS_1 = {x = 10, y = 360}
|
|
local CACHE_SKILL_POS_2 = {x = 10, y = 420}
|
|
local BATTLE_COMMON_PATH = "assets/arts/textures/background/battle_common/%s.png"
|
|
|
|
function BattleUI:getPrefabPath()
|
|
return "assets/prefabs/ui/battle/battle_ui.prefab"
|
|
end
|
|
|
|
function BattleUI:onClose()
|
|
self:clear()
|
|
end
|
|
|
|
function BattleUI:getBGMId()
|
|
return AudioManager.BGM_ID.BATTLE
|
|
end
|
|
|
|
function BattleUI:onLoadRootComplete()
|
|
self:_display()
|
|
self:_addListeners()
|
|
self:_bind()
|
|
end
|
|
|
|
function BattleUI:_display()
|
|
local uiMap = self.root:genAllChildren()
|
|
self.uiMap = uiMap
|
|
self.gridNode = uiMap["battle_ui.bg_2.board_node.grid_node"]
|
|
self.boardNode = uiMap["battle_ui.bg_2.board_node"]
|
|
self.boardNode:setAnchoredPositionX(DEFAULT_X)
|
|
self.boardMask2D = self.gridNode:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_RECT_MASK_2D)
|
|
self.boardMask = uiMap["battle_ui.bg_2.board_node.grid_node.board_mask"]
|
|
self.boardMask:setVisible(false)
|
|
self.boardCacheNode = uiMap["battle_ui.bg_2.board_cache_node"]
|
|
self.boardCacheNode:setVisible(false)
|
|
self.boardCacheBox = uiMap["battle_ui.bg_2.board_cache_node.skill_box"]
|
|
self.boardCacheBox:setAnchoredPositionX(DEFAULT_X)
|
|
self.battleRoot = uiMap["battle_ui.battle_root"]
|
|
self.maxLayerNode = uiMap["battle_ui.battle_root.battle_node.max_layer_show_node"]
|
|
self:initBg()
|
|
self:initSkill()
|
|
self:initBuff()
|
|
self:initBattlefield()
|
|
self:initNumberNode()
|
|
self:initComboNode()
|
|
self:initHpNode()
|
|
self:initFxNode()
|
|
self:hideGenerateSkillGridCells()
|
|
self:initTutorialNode()
|
|
self:initUISfxs()
|
|
self:initSkillSelectCells()
|
|
self:hideAllSfxSmoke()
|
|
self:initSkillLineSfx()
|
|
self:initGenerateSkillEffect()
|
|
self:initSelectSkillNode()
|
|
self:initCommonSkillDescTips()
|
|
self:initBossEnterAni()
|
|
self:initCounterAttack()
|
|
end
|
|
|
|
function BattleUI:_addListeners()
|
|
local uiMap = self.root:genAllChildren()
|
|
uiMap["battle_ui.top_node.close_btn"]:addClickListener(function()
|
|
ModuleManager.BattleManager:showPauseUI()
|
|
end)
|
|
|
|
self:addEventListener(EventManager.CUSTOM_EVENT.SHOW_ELIMINATION_TUTORAIL, function(posIdList)
|
|
self:showTutorialFinger(posIdList)
|
|
end)
|
|
|
|
self:addEventListener(EventManager.CUSTOM_EVENT.SKILL_REFRESH_SUCC, function(posIdList)
|
|
if self.selectSkillComp then
|
|
self.selectSkillComp:getNewRandomSkill()
|
|
end
|
|
end)
|
|
end
|
|
|
|
function BattleUI:_bind()
|
|
self:bind(DataManager.BattleData, "lvDirty", function()
|
|
self:refreshLv()
|
|
end, true)
|
|
end
|
|
|
|
function BattleUI:initBg()
|
|
self.bg = self.uiMap["battle_ui.battle_root.bg"]
|
|
self.bg:setLocalScale(0, 0, 0)
|
|
local width = self.bg:fastGetSizeDelta()
|
|
self.bg:setAnchoredPositionX(width/4)
|
|
end
|
|
|
|
function BattleUI:refreshChessBoard(boardBg)
|
|
self.boardNode:setTexture(string.format(BATTLE_COMMON_PATH, boardBg), function()
|
|
self.boardNode:setAnchoredPositionX(0)
|
|
end)
|
|
end
|
|
|
|
function BattleUI:loadBg(bgName)
|
|
self.bg:setTexture(string.format(BG_PATH, bgName), function()
|
|
self.bg:setLocalScale(1, 1, 1)
|
|
end)
|
|
end
|
|
|
|
function BattleUI:moveBattlefield(time)
|
|
local width = self.bg:fastGetSizeDelta()
|
|
self.bg:setAnchoredPositionX(width/4)
|
|
if self.bgMoveTween == nil then
|
|
self.bgMoveTween = self.bg:getTransform():DOAnchorPosX(-width/4, time)
|
|
self.bgMoveTween:SetIntId(GConst.DOTWEEN_IDS.BATTLE)
|
|
self.bgMoveTween:SetAutoKill(false)
|
|
else
|
|
local x, y = self.bg:fastGetAnchoredPosition()
|
|
CacheVector2.x = -width/4
|
|
CacheVector2.y = y
|
|
self.bgMoveTween:ChangeEndValue(CacheVector2, time, true)
|
|
self.bgMoveTween:Restart()
|
|
end
|
|
end
|
|
|
|
function BattleUI:initSkill()
|
|
if self.skillNodeCells then
|
|
return
|
|
end
|
|
self.skillNodeCells = {}
|
|
|
|
local uiMap = self.root:genAllChildren()
|
|
for name, elementType in pairs(GConst.BattleConst.ELEMENT_TYPE) do
|
|
local obj = uiMap["battle_ui.bg_2.skill_node.skill_node_cell_" .. elementType]
|
|
if obj then
|
|
self.skillNodeCells[elementType] = CellManager:addCellComp(obj, SKILL_NODE_CELL)
|
|
local skillEntity = DataManager.BattleData:getSkillEntities()[elementType]
|
|
if skillEntity then
|
|
self.skillNodeCells[elementType]:refresh(skillEntity)
|
|
end
|
|
self.skillNodeCells[elementType]:getBaseObject():setActive(skillEntity ~= nil)
|
|
self.skillNodeCells[elementType]:addClickListener(function()
|
|
ModuleManager.TipsManager:showBattleBoardSkillTips(elementType)
|
|
end)
|
|
end
|
|
end
|
|
|
|
uiMap["battle_ui.bg_2.skill_node"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_HORIZONTAL_OR_VERTICAL_LAYOUT):RefreshLayout()
|
|
end
|
|
|
|
function BattleUI:initBuff()
|
|
-- buff icon
|
|
self.atkBuffIconList = {
|
|
self.uiMap["battle_ui.top_node.buff_l.buff_1"],
|
|
self.uiMap["battle_ui.top_node.buff_l.buff_2"],
|
|
self.uiMap["battle_ui.top_node.buff_l.buff_3"],
|
|
self.uiMap["battle_ui.top_node.buff_l.buff_4"],
|
|
}
|
|
for k, v in ipairs(self.atkBuffIconList) do
|
|
v:addClickListener(function()
|
|
self.battleController:showBuffTips(1)
|
|
end)
|
|
v:setLocalScale(0, 0, 0)
|
|
end
|
|
self.atkBuffTextList = {
|
|
self.uiMap["battle_ui.top_node.buff_l.text_1"],
|
|
self.uiMap["battle_ui.top_node.buff_l.text_2"],
|
|
self.uiMap["battle_ui.top_node.buff_l.text_3"],
|
|
self.uiMap["battle_ui.top_node.buff_l.text_4"],
|
|
}
|
|
for k, v in ipairs(self.atkBuffTextList) do
|
|
v:setText(GConst.EMPTY_STRING)
|
|
end
|
|
self.defBuffIconList = {
|
|
self.uiMap["battle_ui.top_node.buff_r.buff_1"],
|
|
self.uiMap["battle_ui.top_node.buff_r.buff_2"],
|
|
self.uiMap["battle_ui.top_node.buff_r.buff_3"],
|
|
self.uiMap["battle_ui.top_node.buff_r.buff_4"],
|
|
}
|
|
for k, v in ipairs(self.defBuffIconList) do
|
|
v:addClickListener(function()
|
|
self.battleController:showBuffTips(2)
|
|
end)
|
|
v:setLocalScale(0, 0, 0)
|
|
end
|
|
self.defBuffTextList = {
|
|
self.uiMap["battle_ui.top_node.buff_r.text_1"],
|
|
self.uiMap["battle_ui.top_node.buff_r.text_2"],
|
|
self.uiMap["battle_ui.top_node.buff_r.text_3"],
|
|
self.uiMap["battle_ui.top_node.buff_r.text_4"],
|
|
}
|
|
for k, v in ipairs(self.defBuffTextList) do
|
|
v:setText(GConst.EMPTY_STRING)
|
|
end
|
|
-- buff的tips
|
|
self.battleBuffTipsRoot = self.uiMap["battle_ui.battle_buff_tips"]
|
|
self.battleBuffTipsRoot:setLocalScale(0, 0, 0)
|
|
local battleBuffTipsMask = self.uiMap["battle_ui.battle_buff_tips.mask"]
|
|
battleBuffTipsMask:addClickListener(function()
|
|
if self.autoCloseBuffSid then
|
|
self:unscheduleGlobal(self.autoCloseBuffSid)
|
|
self.autoCloseBuffSid = nil
|
|
end
|
|
self.battleBuffTipsRoot:setLocalScale(0, 0, 0)
|
|
end)
|
|
self.battleBuffTipsBg = self.uiMap["battle_ui.battle_buff_tips.bg"]
|
|
self.battleBuffTipsBuff = self.uiMap["battle_ui.battle_buff_tips.bg.buff"]
|
|
self.battleBuffTipsBuffList = {}
|
|
local children = self.battleBuffTipsBg:getChildList()
|
|
if children then
|
|
for k, v in ipairs(children) do
|
|
table.insert(self.battleBuffTipsBuffList, v)
|
|
end
|
|
end
|
|
end
|
|
|
|
function BattleUI:refreshBuff(side, buffList)
|
|
if side == GConst.BattleConst.SIDE_ATK then
|
|
local buffObj = nil
|
|
local count = #buffList
|
|
local buffIconCount = #self.atkBuffIconList
|
|
local index = 1
|
|
for i = 1, count do
|
|
buffObj = buffList[i]
|
|
if buffObj and buffObj.buff:getIcon() then
|
|
local icon = self.atkBuffIconList[index]
|
|
local text = self.atkBuffTextList[index]
|
|
icon:setLocalScale(1, 1, 1)
|
|
icon:setSprite(GConst.ATLAS_PATH.ICON_BUFF, buffObj.buff:getIcon())
|
|
local round = buffObj.round
|
|
if round <= 1 or round > 9 then
|
|
text:setText(GConst.EMPTY_STRING)
|
|
else
|
|
text:setText(tostring(round))
|
|
end
|
|
index = index + 1
|
|
if index > buffIconCount then
|
|
break
|
|
end
|
|
end
|
|
end
|
|
for i = index, buffIconCount do
|
|
self.atkBuffIconList[i]:setLocalScale(0, 0, 0)
|
|
self.atkBuffTextList[i]:setText(GConst.EMPTY_STRING)
|
|
end
|
|
else
|
|
local buffObj = nil
|
|
local count = #buffList
|
|
local buffIconCount = #self.defBuffIconList
|
|
local index = 1
|
|
for i = 1, count do
|
|
buffObj = buffList[i]
|
|
if buffObj and buffObj.buff:getIcon() then
|
|
local icon = self.defBuffIconList[index]
|
|
local text = self.defBuffTextList[index]
|
|
icon:setLocalScale(1, 1, 1)
|
|
icon:setSprite(GConst.ATLAS_PATH.ICON_BUFF, buffObj.buff:getIcon())
|
|
local round = buffObj.round
|
|
if round <= 1 or round > 9 then
|
|
text:setText(GConst.EMPTY_STRING)
|
|
else
|
|
text:setText(tostring(round))
|
|
end
|
|
index = index + 1
|
|
if index > buffIconCount then
|
|
break
|
|
end
|
|
end
|
|
end
|
|
for i = index, buffIconCount do
|
|
self.defBuffIconList[i]:setLocalScale(0, 0, 0)
|
|
self.defBuffTextList[i]:setText(GConst.EMPTY_STRING)
|
|
end
|
|
end
|
|
end
|
|
|
|
function BattleUI:clearBuff(side)
|
|
if side == GConst.BattleConst.SIDE_ATK then
|
|
for k, v in ipairs(self.atkBuffIconList) do
|
|
v:setLocalScale(0, 0, 0)
|
|
end
|
|
for k, v in ipairs(self.atkBuffTextList) do
|
|
v:setText(GConst.EMPTY_STRING)
|
|
end
|
|
else
|
|
for k, v in ipairs(self.defBuffIconList) do
|
|
v:setLocalScale(0, 0, 0)
|
|
end
|
|
for k, v in ipairs(self.defBuffTextList) do
|
|
v:setText(GConst.EMPTY_STRING)
|
|
end
|
|
end
|
|
end
|
|
|
|
function BattleUI:showLeftBuffTips(buffList, autoClose)
|
|
local x = self.battleBuffTipsBg:fastGetAnchoredPosition()
|
|
if x > 0 then
|
|
self.battleBuffTipsBg:setAnchoredPositionX(-x)
|
|
end
|
|
self:showBuffTips(buffList, autoClose)
|
|
end
|
|
|
|
function BattleUI:showRightBuffTips(buffList, autoClose)
|
|
local x = self.battleBuffTipsBg:fastGetAnchoredPosition()
|
|
if x < 0 then
|
|
self.battleBuffTipsBg:setAnchoredPositionX(-x)
|
|
end
|
|
self:showBuffTips(buffList, autoClose)
|
|
end
|
|
|
|
function BattleUI:showBuffTips(buffList, autoClose)
|
|
if #buffList <= 0 then
|
|
return
|
|
end
|
|
self.battleBuffTipsRoot:setLocalScale(1, 1, 1)
|
|
local buffObj = nil
|
|
local count = #buffList
|
|
local index = 1
|
|
local addY = 0
|
|
for i = 1, count do
|
|
buffObj = buffList[i]
|
|
if buffObj and buffObj.buff:getIcon() then
|
|
local buffTipsObj = self:getBattleBuffTipsObj(index)
|
|
buffTipsObj:setLocalScale(1, 1, 1)
|
|
buffTipsObj:setAnchoredPositionY(-addY)
|
|
local buffTipsObjMap = buffTipsObj:genAllChildren()
|
|
buffTipsObjMap["buff.icon"]:setSprite(GConst.ATLAS_PATH.ICON_BUFF, buffObj.buff:getIcon())
|
|
local round = buffObj.round
|
|
if round <= 1 or round > 9 then
|
|
buffTipsObjMap["buff.round"]:setText(GConst.EMPTY_STRING)
|
|
else
|
|
buffTipsObjMap["buff.round"]:setText(tostring(round))
|
|
end
|
|
local descTx = buffTipsObjMap["buff.desc"]
|
|
descTx:setText(buffObj.buff:getDesc())
|
|
descTx:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO):ForceMeshUpdate()
|
|
local height = descTx:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO).renderedHeight
|
|
if height > 30 then
|
|
addY = addY + 56 + height - 30
|
|
else
|
|
addY = addY + 56
|
|
end
|
|
index = index + 1
|
|
end
|
|
end
|
|
for i = index, #self.battleBuffTipsBuffList do
|
|
self.battleBuffTipsBuffList[i]:setLocalScale(0, 0, 0)
|
|
end
|
|
self.battleBuffTipsBg:setSizeDeltaY(addY + 10)
|
|
|
|
if self.autoCloseBuffSid then
|
|
self:unscheduleGlobal(self.autoCloseBuffSid)
|
|
self.autoCloseBuffSid = nil
|
|
end
|
|
|
|
if autoClose then
|
|
self.autoCloseBuffSid = self:performWithDelayGlobal(function()
|
|
self.battleBuffTipsRoot:setLocalScale(0, 0, 0)
|
|
end, 1.5)
|
|
end
|
|
end
|
|
|
|
function BattleUI:getBattleBuffTipsObj(index)
|
|
if self.battleBuffTipsBuffList[index] then
|
|
return self.battleBuffTipsBuffList[index]
|
|
end
|
|
local prefab = CS.UnityEngine.Object.Instantiate(self.battleBuffTipsBuff:getGameObject())
|
|
local prefabObject = UIPrefabObject:create()
|
|
prefabObject:initWithPrefab(self.battleBuffTipsBuff:getAssetPath(), prefab)
|
|
prefabObject:initPrefabHelper()
|
|
prefabObject:setParent(self.battleBuffTipsBg, false)
|
|
table.insert(self.battleBuffTipsBuffList, prefabObject)
|
|
return prefabObject
|
|
end
|
|
|
|
function BattleUI:initBattlefield()
|
|
self.battleNode = self.uiMap["battle_ui.battle_root.battle_node"]
|
|
end
|
|
|
|
function BattleUI:getBattleNode()
|
|
return self.battleNode
|
|
end
|
|
|
|
function BattleUI:initNumberNode()
|
|
self.battleNumberNode = self.uiMap["battle_ui.battle_root.battle_number_node"]
|
|
self.battleNumberRed = self.uiMap["battle_ui.cache_node.battle_number_red"]
|
|
self.battleNumberGreen = self.uiMap["battle_ui.cache_node.battle_number_green"]
|
|
self.battleNumberBlue = self.uiMap["battle_ui.cache_node.battle_number_blue"]
|
|
self.battleNumberWhite = self.uiMap["battle_ui.cache_node.battle_number_white"]
|
|
self.battleNumberSpecial = self.uiMap["battle_ui.cache_node.battle_number_special"]
|
|
end
|
|
|
|
function BattleUI:getNumberNode()
|
|
return self.battleNumberNode
|
|
end
|
|
|
|
function BattleUI:getBattleNumberRed()
|
|
return self.battleNumberRed
|
|
end
|
|
|
|
function BattleUI:getBattleNumberGreen()
|
|
return self.battleNumberGreen
|
|
end
|
|
|
|
function BattleUI:getBattleNumberBlue()
|
|
return self.battleNumberBlue
|
|
end
|
|
|
|
function BattleUI:getBattleNumberWhite()
|
|
return self.battleNumberWhite
|
|
end
|
|
|
|
function BattleUI:getBattleNumberSpecial()
|
|
return self.battleNumberSpecial
|
|
end
|
|
|
|
function BattleUI:initComboNode()
|
|
self.comboNode = self.uiMap["battle_ui.top_node.combo"]
|
|
self.comboAnimator = self.comboNode:getComponent(GConst.TYPEOF_UNITY_CLASS.ANIMATOR)
|
|
self.comboNodeVisible = false
|
|
self.comboNode:setVisible(false)
|
|
self.comboBg1 = self.uiMap["battle_ui.top_node.combo.bg.bg_1"]
|
|
self.comboBg1:setVisible(false)
|
|
self.comboTx1 = self.uiMap["battle_ui.top_node.combo.number.text.text_1"]
|
|
self.comboTxComp1 = self.comboTx1:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT)
|
|
self.comboTx2 = self.uiMap["battle_ui.top_node.combo.number.text.text_2"]
|
|
self.comboTxComp2 = self.comboTx2:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT)
|
|
self.comboFx1 = self.uiMap["battle_ui.top_node.combo.bg.vfx_ui_hit_b01"]
|
|
self.comboFx1:setActive(false)
|
|
self.comboFxVisible1 = false
|
|
self.comboFx2 = self.uiMap["battle_ui.top_node.combo.bg.vfx_ui_hit_b02"]
|
|
self.comboFx2:setActive(false)
|
|
self.comboFxVisible2 = false
|
|
self.comboFx3 = self.uiMap["battle_ui.top_node.combo.bg.vfx_ui_hit_b03"]
|
|
self.comboFx3:setActive(false)
|
|
self.comboFxVisible3 = false
|
|
end
|
|
|
|
function BattleUI:hideCombo()
|
|
if not self.comboNodeVisible then
|
|
return
|
|
end
|
|
self.comboNodeVisible = false
|
|
if self.comboSid then
|
|
self:unscheduleGlobal(self.comboSid)
|
|
end
|
|
self.comboSid = self:performWithDelayGlobal(function()
|
|
self.comboSid = nil
|
|
self.comboNode:setVisible(false)
|
|
if self.comboFxVisible1 then
|
|
self.comboFxVisible1 = false
|
|
self.comboFx1:setActive(false)
|
|
end
|
|
if self.comboFxVisible2 then
|
|
self.comboFxVisible2 = false
|
|
self.comboFx2:setActive(false)
|
|
end
|
|
if self.comboFxVisible3 then
|
|
self.comboFxVisible3 = false
|
|
self.comboFx3:setActive(false)
|
|
end
|
|
end, 0.5)
|
|
end
|
|
|
|
function BattleUI:showCombo(count)
|
|
if count > 99 then
|
|
count = 99
|
|
end
|
|
self.comboNodeVisible = true
|
|
self.comboNode:setVisible(true)
|
|
if count <= 5 then
|
|
if self.comboFxVisible1 then
|
|
self.comboFxVisible1 = false
|
|
self.comboFx1:setActive(false)
|
|
end
|
|
if self.comboFxVisible2 then
|
|
self.comboFxVisible2 = false
|
|
self.comboFx2:setActive(false)
|
|
end
|
|
if self.comboFxVisible3 then
|
|
self.comboFxVisible3 = false
|
|
self.comboFx3:setActive(false)
|
|
end
|
|
self.comboBg1:setVisible(false)
|
|
self.comboTx1:setText(GConst.INT_TO_STRING[count], self.comboTxComp1)
|
|
self.comboTx1:setAnchoredPositionX(0)
|
|
self.comboTx2:setText(GConst.EMPTY_STRING, self.comboTxComp2)
|
|
self.comboAnimator:Play(GConst.BattleConst.ANIMATOR_HASH_NAME_BATTLE_COMBO_1, -1, 0)
|
|
elseif count <= 10 then
|
|
if self.comboFxVisible1 then
|
|
self.comboFxVisible1 = false
|
|
self.comboFx1:setActive(false)
|
|
end
|
|
if self.comboFxVisible2 then
|
|
self.comboFxVisible2 = false
|
|
self.comboFx2:setActive(false)
|
|
end
|
|
if not self.comboFxVisible3 then
|
|
self.comboFxVisible3 = true
|
|
self.comboFx3:setActive(true)
|
|
end
|
|
self.comboBg1:setVisible(true)
|
|
self.comboTx1:setText(GConst.INT_TO_STRING[count], self.comboTxComp1)
|
|
if count == 10 then
|
|
self.comboTx1:setAnchoredPositionX(-26)
|
|
else
|
|
self.comboTx1:setAnchoredPositionX(0)
|
|
end
|
|
self.comboTx2:setText(GConst.EMPTY_STRING, self.comboTxComp2)
|
|
self.comboAnimator:Play(GConst.BattleConst.ANIMATOR_HASH_NAME_BATTLE_COMBO_2, -1, 0)
|
|
else
|
|
if not self.comboFxVisible1 then
|
|
self.comboFxVisible1 = true
|
|
self.comboFx1:setActive(true)
|
|
end
|
|
if not self.comboFxVisible2 then
|
|
self.comboFxVisible2 = true
|
|
self.comboFx2:setActive(true)
|
|
end
|
|
if self.comboFxVisible3 then
|
|
self.comboFxVisible3 = false
|
|
self.comboFx3:setActive(false)
|
|
end
|
|
self.comboBg1:setVisible(true)
|
|
self.comboTx1:setText(GConst.EMPTY_STRING, self.comboTxComp1)
|
|
self.comboTx2:setText(GConst.INT_TO_STRING[count], self.comboTxComp2)
|
|
self.comboAnimator:Play(GConst.BattleConst.ANIMATOR_HASH_NAME_BATTLE_COMBO_3, -1, 0)
|
|
end
|
|
end
|
|
|
|
function BattleUI:initCounterAttack()
|
|
self.counterAttackNode = self.uiMap["battle_ui.battle_root.battle_number_node.counter_attack"]
|
|
self.counterTx = self.uiMap["battle_ui.battle_root.battle_number_node.counter_attack.text_number"]
|
|
self.counterTxTmp = self.counterTx:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO)
|
|
self.counterTxbgComp = self.uiMap["battle_ui.battle_root.top_node.counter_attack.bg"]
|
|
self.counterAttackNode:setVisible(false)
|
|
end
|
|
|
|
function BattleUI:showCounterAttack(count, side)
|
|
local x = 280
|
|
local horizontal = 180
|
|
if side == GConst.BattleConst.SIDE_ATK then
|
|
x = -280
|
|
horizontal = 0
|
|
self.counterTxTmp.alignment = CS.TMPro.TextAlignmentOptions.MidlineLeft
|
|
else
|
|
self.counterTxTmp.alignment = CS.TMPro.TextAlignmentOptions.MidlineRight
|
|
end
|
|
self.counterTxbgComp:setEulerAngles(0, horizontal, 0)
|
|
self.counterAttackNode:setAnchoredPositionX(x)
|
|
self.counterTx:setText(I18N:getGlobalText(I18N.GlobalConst.COUNTER_ATTACK_DESC) .. "x" .. count)
|
|
self.counterAttackNode:setVisible(true)
|
|
end
|
|
|
|
function BattleUI:hideCounterAttack()
|
|
self.counterAttackNode:setVisible(false)
|
|
end
|
|
|
|
function BattleUI:initFxNode()
|
|
self.fxNode = self.uiMap["battle_ui.battle_root.batttle_fx_node"]
|
|
end
|
|
|
|
function BattleUI:getFxNode()
|
|
return self.fxNode
|
|
end
|
|
|
|
function BattleUI:initHpNode()
|
|
self.hpProgressLeft = self.uiMap["battle_ui.top_node.bg_l.atk_slider_green"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER)
|
|
self.hpProgressRight = self.uiMap["battle_ui.top_node.bg_r.def_slider_red"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER)
|
|
self.hpProgressLeft.value = 1
|
|
self.hpProgressRight.value = 1
|
|
self.hpProgressYellowLeft = self.uiMap["battle_ui.top_node.bg_l.atk_slider_yellow"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER)
|
|
self.hpProgressYellowRight = self.uiMap["battle_ui.top_node.bg_r.def_slider_yellow"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER)
|
|
self.hpProgressYellowLeft.value = 1
|
|
self.hpProgressYellowRight.value = 1
|
|
self.hpTextLeft = self.uiMap["battle_ui.top_node.atk_hp"]
|
|
self.hpTextRight = self.uiMap["battle_ui.top_node.def_hp"]
|
|
self.hpPercentLeft = 1
|
|
self.hpPercentRight = 1
|
|
end
|
|
|
|
function BattleUI:setIsPauseHpProgress(value)
|
|
if self.isPauseHpProgress == value then
|
|
return
|
|
end
|
|
self.isPauseHpProgress = value
|
|
if not value then
|
|
local timeLeft = math.abs(self.hpProgressYellowLeft.value - self.hpPercentLeft)
|
|
if timeLeft > 0.01 then
|
|
local delayTime = math.abs(self.hpProgressLeft.value - self.hpPercentLeft)*2
|
|
if delayTime > 0.05 then
|
|
if self.hpProgressYellowLeftSid then
|
|
self:unscheduleGlobal(self.hpProgressYellowLeftSid)
|
|
end
|
|
self.hpProgressYellowLeftSid = self:performWithDelayGlobal(function()
|
|
self:playHpProgressYellowLeftTween(timeLeft)
|
|
end, delayTime)
|
|
else
|
|
self:playHpProgressYellowLeftTween(timeLeft)
|
|
end
|
|
else
|
|
if self.hpProgressYellowLeftTween then
|
|
self.hpProgressYellowLeftTween:Pause()
|
|
end
|
|
self.hpProgressYellowLeft.value = self.hpPercentLeft
|
|
end
|
|
local timeRight = math.abs(self.hpProgressYellowRight.value - self.hpPercentRight)
|
|
if timeRight > 0.01 then
|
|
local delayTime = math.abs(self.hpProgressRight.value - self.hpPercentRight)*2
|
|
if delayTime > 0.05 then
|
|
if self.hpProgressYellowRightSid then
|
|
self:unscheduleGlobal(self.hpProgressYellowRightSid)
|
|
end
|
|
self.hpProgressYellowRightSid = self:performWithDelayGlobal(function()
|
|
self:playHpProgressYellowRightTween(timeRight)
|
|
end, delayTime)
|
|
else
|
|
self:playHpProgressYellowRightTween(timeRight)
|
|
end
|
|
else
|
|
if self.hpProgressYellowRightTween then
|
|
self.hpProgressYellowRightTween:Pause()
|
|
end
|
|
self.hpProgressYellowRight.value = self.hpPercentRight
|
|
end
|
|
end
|
|
end
|
|
|
|
function BattleUI:playHpProgressYellowLeftTween(time)
|
|
if self.hpProgressYellowLeftTween == nil then
|
|
self.hpProgressYellowLeftTween = GFunc.DOBFSliderValue(self.hpProgressYellowLeft, self.hpPercentLeft, time, false)
|
|
self.hpProgressYellowLeftTween:SetIntId(GConst.DOTWEEN_IDS.BATTLE)
|
|
self.hpProgressYellowLeftTween:SetAutoKill(false)
|
|
else
|
|
self.hpProgressYellowLeftTween:ChangeEndValue(self.hpPercentLeft, time, true)
|
|
self.hpProgressYellowLeftTween:Restart()
|
|
end
|
|
end
|
|
|
|
function BattleUI:playHpProgressYellowRightTween(time)
|
|
if self.hpProgressYellowRightTween == nil then
|
|
self.hpProgressYellowRightTween = GFunc.DOBFSliderValue(self.hpProgressYellowRight, self.hpPercentRight, time, false)
|
|
self.hpProgressYellowRightTween:SetIntId(GConst.DOTWEEN_IDS.BATTLE)
|
|
self.hpProgressYellowRightTween:SetAutoKill(false)
|
|
else
|
|
self.hpProgressYellowRightTween:ChangeEndValue(self.hpPercentRight, time, true)
|
|
self.hpProgressYellowRightTween:Restart()
|
|
end
|
|
end
|
|
|
|
function BattleUI:refreshAtkHp(num, percent)
|
|
self.hpTextLeft:setText(GFunc.num2Str(num))
|
|
if not self.isPauseHpProgress then
|
|
if self.hpProgressLeftTween then
|
|
self.hpProgressLeftTween:Pause()
|
|
end
|
|
if self.hpProgressYellowLeftTween then
|
|
self.hpProgressYellowLeftTween:Pause()
|
|
end
|
|
if self.hpProgressYellowLeftSid then
|
|
self:unscheduleGlobal(self.hpProgressYellowLeftSid)
|
|
self.hpProgressYellowLeftSid = nil
|
|
end
|
|
self.hpProgressLeft.value = percent
|
|
self.hpProgressYellowLeft.value = percent
|
|
self.hpPercentLeft = percent
|
|
return
|
|
end
|
|
if self.hpPercentLeft == percent then
|
|
return
|
|
end
|
|
self.hpPercentLeft = percent
|
|
local time = math.abs(self.hpProgressLeft.value - percent)*2
|
|
if self.hpProgressLeftTween == nil then
|
|
self.hpProgressLeftTween = GFunc.DOBFSliderValue(self.hpProgressLeft, percent, time, false)
|
|
self.hpProgressLeftTween:SetIntId(GConst.DOTWEEN_IDS.BATTLE)
|
|
self.hpProgressLeftTween:SetAutoKill(false)
|
|
else
|
|
self.hpProgressLeftTween:ChangeEndValue(percent, time, true)
|
|
self.hpProgressLeftTween:Restart()
|
|
end
|
|
end
|
|
|
|
function BattleUI:refreshDefHp(num, percent)
|
|
self.hpTextRight:setText(GFunc.num2Str(num))
|
|
if not self.isPauseHpProgress then
|
|
if self.hpProgressRightTween then
|
|
self.hpProgressRightTween:Pause()
|
|
end
|
|
if self.hpProgressYellowRightTween then
|
|
self.hpProgressYellowRightTween:Pause()
|
|
end
|
|
if self.hpProgressYellowRightSid then
|
|
self:unscheduleGlobal(self.hpProgressYellowRightSid)
|
|
self.hpProgressYellowRightSid = nil
|
|
end
|
|
self.hpProgressRight.value = percent
|
|
self.hpProgressYellowRight.value = percent
|
|
self.hpPercentRight = percent
|
|
return
|
|
end
|
|
if self.hpPercentRight == percent then
|
|
return
|
|
end
|
|
self.hpPercentRight = percent
|
|
local time = math.abs(self.hpProgressRight.value - percent)*2
|
|
if self.hpProgressRightTween == nil then
|
|
self.hpProgressRightTween = GFunc.DOBFSliderValue(self.hpProgressRight, percent, time, false)
|
|
self.hpProgressRightTween:SetIntId(GConst.DOTWEEN_IDS.BATTLE)
|
|
self.hpProgressRightTween:SetAutoKill(false)
|
|
else
|
|
self.hpProgressRightTween:ChangeEndValue(percent, time, true)
|
|
self.hpProgressRightTween:Restart()
|
|
end
|
|
end
|
|
|
|
function BattleUI:refreshSkill(elementMap, showSfx)
|
|
if not self.skillNodeCells then
|
|
return
|
|
end
|
|
|
|
for elementType, skillEntity in pairs(DataManager.BattleData:getSkillEntities()) do
|
|
if not self.skillNodeCells[elementType] then
|
|
return
|
|
end
|
|
self.skillNodeCells[elementType]:refresh(skillEntity, elementMap, showSfx)
|
|
end
|
|
end
|
|
|
|
-- shakeType: 奇数是水平震动 偶数是垂直震动
|
|
function BattleUI:shakeScreen(shakeType, duration)
|
|
self.battleRoot:setLocalPosition(0, 0, 0)
|
|
if self.shakeTween == nil then
|
|
local length = ConfigManager:getConfig("const")["shake_level_" .. math.ceil(shakeType / 2)].value
|
|
if shakeType % 2 == 0 then
|
|
CacheVector2.x = 0
|
|
CacheVector2.y = length
|
|
self.shakeTween = self.battleRoot:getTransform():DOShakeAnchorPos(duration, CacheVector2, 100, 90, false, false)
|
|
else
|
|
CacheVector2.x = length
|
|
CacheVector2.y = 0
|
|
self.shakeTween = self.battleRoot:getTransform():DOShakeAnchorPos(duration, CacheVector2, 100, 90, false, false)
|
|
end
|
|
self.shakeTween:SetIntId(GConst.DOTWEEN_IDS.BATTLE)
|
|
self.shakeTween:SetAutoKill(false)
|
|
self.shakeType = shakeType
|
|
self.shakeDuration = duration
|
|
elseif self.shakeType == shakeType and self.shakeDuration == duration then
|
|
self.shakeTween:Restart()
|
|
else
|
|
self.shakeTween:Kill()
|
|
local length = ConfigManager:getConfig("const")["shake_level_" .. math.ceil(shakeType / 2)].value
|
|
if shakeType % 2 == 0 then
|
|
CacheVector2.x = 0
|
|
CacheVector2.y = length
|
|
self.shakeTween = self.battleRoot:getTransform():DOShakeAnchorPos(duration, CacheVector2, 100, 90, false, false)
|
|
else
|
|
CacheVector2.x = length
|
|
CacheVector2.y = 0
|
|
self.shakeTween = self.battleRoot:getTransform():DOShakeAnchorPos(duration, CacheVector2, 100, 90, false, false)
|
|
end
|
|
self.shakeTween:SetIntId(GConst.DOTWEEN_IDS.BATTLE)
|
|
self.shakeTween:SetAutoKill(false)
|
|
self.shakeType = shakeType
|
|
self.shakeDuration = duration
|
|
end
|
|
self.shakeTween.timeScale = DataManager.BattleData:getTimeScale()
|
|
end
|
|
|
|
function BattleUI:initGridCell()
|
|
if self.root.gridCells then
|
|
self.gridCells = self.root.gridCells
|
|
self.gridInitOver = true
|
|
end
|
|
|
|
if self.gridCells and self.gridInitOver then
|
|
self:onInitGridCellOver()
|
|
return
|
|
end
|
|
|
|
self.gridCells = {}
|
|
self.cellLoadRemianCount = GConst.BattleConst.ROW_COUNT * GConst.BattleConst.COLUMN_COUNT
|
|
for r = 1, GConst.BattleConst.ROW_COUNT do
|
|
for c = 1, GConst.BattleConst.COLUMN_COUNT do
|
|
CellManager:loadCellAsync(GRID_CELL_PATH, GRID_CELL, self.gridNode, function(cell)
|
|
local posId = ModuleManager.BattleManager:getPosId(r, c)
|
|
self.gridCells[posId] = cell
|
|
cell:getBaseObject():setAnchoredPositionX(DEFAULT_X) -- 初始化时放到屏幕外
|
|
|
|
self.cellLoadRemianCount = self.cellLoadRemianCount - 1
|
|
if self.cellLoadRemianCount <= 0 then
|
|
self.gridInitOver = true
|
|
self:onInitGridCellOver()
|
|
self.root.gridCells = self.gridCells
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
end
|
|
|
|
function BattleUI:onInitGridCellOver()
|
|
for posId, cell in pairs(self.gridCells) do
|
|
local entity = DataManager.BattleData:getGridEntity(posId)
|
|
if entity then
|
|
cell:hideAni()
|
|
cell:setOrder(self:getUIOrder())
|
|
cell:refresh(entity)
|
|
cell:addTouchListener(function(eventType)
|
|
if self.battleController then
|
|
self.battleController:onTouchEvent(eventType, entity:getPosId())
|
|
end
|
|
end)
|
|
cell:unBindAll()
|
|
cell:bind(entity, "isDirty", function()
|
|
cell:refresh(entity, self.curElementType)
|
|
end)
|
|
local pos = entity:getPos()
|
|
cell:getBaseObject():setAnchoredPosition(pos.x, pos.y)
|
|
entity:setCell(cell)
|
|
end
|
|
end
|
|
|
|
---- 检查引导
|
|
ModuleManager.TutorialManager:checkFuncTutorial(GConst.TutorialConst.START_TUTORIAL)
|
|
end
|
|
|
|
function BattleUI:switchBoard(downCallback, callback, isFirst)
|
|
if self.switchBoardSeq then
|
|
self.switchBoardSeq:Kill()
|
|
self.switchBoardSeq = nil
|
|
end
|
|
|
|
if isFirst then
|
|
if downCallback then
|
|
downCallback()
|
|
end
|
|
if callback then
|
|
callback()
|
|
end
|
|
self.boardNode:setAnchoredPositionY(BOARD_POS_UP.y)
|
|
return
|
|
end
|
|
|
|
self.switchBoardSeq = self.root:createBindTweenSequence()
|
|
self.switchBoardSeq:Append(self.boardNode:getTransform():DOAnchorPos(BOARD_POS_DOWN, 0.5))
|
|
self.switchBoardSeq:AppendCallback(function()
|
|
if downCallback then
|
|
downCallback()
|
|
end
|
|
end)
|
|
self.switchBoardSeq:Append(self.boardNode:getTransform():DOAnchorPos(BOARD_POS_UP, 0.5))
|
|
self.switchBoardSeq:AppendCallback(function()
|
|
if callback then
|
|
callback()
|
|
end
|
|
end)
|
|
end
|
|
|
|
function BattleUI:setController(controller)
|
|
self.battleController = controller
|
|
end
|
|
|
|
function BattleUI:showBoardMask(elementType, skillPosId)
|
|
if not self.gridCells then
|
|
return
|
|
end
|
|
if self.curElementType == elementType and self.skillPosId == skillPosId then
|
|
return
|
|
end
|
|
|
|
self.curElementType = elementType
|
|
self.skillPosId = skillPosId
|
|
self:refreshBoard()
|
|
end
|
|
|
|
function BattleUI:refreshBoard()
|
|
local entities = DataManager.BattleData:getGridEnties()
|
|
for posId, entity in pairs(entities) do
|
|
if entity and entity:getCell() then
|
|
entity:getCell():refresh(entity, self.curElementType, self.skillPosId)
|
|
end
|
|
end
|
|
end
|
|
|
|
function BattleUI:eliminationAni(aniSequence, effectGridMap, callback)
|
|
self:showMask(true)
|
|
if not aniSequence then
|
|
if callback then
|
|
callback()
|
|
end
|
|
return
|
|
end
|
|
|
|
self.boardMask:getTransform():SetAsLastSibling()
|
|
if self.eliminationAniSeq then
|
|
self.eliminationAniSeq:Kill()
|
|
self.eliminationAniSeq = nil
|
|
end
|
|
|
|
self.eliminationAniSeq = self.root:createBindTweenSequence()
|
|
self.eliminationAniSeq:AppendCallback(function()
|
|
if self.boardMask2D then
|
|
self.boardMask2D.enabled = false
|
|
end
|
|
end)
|
|
|
|
if not self.posIdMap then
|
|
self.posIdMap = {}
|
|
end
|
|
|
|
local breakSfxNameIndexMap = {}
|
|
for index, info in ipairs(aniSequence) do
|
|
if not self.posIdMap[info.posId] then
|
|
local pos = ModuleManager.BattleManager:getPosInfo(info.posId)
|
|
self.posIdMap[info.posId] = true
|
|
local entity = DataManager.BattleData:getGridEntity(info.posId)
|
|
|
|
local time = info.timeIdx
|
|
if entity and entity:getCell() then
|
|
entity:getCell():refresh(entity)
|
|
|
|
if info.callback then
|
|
self.eliminationAniSeq:InsertCallback(time, function()
|
|
if info.callback then
|
|
info.callback()
|
|
end
|
|
end)
|
|
end
|
|
|
|
if info.breakSfxName then
|
|
breakSfxNameIndexMap[info.breakSfxName] = (breakSfxNameIndexMap[info.breakSfxName] or 0) + 1
|
|
local breakIndex = breakSfxNameIndexMap[info.breakSfxName]
|
|
self.eliminationAniSeq:InsertCallback(time, function()
|
|
self:getSfxGridBreak(info.breakSfxName, breakIndex, function(obj)
|
|
local pos = ModuleManager.BattleManager:getPosInfo(info.posId)
|
|
obj:setLocalScale(38, 38, 38)
|
|
obj:setLocalPosition(pos.x, pos.y, 0)
|
|
obj:play()
|
|
end)
|
|
end)
|
|
end
|
|
|
|
if info.isIdle then
|
|
if entity:getSkillId() then
|
|
entity:getCell():hideSkillSfx()
|
|
end
|
|
local baseObject = entity:getCell():getBaseObject()
|
|
baseObject:getTransform():SetAsLastSibling()
|
|
local anitime = 0
|
|
if info.aniPosList then
|
|
local posList = {}
|
|
local count = 0
|
|
for _, posId in ipairs(info.aniPosList) do
|
|
table.insert(posList, ModuleManager.BattleManager:getPosInfo(posId))
|
|
count = count + 1
|
|
end
|
|
anitime = count * GConst.BattleConst.GRID_BREAK_EFFECT_INTERVAL
|
|
self.eliminationAniSeq:Insert(time, baseObject:getTransform():DOLocalPath(posList, anitime):SetEase(CS.DG.Tweening.Ease.Linear))
|
|
else
|
|
if info.noAni then
|
|
baseObject:setAnchoredPositionX(DEFAULT_X)
|
|
else
|
|
if info.rangeList then
|
|
self.eliminationAniSeq:InsertCallback(time, function()
|
|
self:playSkillLineSfx(info.posId, info.rangeList, info.randomPosList)
|
|
end)
|
|
end
|
|
self.eliminationAniSeq:Insert(time, baseObject:getTransform():DOScale(1.3, 0.1))
|
|
self.eliminationAniSeq:InsertCallback(time + 0.2, function()
|
|
self:getSfxSmoke(index, function(obj)
|
|
obj:setAnchoredPosition(pos.x, pos.y)
|
|
obj:play()
|
|
end)
|
|
end)
|
|
local targetPos = self:getElementSkillPos(entity:getElementType())
|
|
if info.breakFlyToCharacter then
|
|
targetPos = self.battleController.atkTeam:getMainUnit():getBaseObject():getTransform().position
|
|
local sPoint = UIManager:getUICameraComponent():WorldToScreenPoint(targetPos)
|
|
targetPos = CS.BF.Utils.RectTransformScreenPointToLocalPointInRectangle(self.boardNode:getTransform(), sPoint.x, sPoint.y, UIManager:getUICameraComponent())
|
|
end
|
|
self.eliminationAniSeq:Insert(time + 0.2, baseObject:getTransform():DOAnchorPos(targetPos, 0.3))
|
|
self.eliminationAniSeq:Insert(time + 0.2, baseObject:getTransform():DOScale(0.5, 0.3))
|
|
anitime = 0.5
|
|
end
|
|
end
|
|
if info.overCallback then
|
|
self.eliminationAniSeq:InsertCallback(time + anitime, function()
|
|
if info.noAni then
|
|
baseObject:setAnchoredPositionX(DEFAULT_X)
|
|
end
|
|
info.overCallback()
|
|
end)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
for posId, _ in pairs(effectGridMap) do
|
|
local entity = DataManager.BattleData:getGridEntity(posId)
|
|
local baseObject = entity:getCell():getBaseObject()
|
|
baseObject:getTransform():SetAsLastSibling()
|
|
end
|
|
|
|
self.eliminationAniSeq:AppendCallback(function()
|
|
for posId, _ in pairs(self.posIdMap) do
|
|
local entity = DataManager.BattleData:getGridEntity(posId)
|
|
|
|
if entity and entity:getCell() then
|
|
entity:getCell():hideAni()
|
|
end
|
|
end
|
|
|
|
self.posIdMap = {}
|
|
if self.boardMask2D then
|
|
self.boardMask2D.enabled = true
|
|
end
|
|
|
|
if callback then
|
|
callback()
|
|
end
|
|
|
|
self:refreshSkill()
|
|
end)
|
|
end
|
|
|
|
function BattleUI:generateSkillAni(map, callback)
|
|
if table.nums(map) <= 0 then
|
|
if callback then
|
|
callback()
|
|
end
|
|
return
|
|
end
|
|
|
|
self:hideGenerateSkillGridCells()
|
|
if self.generateSkillAniSeq then
|
|
self.generateSkillAniSeq:Kill()
|
|
self.generateSkillAniSeq = nil
|
|
end
|
|
|
|
self.generateSkillAniSeq = self.root:createBindTweenSequence()
|
|
local count = 0
|
|
for elementType, info in pairs(map) do
|
|
local entity = self.generateSkillGridEntities[elementType]
|
|
if entity and entity:getCell() then
|
|
count = count + 1
|
|
entity:setSkilId(info.skillId)
|
|
local cell = entity:getCell()
|
|
cell:refresh(entity)
|
|
self.generateSkillAniSeq:AppendCallback(function()
|
|
local pos = self:getElementSkillPos(elementType)
|
|
cell:getBaseObject():setAnchoredPosition(pos.x, pos.y)
|
|
end)
|
|
local pos = ModuleManager.BattleManager:getPosInfo(info.posId)
|
|
self.generateSkillAniSeq:Append(cell:getBaseObject():getTransform():DOAnchorPos(pos, 0.5))
|
|
if self.generateSkillSfxs and self.generateSkillSfxs[count] then
|
|
self.generateSkillSfxs[count]:setAnchoredPosition(pos.x, pos.y)
|
|
self.generateSkillAniSeq:AppendCallback(function()
|
|
self.generateSkillSfxs[count]:setActive(true)
|
|
self.generateSkillSfxs[count]:play()
|
|
end)
|
|
end
|
|
end
|
|
end
|
|
self.generateSkillAniSeq:AppendCallback(function()
|
|
if callback then
|
|
callback()
|
|
end
|
|
self:hideGenerateSkillGridCells()
|
|
end)
|
|
end
|
|
|
|
function BattleUI:hideGenerateSkillGridCells()
|
|
if not self.generateSkillGridEntities then
|
|
local uiMap = self.root:genAllChildren()
|
|
self.generateSkillGridEntities = {}
|
|
for name, elementType in pairs(GConst.BattleConst.ELEMENT_TYPE) do
|
|
local obj = uiMap["battle_ui.bg_2.ani_node.grid_cell_" .. elementType]
|
|
if obj then
|
|
local cell = CellManager:addCellComp(obj, GRID_CELL)
|
|
local entity = DataManager.BattleData:getNewGridEntity()
|
|
entity:setCell(cell)
|
|
self.generateSkillGridEntities[elementType] = entity
|
|
end
|
|
end
|
|
end
|
|
|
|
for _, entity in pairs(self.generateSkillGridEntities) do
|
|
if entity:getCell() then
|
|
entity:getCell():getBaseObject():setAnchoredPositionX(DEFAULT_X)
|
|
end
|
|
end
|
|
end
|
|
|
|
function BattleUI:showMonsterSkillAni(map, monsterPos, callback)
|
|
if table.nums(map) <= 0 then
|
|
if callback then
|
|
callback()
|
|
end
|
|
return
|
|
end
|
|
|
|
self:hideMonsterSkillGridCells()
|
|
if self.monsterSkillAniSeq then
|
|
self.monsterSkillAniSeq:Kill()
|
|
self.monsterSkillAniSeq = nil
|
|
end
|
|
|
|
local sPoint = UIManager:getUICameraComponent():WorldToScreenPoint(monsterPos)
|
|
monsterPos = CS.BF.Utils.RectTransformScreenPointToLocalPointInRectangle(self.boardNode:getTransform(), sPoint.x, sPoint.y, UIManager:getUICameraComponent())
|
|
|
|
self.monsterSkillAniSeq = self.root:createBindTweenSequence()
|
|
local count = 1
|
|
for posId, info in pairs(map) do
|
|
local entity = self.monsterSkillGridEntities[count]
|
|
if entity and entity:getCell() then
|
|
entity:setGridType(info.gridType)
|
|
entity:setElementType(GConst.BattleConst.ELEMENT_TYPE.EMPTY)
|
|
count = count + 1
|
|
local cell = entity:getCell()
|
|
cell:refresh(entity)
|
|
cell:getBaseObject():setAnchoredPosition(monsterPos.x, monsterPos.y)
|
|
cell:getBaseObject():setLocalScale(0.3, 0.3, 0.3)
|
|
local pos = ModuleManager.BattleManager:getPosInfo(posId)
|
|
if count == 1 then
|
|
self.monsterSkillAniSeq:Append(cell:getBaseObject():getTransform():DOAnchorPos(pos, 0.3))
|
|
else
|
|
self.monsterSkillAniSeq:Join(cell:getBaseObject():getTransform():DOAnchorPos(pos, 0.3))
|
|
end
|
|
self.monsterSkillAniSeq:Join(cell:getBaseObject():getTransform():DOScale(1, 0.3))
|
|
end
|
|
end
|
|
self.monsterSkillAniSeq:AppendCallback(function()
|
|
if callback then
|
|
callback()
|
|
end
|
|
self:hideMonsterSkillGridCells()
|
|
end)
|
|
end
|
|
|
|
function BattleUI:hideMonsterSkillGridCells()
|
|
if not self.monsterSkillGridEntities then
|
|
local uiMap = self.root:genAllChildren()
|
|
self.monsterSkillGridEntities = {}
|
|
for name, elementType in pairs(GConst.BattleConst.ELEMENT_TYPE) do
|
|
local obj = uiMap["battle_ui.bg_2.ani_node.grid_cell_m" .. elementType]
|
|
if obj then
|
|
local cell = CellManager:addCellComp(obj, GRID_CELL)
|
|
local entity = DataManager.BattleData:getNewGridEntity()
|
|
entity:setCell(cell)
|
|
self.monsterSkillGridEntities[elementType] = entity
|
|
end
|
|
end
|
|
end
|
|
|
|
for _, entity in pairs(self.monsterSkillGridEntities) do
|
|
if entity:getCell() then
|
|
entity:getCell():getBaseObject():setAnchoredPositionX(DEFAULT_X)
|
|
end
|
|
end
|
|
end
|
|
|
|
function BattleUI:initGenerateSkillEffect()
|
|
if not self.generateSkillSfxs then
|
|
local uiMap = self.root:genAllChildren()
|
|
self.generateSkillSfxs = {}
|
|
self.generateSkillSfxs[1] = uiMap["battle_ui.bg_2.ani_node.sfx_piece_skill_b01_1"]
|
|
self.generateSkillSfxs[2] = uiMap["battle_ui.bg_2.ani_node.sfx_piece_skill_b01_2"]
|
|
self.generateSkillSfxs[3] = uiMap["battle_ui.bg_2.ani_node.sfx_piece_skill_b01_3"]
|
|
self.generateSkillSfxs[4] = uiMap["battle_ui.bg_2.ani_node.sfx_piece_skill_b01_4"]
|
|
self.generateSkillSfxs[5] = uiMap["battle_ui.bg_2.ani_node.sfx_piece_skill_b01_5"]
|
|
end
|
|
|
|
for _, obj in pairs(self.generateSkillSfxs) do
|
|
obj:setActive(true)
|
|
obj:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_EFFECT_HELPER):SetSortingOrder(self:getUIOrder(), GConst.UI_EFFECT_ORDER.LEVEL1)
|
|
obj:setActive(false)
|
|
end
|
|
end
|
|
|
|
function BattleUI:gotOneSkillAni(skillId, elementType, callback, startPos)
|
|
if not skillId or not self.skillSelectCell then
|
|
if callback then
|
|
callback()
|
|
end
|
|
return
|
|
end
|
|
|
|
self.skillSelectCell:refresh(skillId)
|
|
self.skillSelectCell:getBaseObject():setAnchoredPosition(startPos.x, startPos.y)
|
|
self.skillSelectCell:getBaseObject():setVisible(true)
|
|
if self.gotOneSkillAniSeq then
|
|
self.gotOneSkillAniSeq:Kill()
|
|
self.gotOneSkillAniSeq = nil
|
|
end
|
|
|
|
self.gotOneSkillAniSeq = self.root:createBindTweenSequence()
|
|
local pos = self:getElementSkillPos(elementType)
|
|
self.gotOneSkillAniSeq:Append(self.skillSelectCell:getBaseObject():getTransform():DOAnchorPos(pos, 0.7))
|
|
self.gotOneSkillAniSeq:Join(self.skillSelectCell:getBaseObject():getTransform():DOScale(0.76, 0.7))
|
|
self.gotOneSkillAniSeq:AppendCallback(function()
|
|
self.skillSelectCell:getBaseObject():setAnchoredPositionX(DEFAULT_X)
|
|
if callback then
|
|
callback()
|
|
end
|
|
end)
|
|
end
|
|
|
|
function BattleUI:initSkillSelectCells()
|
|
if not self.skillSelectCell then
|
|
local uiMap = self.root:genAllChildren()
|
|
self.skillSelectCell = CellManager:addCellComp(uiMap["battle_ui.bg_2.ani_node.skill_select_cell"], SELECT_SKILL_CELL)
|
|
self.skillSelectCell:getBaseObject():setAnchoredPositionX(DEFAULT_X)
|
|
end
|
|
end
|
|
|
|
function BattleUI:shuffleBoard(changeInfo, callback)
|
|
if self.shuffleBoardSeq then
|
|
self.shuffleBoardSeq:Kill()
|
|
self.shuffleBoardSeq = nil
|
|
end
|
|
|
|
self.shuffleBoardSeq = self.root:createBindTweenSequence()
|
|
for posId, tartgetPos in pairs(changeInfo) do
|
|
local entity = DataManager.BattleData:getGridEntity(posId)
|
|
local cell = entity:getCell()
|
|
local posId = entity:getPosId()
|
|
if cell then
|
|
local pos = ModuleManager.BattleManager:getPosInfo(posId)
|
|
self.shuffleBoardSeq:Insert(0, cell:getBaseObject():getTransform():DOAnchorPos(pos, 1))
|
|
end
|
|
end
|
|
self.shuffleBoardSeq:AppendCallback(function()
|
|
if callback then
|
|
callback()
|
|
end
|
|
end)
|
|
end
|
|
|
|
function BattleUI:removeGridOutOfScreen(posIdList)
|
|
for _, posId in ipairs(posIdList) do
|
|
local entity = DataManager.BattleData:getGridEntity(posId)
|
|
local cell = entity:getCell()
|
|
cell:getBaseObject():setAnchoredPositionX(DEFAULT_X)
|
|
end
|
|
end
|
|
|
|
function BattleUI:fallGrid(listInfo, isRoundBeginCheck, callback)
|
|
if isRoundBeginCheck then
|
|
self:showMask(false)
|
|
else
|
|
self.boardMask:getTransform():SetAsLastSibling()
|
|
end
|
|
self.fallAniCount = 0
|
|
for posId, info in pairs(listInfo) do
|
|
local entity = DataManager.BattleData:getGridEntity(posId)
|
|
local cell = entity:getCell()
|
|
if cell then
|
|
self.fallAniCount = self.fallAniCount + 1
|
|
if cell.fallSeq then
|
|
cell.fallSeq:Kill()
|
|
cell.fallSeq = nil
|
|
end
|
|
local baseObject = cell:getBaseObject()
|
|
cell.fallSeq = baseObject:createBindTweenSequence()
|
|
baseObject:setAnchoredPosition(info[1].x, info[1].y)
|
|
local count = #info
|
|
local time = GConst.BattleConst.ONE_STEP_TIME * count
|
|
cell.fallSeq:Append(baseObject:getTransform():DOLocalPath(info, time):SetEase(CS.DG.Tweening.Ease.InQuad))
|
|
cell.fallSeq:AppendCallback(function()
|
|
self.fallAniCount = self.fallAniCount - 1
|
|
if self.fallAniCount == 0 then
|
|
if callback then
|
|
callback()
|
|
end
|
|
end
|
|
end)
|
|
cell.fallSeq:InsertCallback(time + math.random() * 0.1 - 0.2, function()
|
|
cell:showAni()
|
|
end)
|
|
end
|
|
end
|
|
if self.fallAniCount == 0 and callback then
|
|
callback()
|
|
end
|
|
end
|
|
|
|
function BattleUI:cacheSkillAni(skillInfo, isPop, callback)
|
|
local skillInfoCount = #skillInfo
|
|
if skillInfoCount <= 0 then
|
|
if callback then
|
|
callback()
|
|
end
|
|
return
|
|
end
|
|
|
|
self:disableUITouch()
|
|
|
|
if not self.root.skillAniGridEntities then
|
|
self.root.skillAniGridEntities = {}
|
|
end
|
|
|
|
for _, entity in ipairs(self.root.skillAniGridEntities) do
|
|
local cell = entity:getCell()
|
|
if cell then
|
|
cell:getBaseObject():setAnchoredPositionX(DEFAULT_X) -- 放到屏幕外
|
|
end
|
|
end
|
|
|
|
local gridEntityCount = #self.root.skillAniGridEntities
|
|
if gridEntityCount < skillInfoCount then
|
|
for i = gridEntityCount, skillInfoCount do
|
|
CellManager:loadCellAsync(GRID_CELL_PATH, GRID_CELL, self.boardCacheNode, function(cell)
|
|
cell:getBaseObject():setAnchoredPositionX(DEFAULT_X) -- 初始化时放到屏幕外
|
|
local entity = DataManager.BattleData:getNewGridEntity()
|
|
entity:setCell(cell)
|
|
cell:hideAni()
|
|
table.insert(self.root.skillAniGridEntities, entity)
|
|
if i == skillInfoCount then
|
|
if isPop then
|
|
self:doCachePopAni(skillInfo, callback)
|
|
else
|
|
self:doCacheAni(skillInfo, callback)
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
else
|
|
if isPop then
|
|
self:doCachePopAni(skillInfo, callback)
|
|
else
|
|
self:doCacheAni(skillInfo, callback)
|
|
end
|
|
end
|
|
end
|
|
|
|
function BattleUI:doCacheAni(skillInfo, callback)
|
|
if self.cacheSkillAniSeq then
|
|
self.cacheSkillAniSeq:Kill()
|
|
self.cacheSkillAniSeq = nil
|
|
end
|
|
|
|
if not self.root.skillAniGridEntities then
|
|
if callback then
|
|
callback()
|
|
end
|
|
return
|
|
end
|
|
|
|
self.boardCacheNode:setVisible(true)
|
|
|
|
local w, h = GFunc.getUIExpandScreenSize()
|
|
local w = w / 2 + 100
|
|
self.cacheSkillAniSeq = self.root:createBindTweenSequence()
|
|
self.cacheSkillAniSeq:AppendCallback(function()
|
|
self.boardCacheBox:setAnchoredPositionX(- w)
|
|
end)
|
|
|
|
for index, info in ipairs(skillInfo) do
|
|
local entity = self.root.skillAniGridEntities[index]
|
|
if entity then
|
|
entity:setSkilId(info.skillId)
|
|
local pos = ModuleManager.BattleManager:getPosInfo(info.posId)
|
|
local cell = entity:getCell()
|
|
if cell then
|
|
cell:refresh(entity)
|
|
local obj = cell:getBaseObject()
|
|
self.cacheSkillAniSeq:InsertCallback(0.5 * (index - 1), function()
|
|
obj:setAnchoredPosition(pos.x, pos.y)
|
|
local gridEntity = DataManager.BattleData:getGridEntity(info.posId)
|
|
if gridEntity and gridEntity:getCell() then
|
|
gridEntity:getCell():getBaseObject():setAnchoredPositionX(DEFAULT_X) -- 放到屏幕外
|
|
end
|
|
end)
|
|
|
|
self.cacheSkillAniSeq:Insert(0.5 * (index - 1) + 0.02, obj:getTransform():DOAnchorPos(CACHE_SKILL_POS_2, 0.7))
|
|
end
|
|
end
|
|
end
|
|
|
|
self.cacheSkillAniSeq:Append(self.boardCacheBox:getTransform():DOAnchorPosX(0, 0.5))
|
|
for index, info in ipairs(skillInfo) do
|
|
local entity = self.root.skillAniGridEntities[index]
|
|
if entity then
|
|
local cell = entity:getCell()
|
|
if cell then
|
|
local obj = cell:getBaseObject()
|
|
if index == 1 then
|
|
self.cacheSkillAniSeq:Append(obj:getTransform():DOAnchorPos(CACHE_SKILL_POS_1, 0.3))
|
|
else
|
|
self.cacheSkillAniSeq:Join(obj:getTransform():DOAnchorPos(CACHE_SKILL_POS_1, 0.3))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
self.cacheSkillAniSeq:AppendCallback(function()
|
|
for index, entity in ipairs(self.root.skillAniGridEntities) do
|
|
if entity and entity:getCell() then
|
|
entity:getCell():getBaseObject():setAnchoredPositionX(DEFAULT_X)
|
|
end
|
|
end
|
|
end)
|
|
self.cacheSkillAniSeq:Append(self.boardCacheBox:getTransform():DOAnchorPosX(w, 0.5))
|
|
self.cacheSkillAniSeq:AppendCallback(function()
|
|
self.boardCacheNode:setVisible(false)
|
|
self:enableUITouch()
|
|
if callback then
|
|
callback()
|
|
end
|
|
end)
|
|
end
|
|
|
|
function BattleUI:doCachePopAni(skillInfo, callback)
|
|
if self.cacheSkillAniSeq then
|
|
self.cacheSkillAniSeq:Kill()
|
|
self.cacheSkillAniSeq = nil
|
|
end
|
|
|
|
if not self.root.skillAniGridEntities then
|
|
if callback then
|
|
callback()
|
|
end
|
|
return
|
|
end
|
|
|
|
self.boardCacheNode:setVisible(true)
|
|
local w, h = GFunc.getUIExpandScreenSize()
|
|
local w = w / 2 + 100
|
|
self.cacheSkillAniSeq = self.root:createBindTweenSequence()
|
|
self.cacheSkillAniSeq:AppendCallback(function()
|
|
self.boardCacheBox:setAnchoredPositionX(- w)
|
|
end)
|
|
self.cacheSkillAniSeq:Append(self.boardCacheBox:getTransform():DOAnchorPosX(0, 0.5))
|
|
for index, info in ipairs(skillInfo) do
|
|
local entity = self.root.skillAniGridEntities[index]
|
|
if entity then
|
|
entity:setSkilId(info.skillId)
|
|
local pos = ModuleManager.BattleManager:getPosInfo(info.posId)
|
|
local cell = entity:getCell()
|
|
if cell then
|
|
cell:refresh(entity)
|
|
local obj = cell:getBaseObject()
|
|
self.cacheSkillAniSeq:InsertCallback(0, function()
|
|
obj:setAnchoredPositionX(DEFAULT_X)
|
|
end)
|
|
self.cacheSkillAniSeq:InsertCallback(0.5 + 0.5 * (index - 1), function()
|
|
obj:setAnchoredPosition(CACHE_SKILL_POS_1.x, CACHE_SKILL_POS_1. y)
|
|
end)
|
|
|
|
self.cacheSkillAniSeq:Insert(0.5 + 0.5 * (index - 1) + 0.02, obj:getTransform():DOAnchorPos(CACHE_SKILL_POS_2, 0.3))
|
|
end
|
|
end
|
|
end
|
|
self.cacheSkillAniSeq:Append(self.boardCacheBox:getTransform():DOAnchorPosX(w, 0.5))
|
|
|
|
for index, info in ipairs(skillInfo) do
|
|
local entity = self.root.skillAniGridEntities[index]
|
|
if entity then
|
|
local pos = ModuleManager.BattleManager:getPosInfo(info.posId)
|
|
local cell = entity:getCell()
|
|
if cell then
|
|
local obj = cell:getBaseObject()
|
|
if index == 1 then
|
|
self.cacheSkillAniSeq:Append(obj:getTransform():DOAnchorPos(pos, 0.7))
|
|
else
|
|
self.cacheSkillAniSeq:Join(obj:getTransform():DOAnchorPos(pos, 0.7))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
self.cacheSkillAniSeq:AppendCallback(function()
|
|
for index, info in ipairs(skillInfo) do
|
|
if self.battleController then
|
|
self.battleController:setGridSkillId(info.posId, info.skillId)
|
|
end
|
|
end
|
|
self.boardCacheNode:setVisible(false)
|
|
self:enableUITouch()
|
|
if callback then
|
|
callback()
|
|
end
|
|
end)
|
|
end
|
|
|
|
function BattleUI:showMask(show)
|
|
if not self.boardMask then
|
|
return
|
|
end
|
|
self.boardMask:setVisible(show)
|
|
end
|
|
|
|
function BattleUI:getElementSkillPos(elementType)
|
|
if not self.skillPoss then
|
|
self.skillPoss = {}
|
|
end
|
|
|
|
if not self.skillPoss[elementType] then
|
|
local cell = self.skillNodeCells[elementType]
|
|
if not cell then
|
|
self.skillPoss[elementType] = BF.Vector2(0, 0)
|
|
else
|
|
local targetPos = cell:getBaseObject():getTransform().position
|
|
local sPoint = UIManager:getUICameraComponent():WorldToScreenPoint(targetPos)
|
|
targetPos = CS.BF.Utils.RectTransformScreenPointToLocalPointInRectangle(self.boardNode:getTransform(), sPoint.x, sPoint.y, UIManager:getUICameraComponent())
|
|
self.skillPoss[elementType] = targetPos
|
|
end
|
|
end
|
|
|
|
return self.skillPoss[elementType]
|
|
end
|
|
|
|
function BattleUI:refreshLv()
|
|
local uiMap = self.root:genAllChildren()
|
|
if not self.lvSlider then
|
|
self.lvSlider = uiMap["battle_ui.bg_2.lv_node.slider"]:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER)
|
|
self.lvDesc = uiMap["battle_ui.bg_2.lv_node.icon.lv_desc"]
|
|
end
|
|
local curExp = DataManager.BattleData:getBattleExp()
|
|
local curNeedExp = DataManager.BattleData:getBattleNeedExp()
|
|
self.lvSlider.value = curExp / curNeedExp
|
|
local lv = DataManager.BattleData:getBattleLv()
|
|
self.lvDesc:setText(lv)
|
|
local sfx = uiMap["battle_ui.bg_2.lv_node.icon.vfx_ui_battle_progress_light_b01"]
|
|
if not self.lastLv then
|
|
sfx:setActive(true)
|
|
sfx:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_EFFECT_HELPER):SetSortingOrder(self:getUIOrder(), GConst.UI_EFFECT_ORDER.LEVEL1)
|
|
sfx:setActive(false)
|
|
elseif self.lastLv ~= lv then
|
|
sfx:setActive(true)
|
|
sfx:play()
|
|
end
|
|
self.lastLv = lv
|
|
end
|
|
|
|
function BattleUI:refreshWave(wave)
|
|
local uiMap = self.root:genAllChildren()
|
|
local icon = uiMap["battle_ui.top_node.wave_icon"]
|
|
local desc = uiMap["battle_ui.top_node.wave_desc"]
|
|
desc:setText(wave)
|
|
GFunc.centerImgAndTx(icon, desc, 10)
|
|
end
|
|
|
|
function BattleUI:getSfxLine(index, func)
|
|
self.hidingAllSfxLine = false
|
|
|
|
if not self.root.lineSfxObjs then
|
|
self.root.lineSfxObjs = {}
|
|
end
|
|
if self.root.lineSfxObjs[index] then
|
|
if self.root.lineSfxObjs[index].obj and func then
|
|
local obj = self.root.lineSfxObjs[index].obj
|
|
obj:setActive(true)
|
|
func(obj)
|
|
end
|
|
else
|
|
self.root.lineSfxObjs[index] = {
|
|
isLoaded = true
|
|
}
|
|
EffectManager:loadUIEffectAsync(GConst.BattleConst.LINE_SFX, self, self.gridNode, 11, function(obj)
|
|
self.root.lineSfxObjs[index].obj = obj
|
|
if self.hidingAllSfxLine then
|
|
obj:setActive(false)
|
|
else
|
|
if func then
|
|
func(obj)
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
|
|
function BattleUI:hideAllSfxLine()
|
|
self.hidingAllSfxLine = true
|
|
if not self.root.lineSfxObjs then
|
|
return
|
|
end
|
|
for inde, info in pairs(self.root.lineSfxObjs) do
|
|
if info.obj then
|
|
info.obj:setActive(false)
|
|
end
|
|
end
|
|
end
|
|
|
|
function BattleUI:getSfxGridBreak(breakSfxPath, index, func)
|
|
if not breakSfxPath then
|
|
return
|
|
end
|
|
|
|
self.hidingAllSfxGridBreak = false
|
|
|
|
if not self.root.gridBreakSfxObjs then
|
|
self.root.gridBreakSfxObjs = {}
|
|
end
|
|
if not self.root.gridBreakSfxObjs[breakSfxPath] then
|
|
self.root.gridBreakSfxObjs[breakSfxPath] = {}
|
|
end
|
|
if self.root.gridBreakSfxObjs[breakSfxPath][index] then
|
|
if self.root.gridBreakSfxObjs[breakSfxPath][index].obj and func then
|
|
local obj = self.root.gridBreakSfxObjs[breakSfxPath][index].obj
|
|
obj:setActive(true)
|
|
func(obj)
|
|
end
|
|
else
|
|
self.root.gridBreakSfxObjs[breakSfxPath][index] = {
|
|
isLoaded = true
|
|
}
|
|
EffectManager:loadUIEffectAsync(breakSfxPath, self, self.gridNode, GConst.UI_EFFECT_ORDER.LEVEL1, function(obj)
|
|
self.root.gridBreakSfxObjs[breakSfxPath][index].obj = obj
|
|
if self.hidingAllSfxGridBreak then
|
|
obj:setActive(false)
|
|
else
|
|
if func then
|
|
func(obj)
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
|
|
function BattleUI:hideAllSfxGridBreak()
|
|
self.hidingAllSfxLine = false
|
|
if not self.root.gridBreakSfxObjs then
|
|
return
|
|
end
|
|
for breakSfxPath, map in pairs(self.root.gridBreakSfxObjs) do
|
|
for index, info in pairs(map) do
|
|
if info.obj then
|
|
info.obj:setActive(false)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function BattleUI:getSfxSmoke(index, func)
|
|
self.hidingAllSfxSmoke = false
|
|
|
|
if not self.root.smokeSfxObjs then
|
|
self.root.smokeSfxObjs = {}
|
|
end
|
|
if self.root.smokeSfxObjs[index] then
|
|
if self.root.smokeSfxObjs[index].obj and func then
|
|
local obj = self.root.smokeSfxObjs[index].obj
|
|
obj:setActive(true)
|
|
func(obj)
|
|
end
|
|
else
|
|
self.root.smokeSfxObjs[index] = {
|
|
isLoaded = true
|
|
}
|
|
EffectManager:loadUIEffectAsync(GConst.BattleConst.LINK_SMOKE, self, self.gridNode, 11, function(obj)
|
|
self.root.smokeSfxObjs[index].obj = obj
|
|
obj:setLocalScale(1.5, 1.5, 1.5)
|
|
if self.hidingAllSfxSmoke then
|
|
obj:setActive(false)
|
|
else
|
|
if func then
|
|
func(obj)
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
end
|
|
|
|
function BattleUI:hideAllSfxSmoke()
|
|
self.hidingAllSfxSmoke = true
|
|
if not self.root.smokeSfxObjs then
|
|
return
|
|
end
|
|
for inde, info in pairs(self.root.smokeSfxObjs) do
|
|
if info.obj then
|
|
info.obj:setActive(false)
|
|
end
|
|
end
|
|
end
|
|
|
|
function BattleUI:initSkillLineSfx()
|
|
local uiMap = self.root:genAllChildren()
|
|
if not self.skillLineSfxs then
|
|
self.skillLineSfxs = {}
|
|
self.skillLineSfxs[13] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b01_2_1h"]
|
|
self.skillLineSfxs[11] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b01_2_1v"]
|
|
self.skillLineSfxs[15] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b01_2_1l"]
|
|
self.skillLineSfxs[17] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b01_2_1r"]
|
|
|
|
self.skillLineSfxs[23] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b01_1_2h"]
|
|
self.skillLineSfxs[21] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b01_1_2v"]
|
|
self.skillLineSfxs[25] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b01_1_2l"]
|
|
self.skillLineSfxs[27] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b01_1_2r"]
|
|
|
|
self.skillLineSfxs[33] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b01_3h"]
|
|
self.skillLineSfxs[31] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b01_3v"]
|
|
self.skillLineSfxs[35] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b01_3l"]
|
|
self.skillLineSfxs[37] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b01_3r"]
|
|
end
|
|
|
|
if not self.skillLightSfxs then
|
|
self.skillLightSfxs = {}
|
|
self.skillLightSfxs.point = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b03"]
|
|
self.skillLightSfxs[11] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b04_1"]
|
|
self.skillLightSfxs[12] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b04_2"]
|
|
self.skillLightSfxs[13] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b04_3"]
|
|
self.skillLightSfxs[14] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b04_4"]
|
|
self.skillLightSfxs[15] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b04_5"]
|
|
|
|
self.skillLightSfxs[21] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b05_1"]
|
|
self.skillLightSfxs[22] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b05_2"]
|
|
self.skillLightSfxs[23] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b05_3"]
|
|
self.skillLightSfxs[24] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b05_4"]
|
|
self.skillLightSfxs[25] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b05_5"]
|
|
end
|
|
|
|
for _, obj in pairs(self.skillLineSfxs) do
|
|
obj:setActive(true)
|
|
obj:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_EFFECT_HELPER):SetSortingOrder(self:getUIOrder(), GConst.UI_EFFECT_ORDER.LEVEL2)
|
|
obj:setActive(false)
|
|
end
|
|
|
|
for _, obj in pairs(self.skillLightSfxs) do
|
|
obj:setActive(true)
|
|
obj:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_EFFECT_HELPER):SetSortingOrder(self:getUIOrder(), GConst.UI_EFFECT_ORDER.LEVEL2)
|
|
obj:setActive(false)
|
|
end
|
|
end
|
|
|
|
function BattleUI:playSkillLineSfx(posId, boradRangeList, randomPosList)
|
|
if not boradRangeList or not boradRangeList[1] or not self.skillLineSfxs then
|
|
return
|
|
end
|
|
|
|
local directionAndRange = {}
|
|
for _, info in ipairs(boradRangeList) do
|
|
if info.type == GConst.BattleConst.BOARD_RANGE_TYPE.RANDOM then
|
|
directionAndRange[GConst.BattleConst.BOARD_RANGE_TYPE.RANDOM] = info.range
|
|
elseif info.type == GConst.BattleConst.BOARD_RANGE_TYPE.UP or
|
|
info.type == GConst.BattleConst.BOARD_RANGE_TYPE.DOWN then
|
|
directionAndRange[GConst.BattleConst.BOARD_RANGE_TYPE.UP] = info.range
|
|
elseif info.type == GConst.BattleConst.BOARD_RANGE_TYPE.LEFT or
|
|
info.type == GConst.BattleConst.BOARD_RANGE_TYPE.RIGHT then
|
|
directionAndRange[GConst.BattleConst.BOARD_RANGE_TYPE.LEFT] = info.range
|
|
elseif info.type == GConst.BattleConst.BOARD_RANGE_TYPE.LEFT_UP or
|
|
info.type == GConst.BattleConst.BOARD_RANGE_TYPE.LEFT_DOWN then
|
|
directionAndRange[GConst.BattleConst.BOARD_RANGE_TYPE.LEFT_UP] = info.range
|
|
elseif info.type == GConst.BattleConst.BOARD_RANGE_TYPE.RIGHT_UP or
|
|
info.type == GConst.BattleConst.BOARD_RANGE_TYPE.RIGHT_DOWN then
|
|
directionAndRange[GConst.BattleConst.BOARD_RANGE_TYPE.RIGHT_UP] = info.range
|
|
end
|
|
end
|
|
|
|
local pos = ModuleManager.BattleManager:getPosInfo(posId)
|
|
for dir, range in pairs(directionAndRange) do
|
|
local index = range * 10 + dir
|
|
local obj = self.skillLineSfxs[index]
|
|
if obj then
|
|
obj:setAnchoredPosition(pos.x, pos.y)
|
|
obj:setActive(true)
|
|
obj:play()
|
|
end
|
|
end
|
|
|
|
if randomPosList then
|
|
local count = math.min(#randomPosList, 5) -- 特效最多5个
|
|
self.skillLightSfxs.point:setAnchoredPosition(pos.x, pos.y)
|
|
self.skillLightSfxs.point:setActive(true)
|
|
self.skillLightSfxs.point:play()
|
|
for i = 1, count do
|
|
local tartgetPos = randomPosList[i]
|
|
tartgetPos = ModuleManager.BattleManager:getPosInfo(tartgetPos)
|
|
local obj = self.skillLightSfxs[20 + i]
|
|
if obj then
|
|
obj:setAnchoredPosition(tartgetPos.x, tartgetPos.y)
|
|
obj:setActive(true)
|
|
obj:play()
|
|
end
|
|
|
|
obj = self.skillLightSfxs[10 + i]
|
|
local yOffset = tartgetPos.y - pos.y
|
|
local xOffset = tartgetPos.x - pos.x
|
|
local height = math.sqrt(xOffset * xOffset + yOffset * yOffset)
|
|
if obj then
|
|
obj:setAnchoredPosition(pos.x, pos.y)
|
|
obj:setLocalScaleX(0.3 * height / 94)
|
|
obj:setEulerAngles(0, 0, - math.deg(math.atan(xOffset, yOffset)) + 90)
|
|
obj:setActive(true)
|
|
obj:play()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function BattleUI:playChangeElementSfx(posId, index)
|
|
if not self.root.changeElementSfxs then
|
|
self.root.changeElementSfxs = {}
|
|
end
|
|
|
|
local pos = ModuleManager.BattleManager:getPosInfo(posId)
|
|
local info = self.root.changeElementSfxs[index]
|
|
if info then
|
|
local obj = info.obj
|
|
if obj then
|
|
obj:setAnchoredPosition(pos.x, pos.y)
|
|
obj:setActive(true)
|
|
obj:play()
|
|
end
|
|
else
|
|
self.root.changeElementSfxs[index] = {
|
|
isLoaded = true
|
|
}
|
|
EffectManager:loadUIEffectAsync(GConst.BattleConst.CHANGE_ELEMENT_SFX, self, self.gridNode, GConst.UI_EFFECT_ORDER.LEVEL2, function(obj)
|
|
self.root.changeElementSfxs[index].obj = obj
|
|
obj:setAnchoredPosition(pos.x, pos.y)
|
|
obj:play()
|
|
end)
|
|
end
|
|
end
|
|
|
|
function BattleUI:initTutorialNode()
|
|
local uiMap = self.root:genAllChildren()
|
|
self.tutorialNode = uiMap["battle_ui.tutorial_node"]
|
|
self.tutorialFinger = uiMap["battle_ui.tutorial_node.board_node.finger"]
|
|
self:showTutorialFinger()
|
|
end
|
|
|
|
function BattleUI:initUISfxs()
|
|
if self.root.gridBreakSfxObjs then
|
|
for breakSfxPath, map in pairs(self.root.gridBreakSfxObjs) do
|
|
for index, info in pairs(map) do
|
|
if info.obj then
|
|
info.obj:setActive(true)
|
|
info.obj:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_EFFECT_HELPER):SetSortingOrder(self:getUIOrder(), GConst.UI_EFFECT_ORDER.LEVEL1)
|
|
info.obj:setActive(false)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if self.root.lineSfxObjs then
|
|
for index, info in pairs(self.root.lineSfxObjs) do
|
|
if info.obj then
|
|
info.obj:setActive(true)
|
|
info.obj:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_EFFECT_HELPER):SetSortingOrder(self:getUIOrder(), 11)
|
|
info.obj:setActive(false)
|
|
end
|
|
end
|
|
end
|
|
|
|
if self.root.smokeSfxObjs then
|
|
for index, info in pairs(self.root.smokeSfxObjs) do
|
|
if info.obj then
|
|
info.obj:setActive(true)
|
|
info.obj:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_EFFECT_HELPER):SetSortingOrder(self:getUIOrder(), 11)
|
|
info.obj:setActive(false)
|
|
end
|
|
end
|
|
end
|
|
|
|
if self.root.changeElementSfxs then
|
|
for index, info in pairs(self.root.changeElementSfxs) do
|
|
if info.obj then
|
|
info.obj:setActive(true)
|
|
info.obj:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_EFFECT_HELPER):SetSortingOrder(self:getUIOrder(), GConst.UI_EFFECT_ORDER.LEVEL2)
|
|
info.obj:setActive(false)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function BattleUI:showTutorialFinger(posIdList)
|
|
if self.showTutorialFingerSeq then
|
|
self.showTutorialFingerSeq:Kill()
|
|
self.showTutorialFingerSeq = nil
|
|
end
|
|
|
|
if not self.tutorialFinger then
|
|
return
|
|
end
|
|
|
|
local show = false
|
|
if posIdList and posIdList[1] then
|
|
show = true
|
|
end
|
|
self.tutorialNode:setVisible(show)
|
|
if not show then
|
|
return
|
|
end
|
|
|
|
self.showTutorialFingerSeq = self.root:createBindTweenSequence()
|
|
local path = {}
|
|
local count = 0
|
|
for index, posId in ipairs(posIdList) do
|
|
local curPos = ModuleManager.BattleManager:getPosInfo(posId)
|
|
if index == 1 then
|
|
self.tutorialFinger:setAnchoredPosition(curPos.x, curPos.y)
|
|
else
|
|
table.insert(path, curPos)
|
|
count = count + 1
|
|
end
|
|
end
|
|
|
|
self.showTutorialFingerSeq:Append(self.tutorialFinger:getTransform():DOLocalPath(path, count * 0.7):SetEase(CS.DG.Tweening.Ease.Linear))
|
|
for index, posId in ipairs(posIdList) do
|
|
local time = (index - 1.4) * 0.7
|
|
if time < 0 then
|
|
time = 0
|
|
end
|
|
self.showTutorialFingerSeq:InsertCallback(time, function()
|
|
local eventType
|
|
if index == 1 then
|
|
eventType = GConst.ELIMINATION_TOUCH_EVENT.DOWN
|
|
else
|
|
eventType = GConst.ELIMINATION_TOUCH_EVENT.ENTER
|
|
end
|
|
self.battleController:onTouchEvent(eventType, posId, true)
|
|
end)
|
|
end
|
|
self.showTutorialFingerSeq:AppendCallback(function()
|
|
self.battleController:clearGridSequence()
|
|
self.tutorialFinger:setAnchoredPositionX(DEFAULT_X)
|
|
self:showBoardMask(nil)
|
|
end)
|
|
self.showTutorialFingerSeq:AppendInterval(1)
|
|
self.showTutorialFingerSeq:SetLoops(-1)
|
|
end
|
|
|
|
function BattleUI:initSelectSkillNode()
|
|
if not self.selectSkillComp then
|
|
local uiMap = self.root:genAllChildren()
|
|
local obj = uiMap["battle_ui.bg_2.battle_select_skill_comp"]
|
|
obj:initPrefabHelper()
|
|
obj:genAllChildren()
|
|
self.selectSkillComp = obj:addLuaComponent(BATTLE_SELECT_SKILL_COMP)
|
|
self.selectSkillComp:hide()
|
|
end
|
|
end
|
|
|
|
function BattleUI:showSelectSkillComp(skillList, isCommon)
|
|
if not self.selectSkillComp then
|
|
return
|
|
end
|
|
self.selectSkillComp:refresh(skillList, isCommon)
|
|
end
|
|
|
|
function BattleUI:hideAllBoardSfxs()
|
|
if self.generateSkillSfxs then
|
|
for _, obj in pairs(self.generateSkillSfxs) do
|
|
obj:setActive(false)
|
|
end
|
|
end
|
|
|
|
if self.skillLineSfxs then
|
|
for _, obj in pairs(self.skillLineSfxs) do
|
|
obj:setActive(false)
|
|
end
|
|
end
|
|
|
|
if self.skillLightSfxs then
|
|
for _, obj in pairs(self.skillLightSfxs) do
|
|
obj:setActive(false)
|
|
end
|
|
end
|
|
|
|
if self.root.gridBreakSfxObjs then
|
|
for breakSfxPath, map in pairs(self.root.gridBreakSfxObjs) do
|
|
for index, info in pairs(map) do
|
|
if info.obj then
|
|
info.obj:setActive(false)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
if self.root.lineSfxObjs then
|
|
for index, info in pairs(self.root.lineSfxObjs) do
|
|
if info.obj then
|
|
info.obj:setActive(false)
|
|
end
|
|
end
|
|
end
|
|
|
|
if self.root.smokeSfxObjs then
|
|
for index, info in pairs(self.root.smokeSfxObjs) do
|
|
if info.obj then
|
|
info.obj:setActive(false)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function BattleUI:initCommonSkillDescTips()
|
|
local uiMap = self.root:genAllChildren()
|
|
self.skillDescTipsNode = uiMap["battle_ui.bg_2.lv_node.skill_desc_tips"]
|
|
self.skillDescTips = uiMap["battle_ui.bg_2.lv_node.skill_desc_tips.desc"]
|
|
self.skillDescTipsNode:setVisible(false)
|
|
end
|
|
|
|
function BattleUI:showCommonSkillTips(skillId)
|
|
-- 需要合并显示
|
|
local rogueCfg = ConfigManager:getConfig("skill_rogue")
|
|
local curCfg = rogueCfg[skillId]
|
|
if not curCfg or curCfg.universal ~= 1 then
|
|
return
|
|
end
|
|
|
|
local value = 0
|
|
local selectSkillMap = DataManager.BattleData:getSelectSkillMap()
|
|
if selectSkillMap[skillId] then
|
|
value = selectSkillMap[skillId].value
|
|
end
|
|
|
|
if curCfg.toast_mark then
|
|
for id, info in pairs(rogueCfg) do
|
|
if selectSkillMap[id] and id ~= skillId and info.toast_mark == curCfg.toast_mark then
|
|
value = value + selectSkillMap[id].value
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
if self.showCommonSkillTipsSid then
|
|
self:unscheduleGlobal(self.showCommonSkillTipsSid)
|
|
self.showCommonSkillTipsSid = nil
|
|
end
|
|
self.skillDescTipsNode:setVisible(true)
|
|
self.skillDescTips:setText(ModuleManager.HeroManager:getSkillRogueDesc(skillId, value))
|
|
self.showCommonSkillTipsSid = self:performWithDelayGlobal(function()
|
|
self.skillDescTipsNode:setVisible(false)
|
|
end, 1.5)
|
|
end
|
|
|
|
function BattleUI:initBossEnterAni()
|
|
local uiMap = self.root:genAllChildren()
|
|
self.bossEnterNode = uiMap["battle_ui.bg_2.boss_enter_node"]
|
|
self.bossEnterImg = uiMap["battle_ui.bg_2.boss_enter_node.img"]
|
|
self.bossName = uiMap["battle_ui.bg_2.boss_enter_node.boss_name"]
|
|
self.bossEnterNodeCanvasGroup = self.bossEnterNode:getComponent(GConst.TYPEOF_UNITY_CLASS.CANVAS_GROUP)
|
|
self.bossEnterNode:setVisible(false)
|
|
end
|
|
|
|
function BattleUI:showBossEnterAni(bornTime, bossName, monsterComp, callback)
|
|
if not self.bossEnterNode then
|
|
if callback then
|
|
callback()
|
|
end
|
|
return
|
|
end
|
|
self.bossEnterNode:setVisible(true)
|
|
self.bossEnterImg:setVisible(false)
|
|
self.bossName:setText(GConst.EMPTY_STRING)
|
|
self.bossEnterNodeCanvasGroup.alpha = 0
|
|
monsterComp:getBaseObject():setLocalPosition(DEFAULT_X, 0, 0)
|
|
if self.bossEnterAniSeq then
|
|
self.bossEnterAniSeq:Kill()
|
|
self.bossEnterAniSeq = nil
|
|
end
|
|
self.bossEnterAniSeq = self.root:createBindTweenSequence()
|
|
self.bossEnterAniSeq:Append(self.bossEnterNodeCanvasGroup:DOFade(1, 0.2))
|
|
self.bossEnterAniSeq:AppendCallback(function()
|
|
self.bossEnterImg:setVisible(true)
|
|
monsterComp:initPosition()
|
|
monsterComp:getBaseObject():setParent(self.maxLayerNode, false)
|
|
if callback then
|
|
callback()
|
|
end
|
|
end)
|
|
self.bossEnterAniSeq:AppendInterval(bornTime)
|
|
self.bossEnterAniSeq:AppendCallback(function()
|
|
self.bossName:setText(bossName)
|
|
end)
|
|
self.bossEnterAniSeq:AppendInterval(0.5)
|
|
self.bossEnterAniSeq:Append(self.bossEnterNodeCanvasGroup:DOFade(0, 0.2))
|
|
self.bossEnterAniSeq:AppendCallback(function()
|
|
monsterComp:getBaseObject():setParent(self:getBattleNode(), false)
|
|
self.bossEnterNode:setVisible(false)
|
|
end)
|
|
end
|
|
|
|
function BattleUI:clear()
|
|
if self.alreadyClear then
|
|
return
|
|
end
|
|
self.alreadyClear = true
|
|
if self.battleNode then
|
|
self.battleNode:removeAllChildren()
|
|
end
|
|
if self.fxNode then
|
|
self.fxNode:removeAllChildren()
|
|
end
|
|
if self.battleNumberNode then
|
|
self.battleNumberNode:removeAllChildren()
|
|
end
|
|
if self.hpProgressYellowLeftSid then
|
|
self:unscheduleGlobal(self.hpProgressYellowLeftSid)
|
|
self.hpProgressYellowLeftSid = nil
|
|
end
|
|
if self.hpProgressYellowRightSid then
|
|
self:unscheduleGlobal(self.hpProgressYellowRightSid)
|
|
self.hpProgressYellowRightSid = nil
|
|
end
|
|
if self.hpProgressLeftTween then
|
|
self.hpProgressLeftTween:Kill()
|
|
self.hpProgressLeftTween = nil
|
|
end
|
|
if self.hpProgressYellowLeftTween then
|
|
self.hpProgressYellowLeftTween:Kill()
|
|
self.hpProgressYellowLeftTween = nil
|
|
end
|
|
if self.hpProgressRightTween then
|
|
self.hpProgressRightTween:Kill()
|
|
self.hpProgressRightTween = nil
|
|
end
|
|
if self.hpProgressYellowRightTween then
|
|
self.hpProgressYellowRightTween:Kill()
|
|
self.hpProgressYellowRightTween = nil
|
|
end
|
|
if self.bgMoveTween then
|
|
self.bgMoveTween:Kill()
|
|
self.bgMoveTween = nil
|
|
end
|
|
if self.shakeTween then
|
|
self.shakeTween:Kill()
|
|
self.shakeTween = nil
|
|
end
|
|
|
|
if self.showTutorialFingerSeq then
|
|
self.showTutorialFingerSeq:Kill()
|
|
self.showTutorialFingerSeq = nil
|
|
end
|
|
|
|
if self.switchBoardSeq then
|
|
self.switchBoardSeq:Kill()
|
|
self.switchBoardSeq = nil
|
|
end
|
|
|
|
if self.eliminationAniSeq then
|
|
self.eliminationAniSeq:Kill()
|
|
self.eliminationAniSeq = nil
|
|
end
|
|
|
|
if self.generateSkillAniSeq then
|
|
self.generateSkillAniSeq:Kill()
|
|
self.generateSkillAniSeq = nil
|
|
end
|
|
|
|
if self.gotOneSkillAniSeq then
|
|
self.gotOneSkillAniSeq:Kill()
|
|
self.gotOneSkillAniSeq = nil
|
|
end
|
|
|
|
if self.shuffleBoardSeq then
|
|
self.shuffleBoardSeq:Kill()
|
|
self.shuffleBoardSeq = nil
|
|
end
|
|
|
|
if self.gridCells then
|
|
for _, cell in pairs(self.gridCells) do
|
|
if cell.fallSeq then
|
|
cell.fallSeq:Kill()
|
|
cell.fallSeq = nil
|
|
end
|
|
end
|
|
end
|
|
|
|
if self.cacheSkillAniSeq then
|
|
self.cacheSkillAniSeq:Kill()
|
|
self.cacheSkillAniSeq = nil
|
|
end
|
|
|
|
if self.monsterSkillAniSeq then
|
|
self.monsterSkillAniSeq:Kill()
|
|
self.monsterSkillAniSeq = nil
|
|
end
|
|
|
|
if self.showCommonSkillTipsSid then
|
|
self:unscheduleGlobal(self.showCommonSkillTipsSid)
|
|
self.showCommonSkillTipsSid = nil
|
|
end
|
|
|
|
if self.autoCloseBuffSid then
|
|
self:unscheduleGlobal(self.autoCloseBuffSid)
|
|
self.autoCloseBuffSid = nil
|
|
end
|
|
|
|
if self.bossEnterAniSeq then
|
|
self.bossEnterAniSeq:Kill()
|
|
self.bossEnterAniSeq = nil
|
|
end
|
|
end
|
|
|
|
return BattleUI |