52 lines
1.6 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--- ===========ЛОГИКА ЭФФЕКТОВ И ЧТО С ЭТИМ ЕДЯТ===========
--- читать здесь: https://docs.google.com/document/d/1Hxa5dOLaeRpLQOs5H-oIDDuLLhKbDw40lR9d62Zb4Tg/edit?usp=sharing
--- behavior thats holds all effects that we applied
--- @class EffectsBehavior : Behavior
--- @field effects table<Effect, integer>
local behavior = {}
behavior.__index = behavior
behavior.id = "effects"
--- @return EffectsBehavior
function behavior.new()
return setmetatable({}, behavior)
end
--- проверяет, можно ли наложить эффект и при наложении его применяет
--- @param effect Effect
--- @param cooldown integer
function behavior:addEffect(effect, cooldown)
-- проверяем эффект на возможности суммирования (aka противоречия)
for ef, t in pairs(self.effects) do
local effectSum = effect:sum(ef)
if effectSum then
-- применяем результат суммы и удаляем эффект
return
end
end
self.effects[effect] = cooldown
effect:onBirth()
end
--- должен вызываться в начале хода
function behavior:onStartTurn()
for ef, t in pairs(self.effects) do
if t == 0 then
ef:onDeath()
self.effects[ef] = nil
end
end
end
--- должен вызываться в конце хода
function behavior:onEndTurn()
for ef, t in pairs(self.effects) do
self.effects[ef] = t - 1
ef:onEndTurn()
end
end
return behavior