diff --git a/lib/character/behaviors/ai.lua b/lib/character/behaviors/ai.lua index 99ca588..fbd9fcf 100644 --- a/lib/character/behaviors/ai.lua +++ b/lib/character/behaviors/ai.lua @@ -1,5 +1,25 @@ local AnimationNode = require "lib.animation_node" +local function closestCharacter(char) + local caster = Vec3 {} + char:try(Tree.behaviors.positioned, function(b) + caster = b.position + end) + local charTarget + local minDist = 88005553535 -- spooky magic number + for k, v in pairs(Tree.level.characters) do + v:try(Tree.behaviors.positioned, function(b) + local dist = ((caster.x - b.position.x) ^ 2 + (caster.y - b.position.y) ^ 2) ^ 0.5 + if dist < minDist and dist ~= 0 then + minDist = dist + charTarget = v + end + -- print(k, b.position) + end) + end + return charTarget +end + --- @class AIBehavior : Behavior --- @field animationNode AnimationNode? local behavior = {} @@ -41,31 +61,12 @@ function behavior:makeMove() children = { AnimationNode { function(node) - local caster = Vec3 {} - self.owner:try(Tree.behaviors.positioned, function(b) - caster = b.position - end) - local target = Vec3 {} - local charTarget - local minDist = 88005553535 -- spooky magic number - for k, v in pairs(Tree.level.characters) do - v:try(Tree.behaviors.positioned, function(b) - local dist = ((caster.x - b.position.x) ^ 2 + (caster.y - b.position.y) ^ 2) ^ 0.5 - if dist < minDist and dist ~= 0 then - minDist = dist - target = b.position - charTarget = v - end - -- print(k, b.position) - end) - break - end - -- print(target) + local charTarget = closestCharacter(self.owner) + local target charTarget:try(Tree.behaviors.positioned, function(b) - target = Vec3 { target.x, target.y + 1 } --- @todo тут захардкожено + 1, но мы должны как-то хитро определять с какой стороны обойти + target = Vec3 { b.position.x, b.position.y + 1 } --- @todo тут захардкожено + 1, но мы должны как-то хитро определять с какой стороны обойти end) spellB.spellbook[1]:cast(self.owner, target) - -- print(minDist, target) end } } diff --git a/main.lua b/main.lua index 460acc5..dff5af9 100644 --- a/main.lua +++ b/main.lua @@ -23,6 +23,26 @@ function love.load() Tree.behaviors.shadowcaster.new(), Tree.behaviors.spellcaster.new() }, + character.spawn("Foodor") + :addBehavior { + Tree.behaviors.residentsleeper.new(), + Tree.behaviors.stats.new(nil, nil, 1), + Tree.behaviors.positioned.new(Vec3 { 4, 3 }), + Tree.behaviors.tiled.new(), + Tree.behaviors.sprite.new(Tree.assets.files.sprites.character), + Tree.behaviors.shadowcaster.new(), + Tree.behaviors.spellcaster.new() + }, + character.spawn("Foodor") + :addBehavior { + Tree.behaviors.residentsleeper.new(), + Tree.behaviors.stats.new(nil, nil, 1), + Tree.behaviors.positioned.new(Vec3 { 5, 3 }), + Tree.behaviors.tiled.new(), + Tree.behaviors.sprite.new(Tree.assets.files.sprites.character), + Tree.behaviors.shadowcaster.new(), + Tree.behaviors.spellcaster.new() + }, character.spawn("Baris") :addBehavior { Tree.behaviors.residentsleeper.new(),