Make FollowEntityAI configurable via constructor arguments

This commit is contained in:
2021-03-08 20:19:46 +01:00
parent 4768b1abd3
commit edf5a50f05
3 changed files with 10 additions and 11 deletions

View File

@@ -3,21 +3,21 @@ package com.bartlomiejpluta.base.api.game.ai;
import com.bartlomiejpluta.base.api.game.entity.Direction; import com.bartlomiejpluta.base.api.game.entity.Direction;
import com.bartlomiejpluta.base.api.game.entity.Entity; import com.bartlomiejpluta.base.api.game.entity.Entity;
import com.bartlomiejpluta.base.api.game.map.layer.object.ObjectLayer; import com.bartlomiejpluta.base.api.game.map.layer.object.ObjectLayer;
import com.bartlomiejpluta.base.api.util.pathfinding.AstarPathFinder; import com.bartlomiejpluta.base.api.util.pathfinder.PathFinder;
import com.bartlomiejpluta.base.api.util.pathfinding.PathFinder;
import org.joml.Vector2i; import org.joml.Vector2i;
public class FollowEntityAI implements AI { public class FollowEntityAI implements AI {
private static final float recalculateInterval = 0.5f;
private final NPC npc; private final NPC npc;
private final Entity target; private final Entity target;
private final PathFinder pathFinder = new AstarPathFinder(100); private final PathFinder pathFinder;
private final int range; private final int range;
private final float recalculateInterval;
private float accumulator = 0.0f; private float accumulator = 0.0f;
public FollowEntityAI(NPC npc, Entity target, int range) { public FollowEntityAI(PathFinder pathFinder, float recalculateInterval, NPC npc, Entity target, int range) {
this.pathFinder = pathFinder;
this.recalculateInterval = recalculateInterval;
this.npc = npc; this.npc = npc;
this.range = range; this.range = range;
this.target = target; this.target = target;
@@ -27,7 +27,7 @@ public class FollowEntityAI implements AI {
public void nextActivity(ObjectLayer layer, float dt) { public void nextActivity(ObjectLayer layer, float dt) {
var distance = npc.manhattanDistance(target); var distance = npc.manhattanDistance(target);
if (!npc.isMoving() && distance > 1 && distance < range && accumulator >= recalculateInterval) { if (!npc.isMoving() && 1 < distance && distance < range && accumulator >= recalculateInterval) {
var path = pathFinder.findPath(layer, npc.getCoordinates(), target.getCoordinates()); var path = pathFinder.findPath(layer, npc.getCoordinates(), target.getCoordinates());
if (!path.isEmpty()) { if (!path.isEmpty()) {
@@ -46,4 +46,3 @@ public class FollowEntityAI implements AI {
accumulator += dt; accumulator += dt;
} }
} }

View File

@@ -1,4 +1,4 @@
package com.bartlomiejpluta.base.api.util.pathfinding; package com.bartlomiejpluta.base.api.util.pathfinder;
import com.bartlomiejpluta.base.api.game.map.layer.object.ObjectLayer; import com.bartlomiejpluta.base.api.game.map.layer.object.ObjectLayer;
import org.joml.Vector2i; import org.joml.Vector2i;

View File

@@ -1,4 +1,4 @@
package com.bartlomiejpluta.base.api.util.pathfinding; package com.bartlomiejpluta.base.api.util.pathfinder;
import com.bartlomiejpluta.base.api.game.map.layer.object.ObjectLayer; import com.bartlomiejpluta.base.api.game.map.layer.object.ObjectLayer;
import org.joml.Vector2i; import org.joml.Vector2i;