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 7bc3c987..aef70e97 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 @@ -6,6 +6,7 @@ import lombok.Getter; import java.util.ArrayList; import java.util.List; +import java.util.function.Predicate; public class BasePath implements Path { @@ -41,4 +42,9 @@ public class BasePath implements Path { path.add(new RunSegment<>(runnable)); return this; } + + public Path suspend(Predicate predicate) { + path.add(new SuspendSegment<>(predicate)); + 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 7ad776ab..a6478fb5 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 @@ -6,6 +6,7 @@ import lombok.Getter; import java.util.ArrayList; import java.util.List; +import java.util.function.Predicate; public class CharacterPath implements Path { @@ -51,4 +52,9 @@ public class CharacterPath implements Path { path.add(new RunSegment<>(runnable)); return this; } + + public CharacterPath suspend(Predicate predicate) { + path.add(new SuspendSegment<>(predicate)); + return this; + } } diff --git a/api/src/main/java/com/bartlomiejpluta/base/util/path/SuspendSegment.java b/api/src/main/java/com/bartlomiejpluta/base/util/path/SuspendSegment.java new file mode 100644 index 00000000..3e9b6b8a --- /dev/null +++ b/api/src/main/java/com/bartlomiejpluta/base/util/path/SuspendSegment.java @@ -0,0 +1,21 @@ +package com.bartlomiejpluta.base.util.path; + +import com.bartlomiejpluta.base.api.map.layer.object.ObjectLayer; +import com.bartlomiejpluta.base.api.move.Movable; +import lombok.RequiredArgsConstructor; + +import java.util.function.Predicate; + +@RequiredArgsConstructor +public class SuspendSegment implements PathSegment { + private final Predicate predicate; + + @Override + public PathProgress perform(T movable, ObjectLayer layer, float dt) { + if (predicate.test(movable)) { + return PathProgress.SEGMENT_DONE; + } + + return PathProgress.ONGOING; + } +}