Add support for changing target/danger of built-in AI strategies

This commit is contained in:
2022-08-19 12:11:05 +02:00
parent cfd53fdd10
commit 5c97a014f5
3 changed files with 15 additions and 8 deletions

View File

@@ -9,13 +9,16 @@ import com.bartlomiejpluta.base.util.path.MovementPath;
import com.bartlomiejpluta.base.util.path.PathExecutor;
import com.bartlomiejpluta.base.util.pathfinder.PathFinder;
import lombok.NonNull;
import lombok.Setter;
public abstract class FollowEntityAI<N extends NPC, T extends Entity> implements AI {
private final PathFinder finder;
private final PathExecutor<N> executor;
private final N npc;
private final T target;
@Setter(onParam = @__(@NonNull))
private T target;
private MovementPath<N> path = null;

View File

@@ -9,6 +9,7 @@ import com.bartlomiejpluta.base.util.path.MovementPath;
import com.bartlomiejpluta.base.util.path.PathExecutor;
import com.bartlomiejpluta.base.util.pathfinder.PathFinder;
import lombok.NonNull;
import lombok.Setter;
import org.joml.Vector2i;
import org.joml.Vector2ic;
@@ -16,7 +17,9 @@ import java.util.ArrayList;
public abstract class KeepStraightDistanceAI<N extends NPC, T extends Entity> implements AI {
private final N npc;
private final T target;
@Setter(onParam = @__(@NonNull))
private T target;
private final PathFinder finder;
private final PathExecutor<N> executor;
private final int minRange;
@@ -131,7 +134,7 @@ public abstract class KeepStraightDistanceAI<N extends NPC, T extends Entity> im
// we abandon finding another path and start to interact
for (var position : consideredPositions) {
if (npc.getCoordinates().equals(position)) {
npc.setFaceDirection(npc.getDirectionTowards(this.target));
npc.setFaceDirection(npc.getDirectionTowards(target));
interact(npc, target, layer, dt);
return;
}

View File

@@ -5,18 +5,19 @@ import com.bartlomiejpluta.base.api.ai.NPC;
import com.bartlomiejpluta.base.api.entity.Entity;
import com.bartlomiejpluta.base.api.map.layer.object.ObjectLayer;
import com.bartlomiejpluta.base.api.move.Direction;
import lombok.AllArgsConstructor;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import java.util.Random;
@RequiredArgsConstructor
@AllArgsConstructor
public class RunawayAI<N extends NPC, T extends Entity> implements AI {
@NonNull
private final N npc;
@NonNull
private final T character;
@Setter(onParam = @__(@NonNull))
private T danger;
private final Random random = new Random();
@@ -26,7 +27,7 @@ public class RunawayAI<N extends NPC, T extends Entity> implements AI {
return;
}
var direction = npc.getDirectionTowards(character).opposite();
var direction = npc.getDirectionTowards(danger).opposite();
if (tryToMove(layer, direction)) {
return;
}