diff --git a/dev_utils/annotations.lua b/dev_utils/annotations.lua new file mode 100644 index 0000000..e8b0fdd --- /dev/null +++ b/dev_utils/annotations.lua @@ -0,0 +1,5 @@ +--- @meta _ +Tree.behaviors.map = require "lib.character.behaviors.map" +Tree.behaviors.spellcaster = require "lib.character.behaviors.spellcaster" +Tree.behaviors.sprite = require "lib.character.behaviors.sprite" +Tree.behaviors.stats = require "lib.character.behaviors.stats" diff --git a/lib/character/behaviors/spellcaster.lua b/lib/character/behaviors/spellcaster.lua index e9041a9..f1ec586 100644 --- a/lib/character/behaviors/spellcaster.lua +++ b/lib/character/behaviors/spellcaster.lua @@ -12,7 +12,7 @@ behavior.state = "idle" function behavior.new(spellbook) local spb = require "lib.spellbook" --- @todo временное добавление ходьбы (и читов) всем персонажам local t = {} - t.spellbook = spellbook or spb.of { spb.walk, spb.regenerateMana } + t.spellbook = spellbook or spb.of { spb.walk, spb.regenerateMana, spb.attack } return setmetatable(t, behavior) end diff --git a/lib/spellbook.lua b/lib/spellbook.lua index 8b14f26..27a226d 100644 --- a/lib/spellbook.lua +++ b/lib/spellbook.lua @@ -84,6 +84,37 @@ function regenerateMana:cast(caster, target) return true end +local attack = setmetatable({}, spell) + +function attack:cast(caster, target) + -- caster:try(Tree.behaviors.map, function(map) + -- local dist = math.ceil((target - map.position):length()) + -- if dist >= 2 then + -- return false + -- end + -- end) + + --- @type Character + local targetCharacter = Tree.level.characterGrid:get(target) + targetCharacter:try(Tree.behaviors.stats, function(stats) + stats.hp = stats.hp - 4 + end) + + caster:try(Tree.behaviors.sprite, function(sprite) + sprite:play("attack", function() + sprite:play("idle") + caster:has(Tree.behaviors.spellcaster):endCast() + end) + end) + targetCharacter:try(Tree.behaviors.sprite, function(sprite) + sprite:play("hurt", function() + sprite:play("idle") + end) + end) + + return true +end + ---------------------------------------- local spellbook = { walk = walk, diff --git a/lib/ui/layout.lua b/lib/ui/layout.lua index 96e8976..2295521 100644 --- a/lib/ui/layout.lua +++ b/lib/ui/layout.lua @@ -44,7 +44,8 @@ function layout:build() ui.Row { children = { setmetatable({ owner = Tree.level.characters[id], spellId = 1 }, { __index = SkillButton }), - setmetatable({ owner = Tree.level.characters[id], spellId = 2 }, { __index = SkillButton }) + setmetatable({ owner = Tree.level.characters[id], spellId = 2 }, { __index = SkillButton }), + setmetatable({ owner = Tree.level.characters[id], spellId = 3 }, { __index = SkillButton }) } } skillRows[id] = r