diff --git a/lib/character/behaviors/effects.lua b/lib/character/behaviors/effects.lua index 51c8841..4abee0e 100644 --- a/lib/character/behaviors/effects.lua +++ b/lib/character/behaviors/effects.lua @@ -3,7 +3,8 @@ --- behavior thats holds all effects that we applied --- @class EffectsBehavior : Behavior ---- @field effects table +--- @field effectsPriority Effect[] хранит эффекты в порядке их применения +--- @field effectsStacks table хранит стаки эффектов local behavior = {} behavior.__index = behavior behavior.id = "effects" @@ -17,8 +18,9 @@ end --- @param effect Effect --- @param stacks integer function behavior:addEffect(effect, stacks) + if not effect:beforeBirth() then return end -- проверяем эффект на возможности суммирования (aka противоречия) - for ef, st in pairs(self.effects) do + for i, ef in ipairs(self.effectsPriority) do local effectSum = effect:sum(ef) if effectSum then -- применяем результат суммы и удаляем эффект @@ -26,23 +28,22 @@ function behavior:addEffect(effect, stacks) end end - self.effects[effect] = stacks - effect:onBirth(self.owner) + self.effectsPriority[#self.effectsPriority + 1] = effect + self.effectsStacks[effect] = stacks + effect:afterBirth() end --- должен вызываться в начале хода ---- ---- @todo надо написать применение всех эффектов так, чтобы они применялись одновременно -function behavior:onStartTurn() - for ef, st in pairs(self.effects) do - ef:onStartTurn(self.owner) +function behavior:beforeTurn() + for i, ef in ipairs(self.effectsPriority) do + ef:beforeTurn() end end --- должен вызываться в конце хода -function behavior:onEndTurn() - for ef, st in pairs(self.effects) do - ef:onEndTurn(self.owner) +function behavior:afterTurn() + for i, ef in pairs(self.effectsPriority) do + ef:afterTurn() end end diff --git a/lib/spell/effect.lua b/lib/spell/effect.lua index cecc8b1..5d0afa2 100644 --- a/lib/spell/effect.lua +++ b/lib/spell/effect.lua @@ -29,8 +29,8 @@ function effect:beforeDamage(damage) end function effect:afterDamage() end ---- @param damage integer -function effect:beforeRegeneration(damage) end +--- @param amountHp integer кол-во хп для регена +function effect:beforeRegeneration(amountHp) end function effect:afterRegeneration() end