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