diff --git a/lib/level/selector.lua b/lib/level/selector.lua index b32b617..fb9f9f6 100644 --- a/lib/level/selector.lua +++ b/lib/level/selector.lua @@ -28,6 +28,7 @@ function selector:update(dt) return self:select(selectedId) else local char = Tree.level.characters[self.id] + char:try(Tree.behaviors.spellcaster, function(b) if not b.cast then self:select(selectedId) diff --git a/lib/spellbook.lua b/lib/spellbook.lua index 27a226d..93d6368 100644 --- a/lib/spellbook.lua +++ b/lib/spellbook.lua @@ -87,15 +87,18 @@ 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) + if caster:try(Tree.behaviors.map, function(map) + local dist = math.max(math.abs(map.position.x - target.x), math.abs(map.position.y - target.y)) + print("dist:", dist) + return dist >= 2 + end) then + return false + end --- @type Character - local targetCharacter = Tree.level.characterGrid:get(target) + local targetCharacterId = Tree.level.characterGrid:get(target) + if not targetCharacterId then return false end + local targetCharacter = Tree.level.characters[targetCharacterId] targetCharacter:try(Tree.behaviors.stats, function(stats) stats.hp = stats.hp - 4 end) @@ -103,22 +106,24 @@ function attack:cast(caster, target) 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") + targetCharacter:try(Tree.behaviors.sprite, function(targetSprite) + targetSprite:play("hurt", function() + targetSprite:play("idle") + caster:has(Tree.behaviors.spellcaster):endCast() + end) + end) end) end) + return true end ---------------------------------------- local spellbook = { walk = walk, - regenerateMana = regenerateMana + regenerateMana = regenerateMana, + attack = attack } --- Создает новый спеллбук с уникальными спеллами (а не ссылками на шаблоны) diff --git a/lib/ui/layout.lua b/lib/ui/layout.lua index 2295521..3a3b544 100644 --- a/lib/ui/layout.lua +++ b/lib/ui/layout.lua @@ -43,9 +43,9 @@ function layout:build() local r = 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 = 3 }, { __index = SkillButton }) + ui.Padding { padding = { left = 4, right = 4 }, child = setmetatable({ owner = Tree.level.characters[id], spellId = 1 }, { __index = SkillButton }) }, + ui.Padding { padding = { left = 4, right = 4 }, child = setmetatable({ owner = Tree.level.characters[id], spellId = 2 }, { __index = SkillButton }) }, + ui.Padding { padding = { left = 4, right = 4 }, child = setmetatable({ owner = Tree.level.characters[id], spellId = 3 }, { __index = SkillButton }) }, } } skillRows[id] = r