feature/effects #37

Manually merged
neckrat merged 64 commits from feature/effects into main 2026-05-06 10:19:49 +03:00
5 changed files with 72 additions and 11 deletions
Showing only changes of commit eecf24c471 - Show all commits

Binary file not shown.

View File

@ -26,7 +26,12 @@ end
--- @param effect Effect --- @param effect Effect
--- @param stacks integer --- @param stacks integer
function behavior:addEffect(effect, stacks, intensity) function behavior:addEffect(effect, stacks, intensity)
-- if not effect:beforeBirth() then return end if effect.beforeBirth then
local task1 = effect:beforeBirth(self.owner, intensity)
if task1 then
task1(function() end)
end
end
-- проверяем эффект на возможности суммирования (aka противоречия) -- проверяем эффект на возможности суммирования (aka противоречия)
for i, ef in ipairs(self.effectsPriority) do for i, ef in ipairs(self.effectsPriority) do
if ef == effect then if ef == effect then

Всё таки позволяет через наложение сильного короткого эффекта поверх слабого длинного получить и сильный, и длинный эффект одновременно?

Всё таки позволяет через наложение сильного короткого эффекта поверх слабого длинного получить и сильный, и длинный эффект одновременно?

да, мы вроде так и договорились по итогу

да, мы вроде так и договорились по итогу

Так вроде смысл реферата по DOS сводился к тому, что так делать не надо? Мы сделали разные выводы?

Так вроде смысл реферата по DOS сводился к тому, что так делать не надо? Мы сделали разные выводы?

Так вроде смысл реферата по DOS сводился к тому, что так делать не надо? Мы сделали разные выводы?
получается, ты сделал

В этот момент новый, невероятно слабый эффект полностью перезапишет сильный эффект высокоуровневого мага.

Так вроде смысл реферата по DOS сводился к тому, что так делать не надо? Мы сделали разные выводы? получается, ты сделал > В этот момент новый, невероятно слабый эффект полностью перезапишет сильный эффект высокоуровневого мага.

видимо ¯(ツ)/¯, я предположил так сделать из-за всех этих скрытых механик, где ты переопределяешь бесконечный эффект конечным и тд

видимо ¯_(ツ)_/¯, я предположил так сделать из-за всех этих скрытых механик, где ты переопределяешь бесконечный эффект конечным и тд

а поддержка бесконечных эффектов же не присутствует в каком-то дополнительном виде, кроме как не указывать эффекту момент потери стака?

а поддержка бесконечных эффектов же не присутствует в каком-то дополнительном виде, кроме как не указывать эффекту момент потери стака?

да, можно добавить просто какое-то магическое значение по типу -1 ради ui, ну или сделать флаг для этого

да, можно добавить просто какое-то магическое значение по типу -1 ради ui, ну или сделать флаг для этого
@ -59,16 +64,6 @@ function behavior:addEffect(effect, stacks, intensity)
end end
end end
--- должен вызываться в начале хода
function behavior:beforeTurn()
for i, ef in ipairs(self.effectsPriority) do
local task1 = ef:beforeTurn(self.owner, self.effectsProperties[ef].intensity)
if task1 then
task1(function() end)
end
end
end
--- О ДААА ЭТА ФУНКЦИЯ МЕНЯЕТ СОСТОЯНИЕ О ДАААААА О ДАААААААААА --- О ДААА ЭТА ФУНКЦИЯ МЕНЯЕТ СОСТОЯНИЕ О ДАААААА О ДАААААААААА
--- @param effect Effect --- @param effect Effect
--- @param amount integer --- @param amount integer
@ -88,6 +83,36 @@ function behavior:deleteStacks(effect, amount)
end end
end end
--- должна вызываться перед смертью персонажа
function behavior:beforeDeath()
for i, ef in ipairs(self.effectsPriority) do
local task1 = ef:beforeDeath(self.owner, self.effectsProperties[ef].intensity)
if task1 then
task1(function() end)
end
end
end
--- должна вызываться после смерти персонажа (может ли такая ситуация возникнуть вообще?)
function behavior:afterDeath()
for i, ef in ipairs(self.effectsPriority) do
local task1 = ef:afterDeath(self.owner, self.effectsProperties[ef].intensity)
if task1 then
task1(function() end)
end
end
end
--- должен вызываться в начале хода
function behavior:beforeTurn()
for i, ef in ipairs(self.effectsPriority) do
local task1 = ef:beforeTurn(self.owner, self.effectsProperties[ef].intensity)
if task1 then
task1(function() end)
end
end
end
--- должен вызываться в конце хода --- должен вызываться в конце хода
function behavior:afterTurn() function behavior:afterTurn()
for i, ef in pairs(self.effectsPriority) do for i, ef in pairs(self.effectsPriority) do
@ -98,4 +123,24 @@ function behavior:afterTurn()
end end
end end
--- должен вызываться перед кастом спелла
function behavior:beforeCast()
for i, ef in ipairs(self.effectsPriority) do
local task1 = ef:beforeCast(self.owner, self.effectsProperties[ef].intensity)
if task1 then
task1(function() end)
end
end
end
--- должен вызываться после каста спелла
function behavior:afterCast()
for i, ef in pairs(self.effectsPriority) do
local task1 = ef:afterCast(self.owner, self.effectsProperties[ef].intensity)
if task1 then
task1(function() end)
end
end
end
return behavior return behavior

View File

@ -20,6 +20,9 @@ function behavior.new(spellbook)
end end
function behavior:endCast() function behavior:endCast()
self.owner:try(Tree.behaviors.effects, function(effects)
effects:afterCast()
end)
self.state = "idle" self.state = "idle"
self.cast = nil self.cast = nil
Tree.level.turnOrder:reorder() Tree.level.turnOrder:reorder()

View File

@ -36,6 +36,15 @@ function bleeding:afterTurn(owner, intensity)
behavior:deleteStacks(self, 1) behavior:deleteStacks(self, 1)
end end
--- meow
function bleeding:afterCast(owner, intensity)
Tree.audio:play(Tree.assets.files.audio.sounds.meow)
end
function bleeding:beforeCast(owner, intensity)
Tree.audio:play(Tree.assets.files.audio.sounds.meow)
end
local effectbook = { local effectbook = {
bleeding = bleeding bleeding = bleeding
} }

View File

@ -135,6 +135,10 @@ function spell.new(data)
caster:try(Tree.behaviors.spellcaster, function(spellcaster) caster:try(Tree.behaviors.spellcaster, function(spellcaster)
spellcaster.cooldowns[self.tag] = self.baseCooldown spellcaster.cooldowns[self.tag] = self.baseCooldown
end) end)
caster:try(Tree.behaviors.effects, function(effects)
effects:beforeCast()
end)
return data.onCast(caster, target) return data.onCast(caster, target)
end end