--- ===========ЛОГИКА ЭФФЕКТОВ И ЧТО С ЭТИМ ЕДЯТ=========== --- читать здесь: https://docs.google.com/document/d/1Hxa5dOLaeRpLQOs5H-oIDDuLLhKbDw40lR9d62Zb4Tg/edit?usp=sharing --- behavior thats holds all effects that we applied --- @class EffectsBehavior : Behavior --- @field effectsPriority Effect[] хранит эффекты в порядке их применения --- @field effectsStacks table хранит стаки эффектов 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) if not effect:beforeBirth() then return end -- проверяем эффект на возможности суммирования (aka противоречия) for i, ef in ipairs(self.effectsPriority) do local effectSum = effect:sum(ef) if effectSum then -- применяем результат суммы и удаляем эффект return end end self.effectsPriority[#self.effectsPriority + 1] = effect self.effectsStacks[effect] = stacks effect:afterBirth() end --- должен вызываться в начале хода function behavior:beforeTurn() for i, ef in ipairs(self.effectsPriority) do ef:beforeTurn() end end --- должен вызываться в конце хода function behavior:afterTurn() for i, ef in pairs(self.effectsPriority) do ef:afterTurn() end end return behavior