From ee951f8ca5b21213112def6102811f285c3ec9eb Mon Sep 17 00:00:00 2001 From: Bluub Date: Thu, 17 Jun 2021 12:33:27 +0200 Subject: [PATCH] starting aggressive pathing --- assets/ai_scripts/john.lua | 52 ++++++++++++++++++++++++++++++-------- 1 file changed, 42 insertions(+), 10 deletions(-) diff --git a/assets/ai_scripts/john.lua b/assets/ai_scripts/john.lua index ceeebcee..3363cb37 100644 --- a/assets/ai_scripts/john.lua +++ b/assets/ai_scripts/john.lua @@ -9,7 +9,7 @@ mapinfo.dist { } ------------ ------ Debug variables -local debug = true +local debug = false if not debug then log = function() end @@ -24,6 +24,7 @@ MaxX = 0 MaxY = 0 Map = {} Danger = {} +LastPos = nil ----- Map functions function PrintMap(map, MaxX, maxZ) @@ -119,7 +120,7 @@ function getNeighbors(node) end end end - if #neighbors == 0 then + if #neighbors == 0 and Danger[node.x][node.y] <= 1 then for _, dir in ipairs(Dirs) do local neighborX = node.x + dir.x local neighborY = node.y + dir.y @@ -217,23 +218,36 @@ function getPathToSafeSpace(player) local minYesc = (player.y - 3 < 0) and 0 or (player.y - 3); local MaxYesc = (player.y + 3 > MaxY) and MaxY or (player.y + 3); - local maybeSafeSpace = {} + local minDist = 100000 + local res = {} for i=minXesc,MaxXesc do for j=minYesc, MaxYesc do if Map[i][j] == 0 and Danger[i][j] == 0 then - table.insert(maybeSafeSpace, {x = i, y = j}) + local safe = {x = i, y = j} + local currDist = dist(player, safe) + if currDist < minDist then + minDist, res = currDist, safe + end end end end + local path = pathfind(player, res) + return path +end + +function getNeighborAttack() +end + +function getPathToEnemy(player, enemies) local minDist = 100000 local res = {} - for _, safe in ipairs(maybeSafeSpace) do - local currDist = dist(player, safe) + for _, enemy in ipairs(enemies) do + local currDist = dist(player, enemy) if currDist < minDist then - minDist, res = currDist, safe + minDist, res = currDist, enemy end end - local path = pathfind(player, res) + local path = pathfind(player, res, getNeighborAttack) return path end @@ -292,7 +306,25 @@ function Update(mapinfo) LastTarget = {x = f.x, y = f.y} return f.x - roundedPlayerPos.x, f.y - roundedPlayerPos.y, false, false else - log("SAFE") - return 0, 0, false, false; + local enemies = mapinfo.enemies + local pathToEnemy = getPathToEnemy(roundedPlayerPos, enemies) + if #pathToEnemy == 0 then + return 0, 0, false, false + end + local f = pathToEnemy[1] + log("first way of the path") + log(f.x) + log(f.y) + LastTarget = {x = f.x, y = f.y} + --pathfind to closest player + if LastPos == nil then + LastPos = {x = mapinfo.player.x, y = mapinfo.player.y} + else + if mapinfo.player.x == LastPos.x and mapinfo.player.y == LastPos.y then + return 0, 0, true, true + end + end + LastTarget = {x = f.x, y = f.y} + return f.x - roundedPlayerPos.x, f.y - roundedPlayerPos.y, false, false; end end \ No newline at end of file