棋盘消除特效

This commit is contained in:
xiekaidong 2023-04-25 11:50:00 +08:00
parent 09e85e9dba
commit 32c6f2824d
2 changed files with 161 additions and 1 deletions

View File

@ -763,6 +763,8 @@ function BattleController:onLinkOver()
local boomGridIds = {}
local lineCount = 0
local skillPosId
local randomPosList
for _, info in ipairs(sequence) do
if not eliminationPosIds[info.posId] then
local entity = self.battleData:getGridEntity(info.posId)
@ -771,6 +773,8 @@ function BattleController:onLinkOver()
elementTypeMap[elementType] = (elementTypeMap[elementType] or 0) + 1
linkElementType = elementType
lineCount = lineCount + 1
else
skillPosId = info.posId
end
boomGridIds[info.posId] = BattleConst.AROUND_BOOM_TYPE.LINE
@ -787,7 +791,7 @@ function BattleController:onLinkOver()
end
end
for posId, _ in pairs(self.battleData:getSkillInfluenceGrids()) do
for posId, info in pairs(self.battleData:getSkillInfluenceGrids()) do
local entity = self.battleData:getGridEntity(posId)
if not entity:getIsIdle() then
if entity:isEmptyIdle() then
@ -800,6 +804,13 @@ function BattleController:onLinkOver()
elementTypeMap[elementType] = (elementTypeMap[elementType] or 0) + 1
end
end
if info.direction == BattleConst.BOARD_RANGE_TYPE.RANDOM then
if not randomPosList then
randomPosList = {}
end
table.insert(randomPosList, posId)
end
if not entity:getSkillId() then
local elementType = entity:getElementType()
if not influenceElementType then
@ -858,6 +869,11 @@ function BattleController:onLinkOver()
end
end
if skillPosId then
local rangeList = skillEntity:getBoardRange()
self.battleUI:playSkillLineSfx(skillPosId, rangeList, randomPosList)
end
self.battleData:addSkillEnergy(elementTypeMap)
self.battleData:clearGridSequence()
@ -1549,6 +1565,7 @@ function BattleController:changeElementType(count, elementType)
local entity = table.remove(list, math.random(1, #list))
if entity then
entity:setElementType(elementType)
self.battleUI:playChangeElementSfx(entity:getPosId(), i)
end
end
end

View File

@ -57,6 +57,7 @@ function BattleUI:_display()
self:initUISfxs()
self:initSkillSelectCells()
self:hideAllSfxSmoke()
self:initSkillLineSfx()
end
function BattleUI:_addListeners()
@ -1274,6 +1275,148 @@ function BattleUI:hideAllSfxSmoke()
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_1h"]
self.skillLineSfxs[11] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b01_1v"]
self.skillLineSfxs[15] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b01_1l"]
self.skillLineSfxs[17] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b01_1r"]
self.skillLineSfxs[23] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b01_2h"]
self.skillLineSfxs[21] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b01_2v"]
self.skillLineSfxs[25] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b01_2l"]
self.skillLineSfxs[27] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b01_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
if not self.changeElementSfxs then
self.changeElementSfxs = {}
self.changeElementSfxs[1] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b02_1"]
self.changeElementSfxs[2] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b02_2"]
self.changeElementSfxs[3] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b02_3"]
self.changeElementSfxs[4] = uiMap["battle_ui.bg_2.board_node.grid_node.sfx_skill_b02_4"]
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
for _, obj in pairs(self.changeElementSfxs) 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.changeElementSfxs then
return
end
local pos = ModuleManager.BattleManager:getPosInfo(posId)
local obj = self.changeElementSfxs[index]
if obj then
obj:setAnchoredPosition(pos.x, pos.y)
obj:setActive(true)
obj:play()
end
end
function BattleUI:initTutorialNode()
local uiMap = self.root:genAllChildren()
self.tutorialNode = uiMap["battle_ui.tutorial_node"]