feature/effects #37

Manually merged
neckrat merged 64 commits from feature/effects into main 2026-05-06 10:19:49 +03:00
2 changed files with 28 additions and 16 deletions
Showing only changes of commit 1397e48e84 - Show all commits

View File

@ -45,21 +45,9 @@ function behavior:addEffect(effect, stacks, intensity)
end end
end end
end end
-- проверяем на наличие такого эффекта
if self.effectsProperties[effect] then book[effect]:onBirth(self.owner, stacks, intensity)
for i, ef in ipairs(self.effectsPriority) do
if ef == effect then
table.remove(self.effectsProperties, i)
self.effectsProperties[#self.effectsProperties + 1] = ef
end
end
else
self.effectsPriority[#self.effectsPriority + 1] = effect
end
self.effectsProperties[effect] = {
stacks = stacks,
intensity = intensity
}
local task3 = book[effect]:afterBirth(self.owner, intensity) local task3 = book[effect]:afterBirth(self.owner, intensity)
if task3 then if task3 then
task3(function() task3(function()

View File

@ -15,7 +15,7 @@ local effect = {}
effect.__index = effect effect.__index = effect
--- Предполагается, что в каждую функцию будет передаваться `Character` (владелец эффекта) и параметр `intensity`, который отвечает за силу спелла --- Предполагается, что в каждую функцию будет передаваться `Character` (владелец эффекта) и параметр `intensity`, который отвечает за силу спелла
--- @alias EffectFunc fun(owner: Character, intensity: integer): Task<nil>, nil -- бред конечно, но иначе всё в жёлтом --- @alias EffectFunc fun(owner: Character, intensity: integer): Task<nil>, nil бред конечно, но иначе всё в жёлтом
--- @alias EffectStatementFunc fun(owner: Character, intensity: integer): Task<nil>, boolean --- @alias EffectStatementFunc fun(owner: Character, intensity: integer): Task<nil>, boolean
--- @alias EffectDamageFunc fun(owner: Character, intensity: integer, damage: integer): Task<nil>, integer --- @alias EffectDamageFunc fun(owner: Character, intensity: integer, damage: integer): Task<nil>, integer
--- @alias EffectRegenFunc fun(owner: Character, intensity: integer, amountHp: integer): Task<nil>, integer --- @alias EffectRegenFunc fun(owner: Character, intensity: integer, amountHp: integer): Task<nil>, integer
@ -122,6 +122,30 @@ function effect:beforeRegeneration(owner, intensity, amountHp) return taskUtils.
--- @return Task<nil> --- @return Task<nil>
function effect:afterRegeneration(owner, intensity) return taskUtils.fromValue() end function effect:afterRegeneration(owner, intensity) return taskUtils.fromValue() end
--- Функция, что задаёт правила присвоения эффекта
--- @param owner Character
--- @param stacks integer
--- @param intensity integer
function effect:onBirth(owner, stacks, intensity)
local effects = owner:has(Tree.behaviors.effects)
if not effects then return end
-- проверяем на наличие такого эффекта
if effects.effectsProperties[self.tag] then
for i, ef in ipairs(effects.effectsPriority) do
if ef == self.tag then
table.remove(effects.effectsProperties, i)
effects.effectsProperties[#effects.effectsProperties + 1] = ef
end
end
else
effects.effectsPriority[#effects.effectsPriority + 1] = self.tag
end
effects.effectsProperties[self.tag] = {
stacks = stacks,

ок, это интересный способ создать пустой таск. Я даже не знал, что так можно 🥵
вообще семантически правильный способ это сделать - task.fromValue()

ок, это интересный способ создать пустой таск. Я даже не знал, что так можно 🥵 вообще семантически правильный способ это сделать - `task.fromValue()`

даже так

даже так
intensity = intensity
}
end
function effect:update(dt) end function effect:update(dt) end

оно явно не должно так дублироваться.
вообще-то дефолтные методы ты и так определил в effect.
хотя логичнее было бы сделать "если обработчика события нет, то не обрабатываем событие".

оно явно не должно так дублироваться. вообще-то дефолтные методы ты и так определил в `effect`. хотя логичнее было бы сделать "если обработчика события нет, то не обрабатываем событие".

это итог того, что я отказался от нилов в функциях
хотя полагаю это можно сократить, я не тыкал этот момент

это итог того, что я отказался от нилов в функциях хотя полагаю это можно сократить, я не тыкал этот момент
function effect:draw() end function effect:draw() end