From f5583f6bc8d7dbecf9d57a736513abdd389f32e5 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 23 Nov 2017 22:10:31 -0500 Subject: [PATCH] Fixed many pathfinding issues --- core/assets/maps/delta.png | Bin 2469 -> 2506 bytes core/assets/maps/maze.png | Bin 2791 -> 2799 bytes core/assets/sprites/sprites.png | Bin 49704 -> 49705 bytes core/src/io/anuke/mindustry/Vars.java | 6 +- .../src/io/anuke/mindustry/ai/MHueristic.java | 17 ++- core/src/io/anuke/mindustry/ai/Pathfind.java | 120 ++++++++++-------- .../io/anuke/mindustry/ai/TileConnection.java | 8 +- core/src/io/anuke/mindustry/core/Control.java | 6 +- .../io/anuke/mindustry/entities/Player.java | 9 +- .../mindustry/entities/enemies/Enemy.java | 34 +++-- .../io/anuke/mindustry/resource/Weapon.java | 2 +- .../mindustry/ui/fragments/HudFragment.java | 21 +-- core/src/io/anuke/mindustry/world/World.java | 2 + 13 files changed, 141 insertions(+), 84 deletions(-) diff --git a/core/assets/maps/delta.png b/core/assets/maps/delta.png index 8cde6f4a3ae2aa8261fe1916e37374416b4d05a9..c04d38eb493075cfcc22720868db13191b9ed623 100644 GIT binary patch delta 2432 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%0AH~ z$OfqV7~?b^6A3-u!0d(sZEMLs@A!YLv)$ o2-wC(z(&9}HUc&RwqYLs1L&D{P%1p%b^rhX07*qoM6N<$g8e*#`v3p{ diff --git a/core/assets/maps/maze.png b/core/assets/maps/maze.png index 82684d1761cd57d7ef74fcfd1c1eb9fbec05f1c8..5e681efa2eb7f6ee5c8518406f9c5be7bbbc956b 100644 GIT binary patch literal 2799 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 delta 2418 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

FtnnPh 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 U{M0K?2-yLnLuLoF^__0~KeosP4gdfE delta 32543 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

_H^-==~7N7)@Lj^#PY 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®fB*;~u^o*y9DAc3tg9wv5`~~Y= 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 //so this means that the cost of going through solids is 10x going through non solids - float multiplier = 10f; + static float multiplier = 10f; @Override public float estimate(Tile node, Tile other){ + return estimateStatic(node, other); + } + + public static float estimateStatic(Tile node, Tile other){ float cost = Math.abs(node.worldx() - other.worldx()) + Math.abs(node.worldy() - other.worldy()); //TODO balance multiplier if(node.breakable() && node.block().solid) cost += Vars.tilesize*multiplier; if(other.breakable() && other.block().solid) cost += Vars.tilesize*multiplier; - for(Tile tile : node.getNearby()){ - if(tile != null && tile.solid()){ - //don't go near solid tiles! - cost += Vars.tilesize*3; + for(int dx = -1; dx <= 1; dx ++){ + for(int dy = -1; dy <= 1; dy ++){ + Tile tile = World.tile(node.x + dx, node.y + dy); + if(tile != null && tile.solid()){ + cost += Vars.tilesize*5; + } } } return cost; diff --git a/core/src/io/anuke/mindustry/ai/Pathfind.java b/core/src/io/anuke/mindustry/ai/Pathfind.java index 578dd02fa8..646c8a7f12 100644 --- a/core/src/io/anuke/mindustry/ai/Pathfind.java +++ b/core/src/io/anuke/mindustry/ai/Pathfind.java @@ -1,57 +1,88 @@ package io.anuke.mindustry.ai; import com.badlogic.gdx.ai.pfa.PathFinder; -import com.badlogic.gdx.ai.pfa.PathFinderRequest; import com.badlogic.gdx.ai.pfa.PathSmoother; import com.badlogic.gdx.ai.pfa.indexed.IndexedAStarPathFinder; +import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Array; +import io.anuke.mindustry.Vars; +import io.anuke.mindustry.entities.effect.Fx; import io.anuke.mindustry.entities.enemies.Enemy; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.World; -import io.anuke.ucore.core.Timers; +import io.anuke.ucore.core.Effects; +import io.anuke.ucore.util.Angles; +import io.anuke.ucore.util.Tmp; public class Pathfind{ static MHueristic heuristic = new MHueristic(); - static PassTileGraph graph = new PassTileGraph(); - static PathFinder finder = new IndexedAStarPathFinder(graph); + static PassTileGraph passgraph = new PassTileGraph(); + static PathFinder passpathfinder; + static Array paths = new Array<>(); + static Tile[][] pathSequences; static PathSmoother smoother = new PathSmoother(new Raycaster()); static Vector2 vector = new Vector2(); static public Vector2 find(Enemy enemy){ - findNode(enemy); - - if(enemy.node <= -1) return vector.set(enemy.x, enemy.y); + if(enemy.node == -1){ + findNode(enemy); + } //-1 is only possible here if both pathfindings failed, which should NOT happen //check graph code - //Tile[] path = enemy.path; - Array path = enemy.gpath.nodes; + Tile[] path = enemy.path; + + Tile prev = path[enemy.node - 1]; - Tile target = path.get(enemy.node); + Tile target = path[enemy.node]; + + float projectLen = Vector2.dst(prev.worldx(), prev.worldy(), target.worldx(), target.worldy()) / 6f; + + Vector2 projection = projectPoint(prev.worldx(), prev.worldy(), + target.worldx(), target.worldy(), enemy.x, enemy.y); + + boolean canProject = true; + + if(projectLen < 8 || !onLine(projection, prev.worldx(), prev.worldy(), target.worldx(), target.worldy())){ + canProject = false; + }else{ + projection.add(Angles.translation(Angles.angle(prev.worldx(), prev.worldy(), + target.worldx(), target.worldy()), projectLen)); + } float dst = Vector2.dst(enemy.x, enemy.y, target.worldx(), target.worldy()); - if(dst < 2){ - if(enemy.node <= path.size-2) + if(dst < 8){ + if(enemy.node <= path.length-2) enemy.node ++; - target = path.get(enemy.node); + target = path[enemy.node]; + } + + if(canProject && projection.dst(enemy.x, enemy.y) < Vector2.dst(target.x, target.y, enemy.x, enemy.y)){ + vector.set(projection); + }else{ + vector.set(target.worldx(), target.worldy()); } //near the core, stop - if(enemy.node == path.size - 1){ + if(enemy.node == path.length - 1){ vector.set(target.worldx(), target.worldy()); } - return vector.set(target.worldx(), target.worldy()); + return vector; } + static public void reset(){ + paths.clear(); + pathSequences = null; + passpathfinder = new IndexedAStarPathFinder(passgraph); + } + static public void updatePath(){ - - /* if(paths.size == 0 || paths.size != World.spawnpoints.size){ paths.clear(); pathSequences = new Tile[World.spawnpoints.size][0]; @@ -61,6 +92,13 @@ public class Pathfind{ } } + //TODO make this work? + /* + PathFinderRequest request = new PathFinderRequest(); + request.startNode = World.spawnpoints.get(0); + request.endNode = World.core; + passpathfinder.search(request, 1000); */ + for(int i = 0; i < paths.size; i ++){ SmoothGraphPath path = paths.get(i); @@ -85,47 +123,18 @@ public class Pathfind{ Effects.effect(Fx.ind, tile.worldx(), tile.worldy()); } - }*/ + } } static void findNode(Enemy enemy){ - /* enemy.path = pathSequences[enemy.spawn]; Tile[] path = enemy.path; - */ - - - - if(enemy.node == -1 || (Timers.get(enemy, "pathfind", 120) && enemy.request.pathFound)){ - - enemy.gpath = new SmoothGraphPath(); - enemy.finder = new IndexedAStarPathFinder(graph); - enemy.gpath.clear(); - - enemy.request = new PathFinderRequest(World.tileWorld(enemy.x, enemy.y), - World.core, - heuristic, enemy.gpath); - enemy.request.statusChanged = true; - - enemy.node = -2; - } - - if(enemy.gpath != null && !enemy.request.pathFound){ - enemy.request.executionFrames ++; - if(enemy.finder.search(enemy.request, 1000000 / 5)){ - smoother.smoothPath(enemy.gpath); - enemy.node = 1; - //UCore.log("done in " + enemy.request.executionFrames + " frames with path of size " + enemy.gpath.getCount()); - } - } - - /* Tile closest = null; float ldst = 0f; int cindex = -1; - for(int i = 0; i < path.size; i ++){ - Tile tile = path.get(i); + for(int i = 0; i < path.length; i ++){ + Tile tile = path[i]; float dst = Vector2.dst(tile.worldx(), tile.worldy(), enemy.x, enemy.y); if(closest == null || dst < ldst){ @@ -134,6 +143,17 @@ public class Pathfind{ cindex = i; } } - enemy.node = cindex;*/ + enemy.node = Math.max(cindex, 1); + } + + private static boolean onLine(Vector2 vector, float x1, float y1, float x2, float y2){ + return MathUtils.isEqual(vector.dst(x1, y1) + vector.dst(x2, y2), Vector2.dst(x1, y1, x2, y2), 0.01f); + } + + private static Vector2 projectPoint(float x1, float y1, float x2, float y2, float pointx, float pointy){ + float px = x2-x1, py = y2-y1, dAB = px*px + py*py; + float u = ((pointx - x1) * px + (pointy - y1) * py) / dAB; + float x = x1 + u * px, y = y1 + u * py; + return Tmp.v3.set(x, y); //this is D } } diff --git a/core/src/io/anuke/mindustry/ai/TileConnection.java b/core/src/io/anuke/mindustry/ai/TileConnection.java index a5201e6be6..26ce5bf0a9 100644 --- a/core/src/io/anuke/mindustry/ai/TileConnection.java +++ b/core/src/io/anuke/mindustry/ai/TileConnection.java @@ -4,7 +4,7 @@ import com.badlogic.gdx.ai.pfa.Connection; import io.anuke.mindustry.world.Tile; -public class TileConnection implements Connection{ +public class TileConnection implements Connection{ Tile a, b; public TileConnection(Tile a, Tile b){ @@ -14,16 +14,16 @@ public class TileConnection implements Connection{ @Override public float getCost(){ - return Math.abs(a.worldx() - b.worldx()) + Math.abs(a.worldy() - b.worldy()); + return MHueristic.estimateStatic(a, b); } @Override - public Object getFromNode(){ + public Tile getFromNode(){ return a; } @Override - public Object getToNode(){ + public Tile getToNode(){ return b; } diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index 9b4ac2ba76..f9e090429a 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -243,7 +243,7 @@ public class Control extends Module{ for(int i = 0; i < spawnamount; i ++){ int index = i; - float range = 8f; + float range = 12f; Timers.run(index*50f, ()->{ try{ @@ -419,6 +419,10 @@ public class Control extends Module{ } } + if(Inputs.keyUp(Keys.O)){ + Vars.noclip = !Vars.noclip; + } + if(Inputs.keyUp(Keys.Y)){ if(Inputs.keyDown(Keys.SHIFT_LEFT)){ new HealerEnemy(0).set(player.x, player.y).add(); diff --git a/core/src/io/anuke/mindustry/entities/Player.java b/core/src/io/anuke/mindustry/entities/Player.java index 5286def09b..ff4d9800a7 100644 --- a/core/src/io/anuke/mindustry/entities/Player.java +++ b/core/src/io/anuke/mindustry/entities/Player.java @@ -35,6 +35,8 @@ public class Player extends DestructibleEntity{ @Override public void onDeath(){ + if(Vars.debug) return; + remove(); Effects.effect(Fx.explosion, this); Effects.shake(4f, 5f, this); @@ -85,7 +87,12 @@ public class Player extends DestructibleEntity{ vector.limit(speed); - move(vector.x*Timers.delta(), vector.y*Timers.delta()); + if(!Vars.noclip){ + move(vector.x*Timers.delta(), vector.y*Timers.delta()); + }else{ + x += vector.x*Timers.delta(); + y += vector.y*Timers.delta(); + } if(!shooting){ direction.add(vector); diff --git a/core/src/io/anuke/mindustry/entities/enemies/Enemy.java b/core/src/io/anuke/mindustry/entities/enemies/Enemy.java index 45a9011c18..c48e0999fb 100644 --- a/core/src/io/anuke/mindustry/entities/enemies/Enemy.java +++ b/core/src/io/anuke/mindustry/entities/enemies/Enemy.java @@ -1,7 +1,5 @@ package io.anuke.mindustry.entities.enemies; -import com.badlogic.gdx.ai.pfa.PathFinder; -import com.badlogic.gdx.ai.pfa.PathFinderRequest; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Array; @@ -9,7 +7,6 @@ import com.badlogic.gdx.utils.reflect.ClassReflection; import io.anuke.mindustry.Vars; import io.anuke.mindustry.ai.Pathfind; -import io.anuke.mindustry.ai.SmoothGraphPath; import io.anuke.mindustry.entities.Bullet; import io.anuke.mindustry.entities.BulletType; import io.anuke.mindustry.entities.Player; @@ -23,7 +20,12 @@ import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Tmp; public class Enemy extends DestructibleEntity{ - public final static Color[] tierColors = {Color.YELLOW, Color.ORANGE, Color.RED, Color.MAGENTA}; + public final static Color[] tierColors = { + Color.valueOf("ffe451"), + Color.valueOf("f48e20"), + Color.valueOf("ff6757"), + Color.valueOf("ff2d86") + }; public final static int maxtier = 4; protected float speed = 0.3f; @@ -37,11 +39,9 @@ public class Enemy extends DestructibleEntity{ protected String shootsound = "enemyshoot"; protected int damage; - public PathFinderRequest request = new PathFinderRequest<>();; - public SmoothGraphPath gpath; public int spawn; public int node = -1; - public PathFinder finder; + public Tile[] path; public Vector2 direction = new Vector2(); public float xvelocity, yvelocity; @@ -80,16 +80,23 @@ public class Enemy extends DestructibleEntity{ Vector2 shift = Tmp.v3.setZero(); float shiftRange = hitbox.width + 3f; + float avoidRange = 16f; + float avoidSpeed = 0.1f; for(SolidEntity other : entities){ float dst = other.distanceTo(this); - if(other != this && other instanceof Enemy && dst < shiftRange){ - float scl = Mathf.clamp(1.4f - dst/shiftRange); - shift.add((x - other.x) * scl, (y - other.y) * scl); + if(other != this && other instanceof Enemy){ + if(dst < shiftRange){ + float scl = Mathf.clamp(1.4f - dst/shiftRange); + shift.add((x - other.x) * scl, (y - other.y) * scl); + }else if(dst < avoidRange){ + Tmp.v2.set((x - other.x), (y - other.y)).setLength(avoidSpeed); + shift.add(Tmp.v2); + } } } - shift.nor(); + shift.limit(1f); vec.add(shift.scl(0.5f)); move(vec.x*Timers.delta(), vec.y*Timers.delta()); @@ -127,7 +134,6 @@ public class Enemy extends DestructibleEntity{ public void findClosestNode(){ Pathfind.find(this); - /* int index = 0; int cindex = -1; @@ -143,6 +149,8 @@ public class Enemy extends DestructibleEntity{ index ++; } + node = Math.max(cindex, 1); + //set node to that index node = cindex; @@ -153,7 +161,7 @@ public class Enemy extends DestructibleEntity{ Timers.run(Mathf.random(15f), ()->{ set(x2 * Vars.tilesize, y2 * Vars.tilesize); }); - }*/ + } } @Override diff --git a/core/src/io/anuke/mindustry/resource/Weapon.java b/core/src/io/anuke/mindustry/resource/Weapon.java index 395ceb5021..60c54bc669 100644 --- a/core/src/io/anuke/mindustry/resource/Weapon.java +++ b/core/src/io/anuke/mindustry/resource/Weapon.java @@ -49,7 +49,7 @@ public enum Weapon{ bullet(p, p.x, p.y, ang + Mathf.range(8)); - Effects.effect(Fx.shoot, p.x + vector.x, p.y+vector.y); + Effects.effect(Fx.shoot2, p.x + vector.x, p.y+vector.y); } }, flamer(5, BulletType.flame, "Shoots a stream of fire.", stack(Item.steel, 60), stack(Item.coal, 60)){ diff --git a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java index da90f16e4e..837f0c4fd6 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java @@ -7,6 +7,7 @@ import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.utils.Array; import io.anuke.mindustry.Mindustry; +import io.anuke.mindustry.Vars; import io.anuke.mindustry.core.GameState; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.resource.Item; @@ -141,18 +142,22 @@ public class HudFragment implements Fragment{ aleft(); new label((StringSupplier)()->"[purple]entities: " + Entities.amount()).left(); row(); + new label((StringSupplier)()->"[orange]noclip: " + Vars.noclip).left(); + row(); new label("[red]DEBUG MODE").scale(0.5f).left(); }}.end(); - new table(){{ - atop(); - new table("button"){{ - defaults().left().growX(); + if(profile){ + new table(){{ atop(); - aleft(); - new label((StringSupplier)()->Profiler.formatDisplayTimes()); - }}.width(400f).end(); - }}.end(); + new table("button"){{ + defaults().left().growX(); + atop(); + aleft(); + new label((StringSupplier)()->Profiler.formatDisplayTimes()); + }}.width(400f).end(); + }}.end(); + } } } diff --git a/core/src/io/anuke/mindustry/world/World.java b/core/src/io/anuke/mindustry/world/World.java index 3ae112b316..e5b6597b0f 100644 --- a/core/src/io/anuke/mindustry/world/World.java +++ b/core/src/io/anuke/mindustry/world/World.java @@ -150,6 +150,8 @@ public class World{ World.seed = seed; Generator.generate(mapPixmaps[map.ordinal()]); + Pathfind.reset(); + //TODO multiblock core placeBlock(core.x, core.y, ProductionBlocks.core, 0);