effects too hard i dont understand

This commit is contained in:
neckrat 2026-04-20 19:57:54 +03:00
parent 8292a20ae0
commit e3d9cafdd3
2 changed files with 15 additions and 14 deletions

View File

@ -3,7 +3,8 @@
--- behavior thats holds all effects that we applied --- behavior thats holds all effects that we applied
--- @class EffectsBehavior : Behavior --- @class EffectsBehavior : Behavior
--- @field effects table<Effect, integer> --- @field effectsPriority Effect[] хранит эффекты в порядке их применения
--- @field effectsStacks table<Effect, integer> хранит стаки эффектов
local behavior = {} local behavior = {}
behavior.__index = behavior behavior.__index = behavior
behavior.id = "effects" behavior.id = "effects"
@ -17,8 +18,9 @@ end
--- @param effect Effect --- @param effect Effect
--- @param stacks integer --- @param stacks integer
function behavior:addEffect(effect, stacks) function behavior:addEffect(effect, stacks)
if not effect:beforeBirth() then return end
-- проверяем эффект на возможности суммирования (aka противоречия) -- проверяем эффект на возможности суммирования (aka противоречия)
for ef, st in pairs(self.effects) do for i, ef in ipairs(self.effectsPriority) do
local effectSum = effect:sum(ef) local effectSum = effect:sum(ef)
if effectSum then if effectSum then
-- применяем результат суммы и удаляем эффект -- применяем результат суммы и удаляем эффект
@ -26,23 +28,22 @@ function behavior:addEffect(effect, stacks)
end end
end end
self.effects[effect] = stacks self.effectsPriority[#self.effectsPriority + 1] = effect
effect:onBirth(self.owner) self.effectsStacks[effect] = stacks
effect:afterBirth()
end end
--- должен вызываться в начале хода --- должен вызываться в начале хода
--- function behavior:beforeTurn()
--- @todo надо написать применение всех эффектов так, чтобы они применялись одновременно for i, ef in ipairs(self.effectsPriority) do
function behavior:onStartTurn() ef:beforeTurn()
for ef, st in pairs(self.effects) do
ef:onStartTurn(self.owner)
end end
end end
--- должен вызываться в конце хода --- должен вызываться в конце хода
function behavior:onEndTurn() function behavior:afterTurn()
for ef, st in pairs(self.effects) do for i, ef in pairs(self.effectsPriority) do
ef:onEndTurn(self.owner) ef:afterTurn()
end end
end end

View File

@ -29,8 +29,8 @@ function effect:beforeDamage(damage) end
function effect:afterDamage() end function effect:afterDamage() end
--- @param damage integer --- @param amountHp integer кол-во хп для регена
function effect:beforeRegeneration(damage) end function effect:beforeRegeneration(amountHp) end
function effect:afterRegeneration() end function effect:afterRegeneration() end