From 9b10557435e789b6e8a0785e41499543f73813b5 Mon Sep 17 00:00:00 2001 From: neckrat Date: Sat, 18 Apr 2026 09:37:09 +0300 Subject: [PATCH] some silly effect functions --- lib/character/behaviors/effects.lua | 30 ++++++++++++++++++++++++++--- lib/spell/effect.lua | 27 ++++++++++++++++++++++++-- 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/lib/character/behaviors/effects.lua b/lib/character/behaviors/effects.lua index 0038bb1..b89fb90 100644 --- a/lib/character/behaviors/effects.lua +++ b/lib/character/behaviors/effects.lua @@ -15,13 +15,37 @@ end --- проверяет, можно ли наложить эффект и при наложении его применяет --- @param effect Effect -function behavior:addEffect(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:updateEffects() +--- должен вызываться в начале хода +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 diff --git a/lib/spell/effect.lua b/lib/spell/effect.lua index 3d3247f..8a29717 100644 --- a/lib/spell/effect.lua +++ b/lib/spell/effect.lua @@ -2,6 +2,28 @@ local effect = {} effect.__index = effect +function effect:onBirth() + +end + +function effect:onDeath() + +end + +function effect:onStartTurn() + +end + +function effect:onEndTurn() + +end + +--- @param other Effect +--- @return Effect|nil +function effect:sum(other) + +end + function effect:update(dt) end @@ -10,8 +32,9 @@ function effect:draw() end -function effect.new() +--- @return Effect +local function new() return setmetatable({}, effect) end -return effect +return { new = new }