diff --git a/assets/audio/sounds/meow.ogg b/assets/audio/sounds/meow.ogg new file mode 100644 index 0000000..57953e6 Binary files /dev/null and b/assets/audio/sounds/meow.ogg differ diff --git a/lib/character/behaviors/effects.lua b/lib/character/behaviors/effects.lua index e71b4fc..8687132 100644 --- a/lib/character/behaviors/effects.lua +++ b/lib/character/behaviors/effects.lua @@ -26,7 +26,12 @@ end --- @param effect Effect --- @param stacks integer 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 противоречия) for i, ef in ipairs(self.effectsPriority) do if ef == effect then @@ -59,16 +64,6 @@ function behavior:addEffect(effect, stacks, intensity) 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 amount integer @@ -88,6 +83,36 @@ function behavior:deleteStacks(effect, amount) 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() for i, ef in pairs(self.effectsPriority) do @@ -98,4 +123,24 @@ function behavior:afterTurn() 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 diff --git a/lib/character/behaviors/spellcaster.lua b/lib/character/behaviors/spellcaster.lua index aa0ad60..8974c39 100644 --- a/lib/character/behaviors/spellcaster.lua +++ b/lib/character/behaviors/spellcaster.lua @@ -20,6 +20,9 @@ function behavior.new(spellbook) end function behavior:endCast() + self.owner:try(Tree.behaviors.effects, function(effects) + effects:afterCast() + end) self.state = "idle" self.cast = nil Tree.level.turnOrder:reorder() diff --git a/lib/effectbook.lua b/lib/effectbook.lua index ee374a4..13dae40 100644 --- a/lib/effectbook.lua +++ b/lib/effectbook.lua @@ -36,6 +36,15 @@ function bleeding:afterTurn(owner, intensity) behavior:deleteStacks(self, 1) 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 = { bleeding = bleeding } diff --git a/lib/spell/spell.lua b/lib/spell/spell.lua index 5ef80f0..a4680ac 100644 --- a/lib/spell/spell.lua +++ b/lib/spell/spell.lua @@ -135,6 +135,10 @@ function spell.new(data) caster:try(Tree.behaviors.spellcaster, function(spellcaster) spellcaster.cooldowns[self.tag] = self.baseCooldown end) + + caster:try(Tree.behaviors.effects, function(effects) + effects:beforeCast() + end) return data.onCast(caster, target) end