From f3d74440ceaebf9a3cc81176cd2f4355e7e2b1f5 Mon Sep 17 00:00:00 2001 From: neckrat Date: Sun, 19 Apr 2026 00:28:57 +0300 Subject: [PATCH] some silly additions to silly functions --- lib/character/behaviors/effects.lua | 24 ++++++++-------- lib/effectbook.lua | 23 +++++++++++++++ lib/spell/effect.lua | 44 ++++++++++++++--------------- 3 files changed, 56 insertions(+), 35 deletions(-) create mode 100644 lib/effectbook.lua diff --git a/lib/character/behaviors/effects.lua b/lib/character/behaviors/effects.lua index b89fb90..51c8841 100644 --- a/lib/character/behaviors/effects.lua +++ b/lib/character/behaviors/effects.lua @@ -15,10 +15,10 @@ end --- проверяет, можно ли наложить эффект и при наложении его применяет --- @param effect Effect ---- @param cooldown integer -function behavior:addEffect(effect, cooldown) +--- @param stacks integer +function behavior:addEffect(effect, stacks) -- проверяем эффект на возможности суммирования (aka противоречия) - for ef, t in pairs(self.effects) do + for ef, st in pairs(self.effects) do local effectSum = effect:sum(ef) if effectSum then -- применяем результат суммы и удаляем эффект @@ -26,25 +26,23 @@ function behavior:addEffect(effect, cooldown) end end - self.effects[effect] = cooldown - effect:onBirth() + self.effects[effect] = stacks + effect:onBirth(self.owner) end --- должен вызываться в начале хода +--- +--- @todo надо написать применение всех эффектов так, чтобы они применялись одновременно function behavior:onStartTurn() - for ef, t in pairs(self.effects) do - if t == 0 then - ef:onDeath() - self.effects[ef] = nil - end + for ef, st in pairs(self.effects) do + ef:onStartTurn(self.owner) end end --- должен вызываться в конце хода function behavior:onEndTurn() - for ef, t in pairs(self.effects) do - self.effects[ef] = t - 1 - ef:onEndTurn() + for ef, st in pairs(self.effects) do + ef:onEndTurn(self.owner) end end diff --git a/lib/effectbook.lua b/lib/effectbook.lua new file mode 100644 index 0000000..ef05c90 --- /dev/null +++ b/lib/effectbook.lua @@ -0,0 +1,23 @@ +local effect = require "lib.spell.effect" + +local bleeding = effect.new({ + tag = "bleeding", +}) + + +local effectbook = { + bleeding = bleeding +} + +--- не уверен зачем нам это, но вай нот ай саппоуз +--- @param list Effect[] +function effectbook.of(list) + local efb = {} + for i, ef in ipairs(list) do + print(i) + efb[i] = setmetatable({}, { __index = ef }) + end + return efb +end + +return effectbook diff --git a/lib/spell/effect.lua b/lib/spell/effect.lua index 8a29717..c984259 100644 --- a/lib/spell/effect.lua +++ b/lib/spell/effect.lua @@ -1,40 +1,40 @@ --- @class Effect +--- @field tag string local effect = {} effect.__index = effect -function effect:onBirth() - +--- @param owner Character +function effect:onBirth(owner) end -function effect:onDeath() +--- @param owner Character +function effect:onDeath(owner) end -end +--- @param owner Character +function effect:onStartTurn(owner) end -function effect:onStartTurn() - -end - -function effect:onEndTurn() - -end +--- @param owner Character +function effect:onEndTurn(owner) end --- @param other Effect --- @return Effect|nil -function effect:sum(other) +function effect:sum(other) end -end +function effect:update(dt) end -function effect:update(dt) - -end - -function effect:draw() - -end +function effect:draw() end +--- @param data {tag: string, onBirth: fun(owner: Character)?, onDeath: fun(owner: Character)?, onStartTurn: fun(owner: Character)?, onEndTurn: fun(owner: Character)?, sum: fun(owner: Character)?} --- @return Effect -local function new() - return setmetatable({}, effect) +local function new(data) + return setmetatable({ + tag = data.tag, + onBirth = data.onBirth, + onDeath = data.onDeath, + onStartTurn = data.onStartTurn, + onEndTurn = data.onEndTurn, + sum = data.sum + }, effect) end return { new = new }