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.path.PathExecutor;
import com.bartlomiejpluta.base.util.pathfinder.PathFinder; import com.bartlomiejpluta.base.util.pathfinder.PathFinder;
import lombok.NonNull; import lombok.NonNull;
import lombok.Setter;
public abstract class FollowEntityAI<N extends NPC, T extends Entity> implements AI { public abstract class FollowEntityAI<N extends NPC, T extends Entity> implements AI {
private final PathFinder finder; private final PathFinder finder;
private final PathExecutor<N> executor; private final PathExecutor<N> executor;
private final N npc; private final N npc;
private final T target;
@Setter(onParam = @__(@NonNull))
private T target;
private MovementPath<N> path = null; 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.path.PathExecutor;
import com.bartlomiejpluta.base.util.pathfinder.PathFinder; import com.bartlomiejpluta.base.util.pathfinder.PathFinder;
import lombok.NonNull; import lombok.NonNull;
import lombok.Setter;
import org.joml.Vector2i; import org.joml.Vector2i;
import org.joml.Vector2ic; import org.joml.Vector2ic;
@@ -16,7 +17,9 @@ import java.util.ArrayList;
public abstract class KeepStraightDistanceAI<N extends NPC, T extends Entity> implements AI { public abstract class KeepStraightDistanceAI<N extends NPC, T extends Entity> implements AI {
private final N npc; private final N npc;
private final T target; @Setter(onParam = @__(@NonNull))
private T target;
private final PathFinder finder; private final PathFinder finder;
private final PathExecutor<N> executor; private final PathExecutor<N> executor;
private final int minRange; 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 // we abandon finding another path and start to interact
for (var position : consideredPositions) { for (var position : consideredPositions) {
if (npc.getCoordinates().equals(position)) { if (npc.getCoordinates().equals(position)) {
npc.setFaceDirection(npc.getDirectionTowards(this.target)); npc.setFaceDirection(npc.getDirectionTowards(target));
interact(npc, target, layer, dt); interact(npc, target, layer, dt);
return; 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.entity.Entity;
import com.bartlomiejpluta.base.api.map.layer.object.ObjectLayer; import com.bartlomiejpluta.base.api.map.layer.object.ObjectLayer;
import com.bartlomiejpluta.base.api.move.Direction; import com.bartlomiejpluta.base.api.move.Direction;
import lombok.AllArgsConstructor;
import lombok.NonNull; import lombok.NonNull;
import lombok.RequiredArgsConstructor; import lombok.Setter;
import java.util.Random; import java.util.Random;
@RequiredArgsConstructor @AllArgsConstructor
public class RunawayAI<N extends NPC, T extends Entity> implements AI { public class RunawayAI<N extends NPC, T extends Entity> implements AI {
@NonNull @NonNull
private final N npc; private final N npc;
@NonNull @Setter(onParam = @__(@NonNull))
private final T character; private T danger;
private final Random random = new Random(); private final Random random = new Random();
@@ -26,7 +27,7 @@ public class RunawayAI<N extends NPC, T extends Entity> implements AI {
return; return;
} }
var direction = npc.getDirectionTowards(character).opposite(); var direction = npc.getDirectionTowards(danger).opposite();
if (tryToMove(layer, direction)) { if (tryToMove(layer, direction)) {
return; return;
} }