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