Make FollowEntityAI configurable via constructor arguments
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
@@ -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;
|
||||||
Reference in New Issue
Block a user