diff --git a/src/main/java/org/terasology/minion/move/FindPathToNode.java b/src/main/java/org/terasology/minion/move/FindPathToNode.java
index a340753e..43e58931 100644
--- a/src/main/java/org/terasology/minion/move/FindPathToNode.java
+++ b/src/main/java/org/terasology/minion/move/FindPathToNode.java
@@ -15,7 +15,10 @@
*/
package org.terasology.minion.move;
-import com.google.gson.annotations.Expose;
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.MoreExecutors;
+import com.google.common.util.concurrent.SettableFuture;
import org.terasology.logic.behavior.BehaviorAction;
import org.terasology.logic.behavior.core.Actor;
import org.terasology.logic.behavior.core.BaseAction;
@@ -29,6 +32,7 @@
import org.terasology.registry.In;
import java.util.Arrays;
+import java.util.List;
/**
* Requests a path to a target defined using the MinionMoveComponent.target.
@@ -58,6 +62,8 @@ public void construct(final Actor actor) {
if(pathfinderSystem==null){setup();}
final MinionMoveComponent moveComponent = actor.getComponent(MinionMoveComponent.class);
Vector3f targetLocation = moveComponent.target;
+ moveComponent.path = null;
+ actor.save(moveComponent);
WalkableBlock currentBlock = moveComponent.currentBlock;
if (currentBlock == null || targetLocation == null) {
moveComponent.path = Path.INVALID;
@@ -68,21 +74,26 @@ public void construct(final Actor actor) {
moveComponent.path = Path.INVALID;
return;
}
- pathfinderSystem.requestPath(
+ SettableFuture> pathFuture = pathfinderSystem.requestPath(
actor.getEntity(), currentBlock.getBlockPosition(),
Arrays.asList(workTarget.getBlockPosition()));
- /*, new PathfinderSystem.PathReadyCallback() {
- @Override
- public void pathReady(int pathId, List path, WalkableBlock target, List start) {
- if (path == null) {
+ Futures.addCallback(pathFuture, new FutureCallback>() {
+ @Override
+ public void onSuccess(List paths) {
+ if (paths == null) {
moveComponent.path = Path.INVALID;
- } else if (path.size() > 0) {
- moveComponent.path = path.get(0);
+ } else if (paths.size() > 0) {
+ moveComponent.path = paths.get(0);
}
actor.save(moveComponent);
}
- });*/
+
+ @Override
+ public void onFailure(Throwable t) {
+ moveComponent.path = Path.INVALID;
+ }
+ });
}
@Override
diff --git a/src/main/java/org/terasology/minion/move/MoveAlongPathNode.java b/src/main/java/org/terasology/minion/move/MoveAlongPathNode.java
index 3a951245..58678709 100644
--- a/src/main/java/org/terasology/minion/move/MoveAlongPathNode.java
+++ b/src/main/java/org/terasology/minion/move/MoveAlongPathNode.java
@@ -26,6 +26,7 @@
import org.terasology.navgraph.WalkableBlock;
import org.terasology.pathfinding.componentSystem.PathRenderSystem;
import org.terasology.pathfinding.model.Path;
+import org.terasology.registry.CoreRegistry;
import org.terasology.registry.In;
/**
@@ -40,11 +41,14 @@
public class MoveAlongPathNode extends BaseAction {
private static final Logger logger = LoggerFactory.getLogger(MoveAlongPathNode.class);
- @In
+ // @In
private transient PathRenderSystem pathRenderSystem;
@Override
public void construct(Actor actor) {
+ // TODO: Temporary fix for injection malfunction in actions, ideally remove this in the future.
+ pathRenderSystem = CoreRegistry.get(PathRenderSystem.class);
+
MinionMoveComponent moveComponent = actor.getComponent(MinionMoveComponent.class);
if (moveComponent != null && moveComponent.path != null && moveComponent.path != Path.INVALID) {
pathRenderSystem.addPath(moveComponent.path);