fix skill deadlock after trying to move into a character
This commit is contained in:
parent
0db8fc5239
commit
7ac0a53caa
@ -2,7 +2,7 @@
|
|||||||
--- 1) ПОКА выделен персонаж И он находится в режиме каста, вызывать spell:update() и spell:draw() каждый кадр (это отвечает за обработку и отрисовку превьюшки каста, например, превью пути или зоны поражения; реализуется через установку spellcaster.cast, см. код в кнопке)
|
--- 1) ПОКА выделен персонаж И он находится в режиме каста, вызывать spell:update() и spell:draw() каждый кадр (это отвечает за обработку и отрисовку превьюшки каста, например, превью пути или зоны поражения; реализуется через установку spellcaster.cast, см. код в кнопке)
|
||||||
--- ЕСЛИ выбран тайл, ТО вызвать spell:cast() (это запрос на обработку последствий применения заклинания, например, старт анимации ходьбы, выпуск снаряда и т.д.; реализовано в selector)
|
--- ЕСЛИ выбран тайл, ТО вызвать spell:cast() (это запрос на обработку последствий применения заклинания, например, старт анимации ходьбы, выпуск снаряда и т.д.; реализовано в selector)
|
||||||
--- ЕСЛИ spell:cast() ИСТИНА, ТО вызвать selector:lock() (отключить обработку выделения всего на уровне; реализовано в selector)
|
--- ЕСЛИ spell:cast() ИСТИНА, ТО вызвать selector:lock() (отключить обработку выделения всего на уровне; реализовано в selector)
|
||||||
---
|
---
|
||||||
--- 2) ПОКА анимация каста НЕ завершена, ничего не делать, ИНАЧЕ вызвать behaviors.spellcaster:endCast() (вот это сейчас нужно вызывать самостоятельно, т.к. нет возможности обобщенно отследить завершение анимаций)
|
--- 2) ПОКА анимация каста НЕ завершена, ничего не делать, ИНАЧЕ вызвать behaviors.spellcaster:endCast() (вот это сейчас нужно вызывать самостоятельно, т.к. нет возможности обобщенно отследить завершение анимаций)
|
||||||
--- --TODO: каждый каст должен возвращать объект, который позволит отследить момент завершения анимации спелла
|
--- --TODO: каждый каст должен возвращать объект, который позволит отследить момент завершения анимации спелла
|
||||||
--- Да, это Future/Promise/await/async
|
--- Да, это Future/Promise/await/async
|
||||||
@ -26,20 +26,23 @@ local walk = setmetatable({
|
|||||||
}, spell)
|
}, spell)
|
||||||
|
|
||||||
function walk:cast(caster, target)
|
function walk:cast(caster, target)
|
||||||
if not caster:try(Tree.behaviors.stats, function (stats)
|
if not caster:try(Tree.behaviors.stats, function(stats)
|
||||||
return stats.mana >= 2
|
return stats.mana >= 2
|
||||||
end) then return false end
|
end) then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
local path = self.path
|
local path = self.path
|
||||||
if path:is_empty() then return false end
|
|
||||||
path:pop_front()
|
path:pop_front()
|
||||||
|
if path:is_empty() then return false end
|
||||||
|
|
||||||
for p in path:values() do print(p) end
|
for p in path:values() do print(p) end
|
||||||
caster:has(Tree.behaviors.map):followPath(path, function()
|
caster:has(Tree.behaviors.map):followPath(path, function()
|
||||||
caster:has(Tree.behaviors.spellcaster):endCast()
|
caster:has(Tree.behaviors.spellcaster):endCast()
|
||||||
end)
|
end)
|
||||||
-- TODO: списать деньги за каст (антиутопия какая-то)
|
-- TODO: списать деньги за каст (антиутопия какая-то)
|
||||||
-- TODO: привязка тинькоффа
|
-- TODO: привязка тинькоффа
|
||||||
caster:try(Tree.behaviors.stats, function (stats)
|
caster:try(Tree.behaviors.stats, function(stats)
|
||||||
stats.mana = stats.mana - 2
|
stats.mana = stats.mana - 2
|
||||||
print(stats.mana)
|
print(stats.mana)
|
||||||
end)
|
end)
|
||||||
@ -66,14 +69,14 @@ end
|
|||||||
local regenerateMana = setmetatable({}, spell)
|
local regenerateMana = setmetatable({}, spell)
|
||||||
|
|
||||||
function regenerateMana:cast(caster, target)
|
function regenerateMana:cast(caster, target)
|
||||||
caster:try(Tree.behaviors.stats, function (stats)
|
caster:try(Tree.behaviors.stats, function(stats)
|
||||||
stats.mana = 10
|
stats.mana = 10
|
||||||
end)
|
end)
|
||||||
print(caster.id, "has regenerated mana")
|
print(caster.id, "has regenerated mana")
|
||||||
caster:try(Tree.behaviors.sprite, function (sprite) -- бойлерплейт (временный)
|
caster:try(Tree.behaviors.sprite, function(sprite) -- бойлерплейт (временный)
|
||||||
-- В данный момент заклинание не позволяет отслеживать состояние последствий своего применения, так что надо повесить хоть какую-то анимашку просто для того, чтобы отложить завершение каста куда-то в будущее
|
-- В данный момент заклинание не позволяет отслеживать состояние последствий своего применения, так что надо повесить хоть какую-то анимашку просто для того, чтобы отложить завершение каста куда-то в будущее
|
||||||
-- См. также https://learn.javascript.ru/settimeout-setinterval
|
-- См. также https://learn.javascript.ru/settimeout-setinterval
|
||||||
sprite:play("hurt", function ()
|
sprite:play("hurt", function()
|
||||||
sprite:play("idle")
|
sprite:play("idle")
|
||||||
caster:has(Tree.behaviors.spellcaster):endCast()
|
caster:has(Tree.behaviors.spellcaster):endCast()
|
||||||
end)
|
end)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user