diff --git a/api/src/main/java/com/bartlomiejpluta/base/lib/ai/FollowPathAI.java b/api/src/main/java/com/bartlomiejpluta/base/lib/ai/FollowPathAI.java index f3315ecc..5b401f8d 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/lib/ai/FollowPathAI.java +++ b/api/src/main/java/com/bartlomiejpluta/base/lib/ai/FollowPathAI.java @@ -5,10 +5,15 @@ import com.bartlomiejpluta.base.api.ai.NPC; import com.bartlomiejpluta.base.api.map.layer.object.ObjectLayer; import com.bartlomiejpluta.base.util.path.Path; import com.bartlomiejpluta.base.util.path.PathExecutor; +import com.bartlomiejpluta.base.util.path.PathProgress; +import lombok.Getter; public class FollowPathAI implements AI { private final PathExecutor executor; + @Getter + private PathProgress progress = PathProgress.NOT_STARTED; + public FollowPathAI(T npc) { this.executor = new PathExecutor<>(npc); } @@ -23,8 +28,13 @@ public class FollowPathAI implements AI { return this; } + public FollowPathAI reset() { + executor.reset(); + return this; + } + @Override public void nextActivity(ObjectLayer layer, float dt) { - executor.execute(layer, dt); + progress = executor.execute(layer, dt); } } diff --git a/api/src/main/java/com/bartlomiejpluta/base/util/path/BasePath.java b/api/src/main/java/com/bartlomiejpluta/base/util/path/BasePath.java index 9f155fb4..f34e9f49 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/util/path/BasePath.java +++ b/api/src/main/java/com/bartlomiejpluta/base/util/path/BasePath.java @@ -35,6 +35,11 @@ public class BasePath implements Path { return this; } + public Path insertPath(Path path) { + this.path.addAll(path.getPath()); + return this; + } + public Path move(Direction direction) { path.add(new MoveSegment<>(direction)); return this; diff --git a/api/src/main/java/com/bartlomiejpluta/base/util/path/CharacterPath.java b/api/src/main/java/com/bartlomiejpluta/base/util/path/CharacterPath.java index b9dc916a..25dcac5a 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/util/path/CharacterPath.java +++ b/api/src/main/java/com/bartlomiejpluta/base/util/path/CharacterPath.java @@ -35,6 +35,11 @@ public class CharacterPath implements Path { return this; } + public CharacterPath insertPath(Path path) { + this.path.addAll(path.getPath()); + return this; + } + public CharacterPath move(Direction direction) { path.add(new MoveSegment<>(direction)); return this; diff --git a/api/src/main/java/com/bartlomiejpluta/base/util/path/CompletableFutureSegment.java b/api/src/main/java/com/bartlomiejpluta/base/util/path/CompletableFutureSegment.java index 6f429ce1..68060d83 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/util/path/CompletableFutureSegment.java +++ b/api/src/main/java/com/bartlomiejpluta/base/util/path/CompletableFutureSegment.java @@ -10,10 +10,13 @@ import java.util.function.Supplier; @RequiredArgsConstructor public class CompletableFutureSegment implements PathSegment { private final Supplier> futureSupplier; + private CompletableFuture future; @Override public PathProgress perform(T movable, ObjectLayer layer, float dt) { - var future = futureSupplier.get(); + if (future == null) { + future = futureSupplier.get(); + } if (future.isCancelled() || future.isCompletedExceptionally()) { return PathProgress.SEGMENT_FAILED; diff --git a/api/src/main/java/com/bartlomiejpluta/base/util/path/PathProgress.java b/api/src/main/java/com/bartlomiejpluta/base/util/path/PathProgress.java index 23c05ab4..0e5c8f45 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/util/path/PathProgress.java +++ b/api/src/main/java/com/bartlomiejpluta/base/util/path/PathProgress.java @@ -1,6 +1,7 @@ package com.bartlomiejpluta.base.util.path; public enum PathProgress { + NOT_STARTED, ONGOING, SEGMENT_DONE, SEGMENT_FAILED,