52 lines
1.6 KiB
Lua
52 lines
1.6 KiB
Lua
--- ===========ЛОГИКА ЭФФЕКТОВ И ЧТО С ЭТИМ ЕДЯТ===========
|
||
--- читать здесь: 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
|