diff --git a/lib/spellbook.lua b/lib/spellbook.lua index 67d5605..8b14f26 100644 --- a/lib/spellbook.lua +++ b/lib/spellbook.lua @@ -2,7 +2,7 @@ --- 1) ПОКА выделен персонаж И он находится в режиме каста, вызывать spell:update() и spell:draw() каждый кадр (это отвечает за обработку и отрисовку превьюшки каста, например, превью пути или зоны поражения; реализуется через установку spellcaster.cast, см. код в кнопке) --- ЕСЛИ выбран тайл, ТО вызвать spell:cast() (это запрос на обработку последствий применения заклинания, например, старт анимации ходьбы, выпуск снаряда и т.д.; реализовано в selector) --- ЕСЛИ spell:cast() ИСТИНА, ТО вызвать selector:lock() (отключить обработку выделения всего на уровне; реализовано в selector) ---- +--- --- 2) ПОКА анимация каста НЕ завершена, ничего не делать, ИНАЧЕ вызвать behaviors.spellcaster:endCast() (вот это сейчас нужно вызывать самостоятельно, т.к. нет возможности обобщенно отследить завершение анимаций) --- --TODO: каждый каст должен возвращать объект, который позволит отследить момент завершения анимации спелла --- Да, это Future/Promise/await/async @@ -26,20 +26,23 @@ local walk = setmetatable({ }, spell) function walk:cast(caster, target) - if not caster:try(Tree.behaviors.stats, function (stats) - return stats.mana >= 2 - end) then return false end - + if not caster:try(Tree.behaviors.stats, function(stats) + return stats.mana >= 2 + end) then + return false + end + local path = self.path - if path:is_empty() then return false end path:pop_front() + if path:is_empty() then return false end + for p in path:values() do print(p) end caster:has(Tree.behaviors.map):followPath(path, function() caster:has(Tree.behaviors.spellcaster):endCast() end) -- TODO: списать деньги за каст (антиутопия какая-то) -- TODO: привязка тинькоффа - caster:try(Tree.behaviors.stats, function (stats) + caster:try(Tree.behaviors.stats, function(stats) stats.mana = stats.mana - 2 print(stats.mana) end) @@ -66,14 +69,14 @@ end local regenerateMana = setmetatable({}, spell) function regenerateMana:cast(caster, target) - caster:try(Tree.behaviors.stats, function (stats) + caster:try(Tree.behaviors.stats, function(stats) stats.mana = 10 end) print(caster.id, "has regenerated mana") - caster:try(Tree.behaviors.sprite, function (sprite) -- бойлерплейт (временный) - -- В данный момент заклинание не позволяет отслеживать состояние последствий своего применения, так что надо повесить хоть какую-то анимашку просто для того, чтобы отложить завершение каста куда-то в будущее - -- См. также https://learn.javascript.ru/settimeout-setinterval - sprite:play("hurt", function () + caster:try(Tree.behaviors.sprite, function(sprite) -- бойлерплейт (временный) + -- В данный момент заклинание не позволяет отслеживать состояние последствий своего применения, так что надо повесить хоть какую-то анимашку просто для того, чтобы отложить завершение каста куда-то в будущее + -- См. также https://learn.javascript.ru/settimeout-setinterval + sprite:play("hurt", function() sprite:play("idle") caster:has(Tree.behaviors.spellcaster):endCast() end)