50 lines
1.7 KiB
Lua
50 lines
1.7 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 stacks integer
|
||
function behavior:addEffect(effect, stacks)
|
||
-- проверяем эффект на возможности суммирования (aka противоречия)
|
||
for ef, st in pairs(self.effects) do
|
||
local effectSum = effect:sum(ef)
|
||
if effectSum then
|
||
-- применяем результат суммы и удаляем эффект
|
||
return
|
||
end
|
||
end
|
||
|
||
self.effects[effect] = stacks
|
||
effect:onBirth(self.owner)
|
||
end
|
||
|
||
--- должен вызываться в начале хода
|
||
---
|
||
--- @todo надо написать применение всех эффектов так, чтобы они применялись одновременно
|
||
function behavior:onStartTurn()
|
||
for ef, st in pairs(self.effects) do
|
||
ef:onStartTurn(self.owner)
|
||
end
|
||
end
|
||
|
||
--- должен вызываться в конце хода
|
||
function behavior:onEndTurn()
|
||
for ef, st in pairs(self.effects) do
|
||
ef:onEndTurn(self.owner)
|
||
end
|
||
end
|
||
|
||
return behavior
|