diff --git a/lib/level/selector.lua b/lib/level/selector.lua index 3c60a6f..2d100bf 100644 --- a/lib/level/selector.lua +++ b/lib/level/selector.lua @@ -38,16 +38,16 @@ function selector:update(dt) return end local task = b.cast:cast(char, mousePosition) -- в task функция, которая запускает анимацию спелла - if task then - self:lock() - b.state = "running" + if not task then return end -- не получилось скастовать - task( - function(_) -- это коллбэк, который сработает по окончании анимации спелла - b:endCast() - end - ) - end + self:lock() + b.state = "running" + + task( + function(_) -- это коллбэк, который сработает по окончании анимации спелла + b:endCast() + end + ) end) end end diff --git a/lib/spell/spell.lua b/lib/spell/spell.lua index e387a2d..337a02c 100644 --- a/lib/spell/spell.lua +++ b/lib/spell/spell.lua @@ -14,7 +14,7 @@ local task = require "lib.utils.task" --- @field distance? integer Сторона квадрата с центром в позиции кастера, в пределах которого должна находиться цель, либо отсутствие ограничения --- @field update fun(self: Spell, caster: Character, dt: number): nil Изменяет состояние спелла --- @field draw fun(self: Spell): nil Рисует превью каста, ничего не должна изменять в идеальном мире ---- @field cast fun(self: Spell, caster: Character, target: Vec3): Task Вызывается в момент каста, изменяет мир. +--- @field cast fun(self: Spell, caster: Character, target: Vec3): Task? Вызывается в момент каста, изменяет мир. local spell = {} spell.__index = spell spell.tag = "spell_base" @@ -56,7 +56,7 @@ end function spell:cast(caster, target) return task.fromValue() end --- Конструктор [Spell] ---- @param data {tag: string, baseCost: integer, baseCooldown: integer, targetQuery: SpellTargetQuery?, previewType: SpellPreview?, distance: integer?, onCast: fun(caster: Character, target: Vec3): Task} +--- @param data {tag: string, baseCost: integer, baseCooldown: integer, targetQuery: SpellTargetQuery?, previewType: SpellPreview?, distance: integer?, onCast: fun(caster: Character, target: Vec3): Task?} --- @return Spell function spell.new(data) local newSpell = setmetatable({ @@ -73,13 +73,13 @@ function spell.new(data) or newSpell.targetQuery function newSpell:cast(caster, target) - if not self.targetQuery.test(caster, target) then return task.fromValue() end -- проверка корректности цели + if not self.targetQuery.test(caster, target) then return end -- проверка корректности цели -- проверка на достаточное количество маны if caster:try(Tree.behaviors.stats, function(stats) return stats.mana < self.baseCost end) then - return task.fromValue() + return end caster:try(Tree.behaviors.stats, function(stats) diff --git a/lib/spellbook.lua b/lib/spellbook.lua index 0a1cc0b..b9c0960 100644 --- a/lib/spellbook.lua +++ b/lib/spellbook.lua @@ -26,13 +26,13 @@ local walk = spell.new { path:pop_front() if path:is_empty() then print("[Walk]: the path is empty", initialPos, target) - return task.fromValue() + return end local sprite = caster:has(Tree.behaviors.sprite) assert(sprite, "[Walk]", "WTF DUDE WHERE'S YOUR SPRITE") if not sprite then - return task.fromValue() + return end return caster:has(Tree.behaviors.tiled):followPath(path) @@ -52,7 +52,7 @@ local regenerateMana = spell.new { end) local sprite = caster:has(Tree.behaviors.sprite) - if not sprite then return task.fromValue() end + if not sprite then return end print(caster.id, "has regenerated mana and gained initiative") local light = require "lib/character/character".spawn("Light Effect") @@ -88,7 +88,7 @@ local attack = spell.new { local sprite = caster:has(Tree.behaviors.sprite) local targetSprite = targetCharacter:has(Tree.behaviors.sprite) - if not sprite or not targetSprite then return task.fromValue() end + if not sprite or not targetSprite then return end caster:try(Tree.behaviors.positioned, function(b) b:lookAt(target) end)