护盾伤害
This commit is contained in:
parent
fd3f4df034
commit
802a3670e2
@ -28,6 +28,7 @@ BattleConst.MOVE_SPEED_ENTER = 500 -- 战斗单位入场时的移动速
|
|||||||
BattleConst.HURT_STATE_CRIT = 1 -- 暴击
|
BattleConst.HURT_STATE_CRIT = 1 -- 暴击
|
||||||
BattleConst.EFFECT_COLOR_RED = 1
|
BattleConst.EFFECT_COLOR_RED = 1
|
||||||
BattleConst.EFFECT_COLOR_GREEN = 2
|
BattleConst.EFFECT_COLOR_GREEN = 2
|
||||||
|
BattleConst.EFFECT_COLOR_BLUE = 3
|
||||||
BattleConst.EFFECT_TYPE_MOVE_L = 1
|
BattleConst.EFFECT_TYPE_MOVE_L = 1
|
||||||
BattleConst.EFFECT_TYPE_MOVE_R = 2
|
BattleConst.EFFECT_TYPE_MOVE_R = 2
|
||||||
BattleConst.EFFECT_TYPE_CRIT = 3
|
BattleConst.EFFECT_TYPE_CRIT = 3
|
||||||
@ -40,6 +41,7 @@ BattleConst.UNLOCK_SKILL_ROGUE_TYPE = 6
|
|||||||
BattleConst.RECOVER_HP_COUNT = 3
|
BattleConst.RECOVER_HP_COUNT = 3
|
||||||
BattleConst.RECOVER_HP_INTERVAL = 0.2
|
BattleConst.RECOVER_HP_INTERVAL = 0.2
|
||||||
BattleConst.RECOVER_HP_PERCENT = 333
|
BattleConst.RECOVER_HP_PERCENT = 333
|
||||||
|
BattleConst.EFFECT_NUMBER_DELAY = 0.2
|
||||||
|
|
||||||
BattleConst.BATTLE_ROUND_STEP = {
|
BattleConst.BATTLE_ROUND_STEP = {
|
||||||
WAIT_BEGIN = 0, -- 等待开始
|
WAIT_BEGIN = 0, -- 等待开始
|
||||||
|
|||||||
@ -1151,20 +1151,33 @@ function BattleUnitComp:takeDamageOrCure(atker, num, effectType, effectStatus)
|
|||||||
local hp = self.unitEntity:getHp()
|
local hp = self.unitEntity:getHp()
|
||||||
local x, y = self.baseObject:fastGetLocalPosition()
|
local x, y = self.baseObject:fastGetLocalPosition()
|
||||||
if num < 0 then -- 伤害
|
if num < 0 then -- 伤害
|
||||||
|
local delayTime = 0
|
||||||
|
local damage = num
|
||||||
|
if shieldHpDiff < 0 then
|
||||||
|
damage = damage - shieldHpDiff
|
||||||
|
delayTime = BattleConst.EFFECT_NUMBER_DELAY
|
||||||
|
if self.side == BattleConst.SIDE_ATK then
|
||||||
|
self:showEffectNumber(BattleConst.EFFECT_COLOR_BLUE, BattleConst.EFFECT_TYPE_MOVE_L, shieldHpDiff, x, y, 0)
|
||||||
|
else
|
||||||
|
self:showEffectNumber(BattleConst.EFFECT_COLOR_BLUE, BattleConst.EFFECT_TYPE_MOVE_R, shieldHpDiff, x, y, 0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if damage < 0 then
|
||||||
if effectStatus == HURT_STATE_CRIT then
|
if effectStatus == HURT_STATE_CRIT then
|
||||||
self:showEffectNumber(BattleConst.EFFECT_COLOR_RED, BattleConst.EFFECT_TYPE_CRIT, "c" .. num, x, y)
|
self:showEffectNumber(BattleConst.EFFECT_COLOR_RED, BattleConst.EFFECT_TYPE_CRIT, "c" .. damage, x, y, delayTime)
|
||||||
else
|
else
|
||||||
if self.side == BattleConst.SIDE_ATK then
|
if self.side == BattleConst.SIDE_ATK then
|
||||||
self:showEffectNumber(BattleConst.EFFECT_COLOR_RED, BattleConst.EFFECT_TYPE_MOVE_L, num, x, y)
|
self:showEffectNumber(BattleConst.EFFECT_COLOR_RED, BattleConst.EFFECT_TYPE_MOVE_L, damage, x, y, delayTime)
|
||||||
else
|
else
|
||||||
self:showEffectNumber(BattleConst.EFFECT_COLOR_RED, BattleConst.EFFECT_TYPE_MOVE_R, num, x, y)
|
self:showEffectNumber(BattleConst.EFFECT_COLOR_RED, BattleConst.EFFECT_TYPE_MOVE_R, damage, x, y, delayTime)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if hp > 0 and self.unitEntity:getShieldRebound() then -- 伤害反弹
|
if hp > 0 and self.unitEntity:getShieldRebound() then -- 伤害反弹
|
||||||
atker:takeDamageOrCure(self, num*self.unitEntity:getShieldRebound() // DEFAULT_FACTOR, EFFECT_TYPE.DIRECT, 0)
|
atker:takeDamageOrCure(self, num*self.unitEntity:getShieldRebound() // DEFAULT_FACTOR, EFFECT_TYPE.DIRECT, 0)
|
||||||
end
|
end
|
||||||
elseif num > 0 then -- 治疗
|
elseif num > 0 then -- 治疗
|
||||||
self:showEffectNumber(BattleConst.EFFECT_COLOR_GREEN, BattleConst.EFFECT_TYPE_BUFF, "+" .. num, x, y)
|
self:showEffectNumber(BattleConst.EFFECT_COLOR_GREEN, BattleConst.EFFECT_TYPE_BUFF, "+" .. num, x, y, 0)
|
||||||
end
|
end
|
||||||
local hpPercent = self.unitEntity:getHpPercent()
|
local hpPercent = self.unitEntity:getHpPercent()
|
||||||
self.battleController:refreshHp(self.side, hp, hpPercent)
|
self.battleController:refreshHp(self.side, hp, hpPercent)
|
||||||
@ -1184,9 +1197,9 @@ function BattleUnitComp:takeDamageOrCure(atker, num, effectType, effectStatus)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function BattleUnitComp:showEffectNumber(colorType, effectType, num, x, y)
|
function BattleUnitComp:showEffectNumber(colorType, effectType, num, x, y, delayTime)
|
||||||
local addY = BattleConst.MIN_NODE_HEIGHT[self.unitEntity:getBody()] or BattleConst.MIN_NODE_HEIGHT_DEFAULT
|
local addY = BattleConst.MIN_NODE_HEIGHT[self.unitEntity:getBody()] or BattleConst.MIN_NODE_HEIGHT_DEFAULT
|
||||||
self.battleController:showEffectNumber(colorType, effectType, num, x, y + addY)
|
self.battleController:showEffectNumber(colorType, effectType, num, x, y + addY, delayTime)
|
||||||
end
|
end
|
||||||
|
|
||||||
function BattleUnitComp:playDead(callback)
|
function BattleUnitComp:playDead(callback)
|
||||||
|
|||||||
@ -174,6 +174,8 @@ function BattleController:init(params)
|
|||||||
self.roundStep = BattleConst.BATTLE_ROUND_STEP.WAIT_BEGIN
|
self.roundStep = BattleConst.BATTLE_ROUND_STEP.WAIT_BEGIN
|
||||||
self.effectTexts = {}
|
self.effectTexts = {}
|
||||||
self.instructions = {}
|
self.instructions = {}
|
||||||
|
self.delayEffectTextList = {}
|
||||||
|
self.delayEffectTextCount = 0
|
||||||
self.time = 0
|
self.time = 0
|
||||||
self.battleData:init()
|
self.battleData:init()
|
||||||
BattleScheduler:init()
|
BattleScheduler:init()
|
||||||
@ -250,7 +252,8 @@ function BattleController:prepareFight()
|
|||||||
self.battleUI:setController(self)
|
self.battleUI:setController(self)
|
||||||
self.battleUI:addLoadUICompleteListener(function()
|
self.battleUI:addLoadUICompleteListener(function()
|
||||||
BattleHelper:setEffectTextCache(self.battleUI:getBattleNumberRed(),
|
BattleHelper:setEffectTextCache(self.battleUI:getBattleNumberRed(),
|
||||||
self.battleUI:getBattleNumberGreen())
|
self.battleUI:getBattleNumberGreen(),
|
||||||
|
self.battleUI:getBattleNumberBlue())
|
||||||
self:initAtkUnits(onPreloadFinished)
|
self:initAtkUnits(onPreloadFinished)
|
||||||
self:initDefUnits(onPreloadFinished)
|
self:initDefUnits(onPreloadFinished)
|
||||||
end)
|
end)
|
||||||
@ -1887,6 +1890,7 @@ function BattleController:_tick(dt)
|
|||||||
table.remove(self.effectTexts, i)
|
table.remove(self.effectTexts, i)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
self:checkDelayEffectText(dt)
|
||||||
self:tick(dt)
|
self:tick(dt)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1925,10 +1929,48 @@ function BattleController:endBattleAndExit()
|
|||||||
ModuleManager.BattleManager:exitBattle()
|
ModuleManager.BattleManager:exitBattle()
|
||||||
end
|
end
|
||||||
|
|
||||||
function BattleController:showEffectNumber(colorType, effectType, num, x, y)
|
function BattleController:checkDelayEffectText(dt)
|
||||||
|
if self.delayEffectTextCount <= 0 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
for i = self.delayEffectTextCount, 1, -1 do
|
||||||
|
local delayEffectText = self.delayEffectTextList[i]
|
||||||
|
delayEffectText.time = delayEffectText.time - dt
|
||||||
|
if delayEffectText.time <= 0 then
|
||||||
|
local effectTextComp = BattleHelper:getEffectText(self.battleUI:getNumberNode(), delayEffectText.colorType)
|
||||||
|
effectTextComp:showEffectNumber(delayEffectText.effectType, delayEffectText.num, delayEffectText.x, delayEffectText.y)
|
||||||
|
table.insert(self.effectTexts, effectTextComp)
|
||||||
|
local tailDelayEffectText = self.delayEffectTextList[self.delayEffectTextCount]
|
||||||
|
delayEffectText.colorType = tailDelayEffectText.colorType
|
||||||
|
delayEffectText.effectType = tailDelayEffectText.effectType
|
||||||
|
delayEffectText.num = tailDelayEffectText.num
|
||||||
|
delayEffectText.x = tailDelayEffectText.x
|
||||||
|
delayEffectText.y = tailDelayEffectText.y
|
||||||
|
delayEffectText.time = tailDelayEffectText.time
|
||||||
|
self.delayEffectTextCount = self.delayEffectTextCount - 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function BattleController:showEffectNumber(colorType, effectType, num, x, y, delayTime)
|
||||||
|
if delayTime > 0 then
|
||||||
|
self.delayEffectTextCount = self.delayEffectTextCount + 1
|
||||||
|
local obj = self.delayEffectTextList[self.delayEffectTextCount]
|
||||||
|
if obj == nil then
|
||||||
|
obj = {}
|
||||||
|
self.delayEffectTextList[self.delayEffectTextCount] = obj
|
||||||
|
end
|
||||||
|
obj.colorType = colorType
|
||||||
|
obj.effectType = effectType
|
||||||
|
obj.num = num
|
||||||
|
obj.x = x
|
||||||
|
obj.y = y
|
||||||
|
obj.time = delayTime
|
||||||
|
else
|
||||||
local effectTextComp = BattleHelper:getEffectText(self.battleUI:getNumberNode(), colorType)
|
local effectTextComp = BattleHelper:getEffectText(self.battleUI:getNumberNode(), colorType)
|
||||||
effectTextComp:showEffectNumber(effectType, num, x, y)
|
effectTextComp:showEffectNumber(effectType, num, x, y)
|
||||||
table.insert(self.effectTexts, effectTextComp)
|
table.insert(self.effectTexts, effectTextComp)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function BattleController:getFxNode()
|
function BattleController:getFxNode()
|
||||||
|
|||||||
@ -168,12 +168,13 @@ function BattleHelper:addSpineBoneFollowerGraphic(effectObj)
|
|||||||
return boneFollower
|
return boneFollower
|
||||||
end
|
end
|
||||||
|
|
||||||
function BattleHelper:setEffectTextCache(cache1, cache2)
|
function BattleHelper:setEffectTextCache(cache1, cache2, cache3)
|
||||||
if self.effectTextCacheList == nil then
|
if self.effectTextCacheList == nil then
|
||||||
self.effectTextCacheList = {}
|
self.effectTextCacheList = {}
|
||||||
end
|
end
|
||||||
self.effectTextCacheList[1] = cache1
|
self.effectTextCacheList[1] = cache1
|
||||||
self.effectTextCacheList[2] = cache2
|
self.effectTextCacheList[2] = cache2
|
||||||
|
self.effectTextCacheList[3] = cache3
|
||||||
end
|
end
|
||||||
|
|
||||||
function BattleHelper:getEffectText(parent, colorType)
|
function BattleHelper:getEffectText(parent, colorType)
|
||||||
|
|||||||
@ -352,6 +352,7 @@ function BattleUI:initNumberNode()
|
|||||||
self.battleNumberNode = self.uiMap["battle_ui.battle_root.battle_number_node"]
|
self.battleNumberNode = self.uiMap["battle_ui.battle_root.battle_number_node"]
|
||||||
self.battleNumberRed = self.uiMap["battle_ui.cache_node.battle_number_red"]
|
self.battleNumberRed = self.uiMap["battle_ui.cache_node.battle_number_red"]
|
||||||
self.battleNumberGreen = self.uiMap["battle_ui.cache_node.battle_number_green"]
|
self.battleNumberGreen = self.uiMap["battle_ui.cache_node.battle_number_green"]
|
||||||
|
self.battleNumberBlue = self.uiMap["battle_ui.cache_node.battle_number_blue"]
|
||||||
end
|
end
|
||||||
|
|
||||||
function BattleUI:getNumberNode()
|
function BattleUI:getNumberNode()
|
||||||
@ -366,6 +367,10 @@ function BattleUI:getBattleNumberGreen()
|
|||||||
return self.battleNumberGreen
|
return self.battleNumberGreen
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function BattleUI:getBattleNumberBlue()
|
||||||
|
return self.battleNumberBlue
|
||||||
|
end
|
||||||
|
|
||||||
function BattleUI:initFxNode()
|
function BattleUI:initFxNode()
|
||||||
self.fxNode = self.uiMap["battle_ui.battle_root.batttle_fx_node"]
|
self.fxNode = self.uiMap["battle_ui.battle_root.batttle_fx_node"]
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user