From f59f32bd70286b8a12085a9cae2ac0d9aab0e137 Mon Sep 17 00:00:00 2001 From: neckrat Date: Thu, 23 Apr 2026 21:53:18 +0300 Subject: [PATCH] well i have no clue about what theres happening, but its works!! --- lib/character/behaviors/effects.lua | 31 ++++++++++++++++++++++++++++- lib/effectbook.lua | 28 ++++++++++++++++---------- lib/level/turn_order.lua | 3 +++ lib/spell/effect.lua | 16 +++++++++++++++ 4 files changed, 67 insertions(+), 11 deletions(-) diff --git a/lib/character/behaviors/effects.lua b/lib/character/behaviors/effects.lua index d8d596f..a701562 100644 --- a/lib/character/behaviors/effects.lua +++ b/lib/character/behaviors/effects.lua @@ -29,6 +29,14 @@ function behavior:addEffect(effect, stacks) -- if not effect:beforeBirth() then return end -- проверяем эффект на возможности суммирования (aka противоречия) for i, ef in ipairs(self.effectsPriority) do + if ef == effect then + self.effectsStacks[ef] = stacks + local task1 = effect:afterBirth(self.owner) + if task1 then + task1(function() end) + end + return + end local effectSum = effect:sum(ef) if effectSum then -- применяем результат суммы и удаляем эффект @@ -39,7 +47,10 @@ function behavior:addEffect(effect, stacks) self.effectsPriority[#self.effectsPriority + 1] = effect self.effectsStacks[effect] = stacks print("[Effects]: мы применили эффект!!") - effect:afterBirth(self.owner) + local task1 = effect:afterBirth(self.owner) + if task1 then + task1(function() end) + end end --- должен вызываться в начале хода @@ -52,6 +63,24 @@ function behavior:beforeTurn() end end +--- О ДААА ЭТА ФУНКЦИЯ МЕНЯЕТ СОСТОЯНИЕ О ДАААААА О ДАААААААААА +--- @param effect Effect +--- @param amount integer +function behavior:deleteStacks(effect, amount) + print("[Effects]: удаляем стаки!!") + self.effectsStacks[effect] = self.effectsStacks[effect] - amount -- !!!!!!!!!!!!!!!! <<<<< 21+ only + if self.effectsStacks[effect] <= 0 then + print("[Effects]:", effect.tag, "ДОЛЖЕН БЫТЬ СТЁРТ") + self.effectsStacks[effect] = nil + for i, ef in ipairs(self.effectsPriority) do + if ef == effect then + table.remove(self.effectsPriority, i) + print("[Effects]:", effect.tag, "СТЁРТ") + end + end + end +end + --- должен вызываться в конце хода function behavior:afterTurn() for i, ef in pairs(self.effectsPriority) do diff --git a/lib/effectbook.lua b/lib/effectbook.lua index fe871ad..6a881d2 100644 --- a/lib/effectbook.lua +++ b/lib/effectbook.lua @@ -4,29 +4,37 @@ local easing = require "lib.utils.easing" local bleeding = effect.new({ tag = "bleeding", - beforeTurn = function(owner) - print("мы начали применять блидинг!!", owner) - local stats = owner:has(Tree.behaviors.stats) - local sprite = owner:has(Tree.behaviors.sprite) - if not stats or not sprite then return end - stats:dealDamage(2) - return task.wait({ sprite:animate("hurt") }) - end, afterBirth = function(owner) - local light = require "lib/character/character".spawn("Light Effect") + local light = require "lib/character/character".spawn("Bleeding Light Effect") light:addBehavior { Tree.behaviors.light.new { color = Vec3 { 1, 0., 0. }, intensity = 4 }, Tree.behaviors.positioned.new(owner:has(Tree.behaviors.positioned).position + Vec3 { 0.5, 0.5 }), } return task.wait({ task.chain(task.tween(light:has(Tree.behaviors.light) --[[@as LightBehavior]], - { intensity = 1, color = Vec3 { 1, 0., 0. } }, 800, easing.easeInCubic), function() + { intensity = 1, color = Vec3 { 0, 0., 0. } }, 800, easing.easeInCubic), function() light:die() return task.fromValue() end) }) end }) +function bleeding:beforeTurn(owner) + local stats = owner:has(Tree.behaviors.stats) + local sprite = owner:has(Tree.behaviors.sprite) + if not stats or not sprite then return end + stats:dealDamage(2) + return task.wait({ sprite:animate("hurt") }) +end + +function bleeding:afterTurn(owner) + local behavior = owner:has(Tree.behaviors.effects) + if not behavior then + print('[Effect]: yo man what the hell wheres your behavior how thats possible please stop thats not normal') + return + end + behavior:deleteStacks(self, 1) +end local effectbook = { bleeding = bleeding diff --git a/lib/level/turn_order.lua b/lib/level/turn_order.lua index 51b6494..47cef9b 100644 --- a/lib/level/turn_order.lua +++ b/lib/level/turn_order.lua @@ -73,6 +73,9 @@ function turnOrder:endRound() char:try(Tree.behaviors.spellcaster, function(spellcaster) spellcaster:processCooldowns() end) + char:try(Tree.behaviors.effects, function(effects) + effects:afterTurn() + end) end self.actedQueue, self.pendingQueue = self.pendingQueue, self.actedQueue diff --git a/lib/spell/effect.lua b/lib/spell/effect.lua index 5aef60d..c1c1e62 100644 --- a/lib/spell/effect.lua +++ b/lib/spell/effect.lua @@ -1,3 +1,5 @@ +local utils = require "lib.utils.utils" + --- @class Effect --- @field tag string local effect = {} @@ -76,6 +78,13 @@ function effect:update(dt) end function effect:draw() end +--- дип сравнение эффектов +--- @param other Effect +--- @return boolean +function effect:__eq(other) + return utils.deepComprasion(self, other) +end + --- @todo переделать дату и прочее -- --- @param data {tag: string, beforeBirth: fun(owner: Character)?, beforeDeath: fun(owner: Character)?, beforeTurn: (fun(owner: Character): Task|nil), afterTurn: (fun(owner: Character): Task|nil), sum: fun(owner: Character)?} --- @param data EffectData @@ -155,6 +164,13 @@ local function new(data) return data.afterRegeneration(owner) end + --- дип сравнение эффектов + --- @param other Effect + --- @return boolean + function newEffect:__eq(other) + return utils.deepComprasion(self, other) + end + return newEffect end