From a5fc85082fbce58143556447002767da2dda3937 Mon Sep 17 00:00:00 2001 From: AndyTechGuy Date: Mon, 8 Jul 2019 21:58:52 -0230 Subject: [PATCH 1/4] Listen for path calculation in FindPathToNode --- .../minion/move/FindPathToNode.java | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/terasology/minion/move/FindPathToNode.java b/src/main/java/org/terasology/minion/move/FindPathToNode.java index a340753e..6416501b 100644 --- a/src/main/java/org/terasology/minion/move/FindPathToNode.java +++ b/src/main/java/org/terasology/minion/move/FindPathToNode.java @@ -15,7 +15,9 @@ */ 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.SettableFuture; import org.terasology.logic.behavior.BehaviorAction; import org.terasology.logic.behavior.core.Actor; import org.terasology.logic.behavior.core.BaseAction; @@ -29,6 +31,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.
@@ -68,21 +71,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 From cdce87419eb72f7d5a11b0cd53d17d1b07756489 Mon Sep 17 00:00:00 2001 From: AndyTechGuy Date: Sun, 21 Jul 2019 14:20:22 -0230 Subject: [PATCH 2/4] Add temporary fix for PathRenderSystem injection --- .../java/org/terasology/minion/move/MoveAlongPathNode.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/org/terasology/minion/move/MoveAlongPathNode.java b/src/main/java/org/terasology/minion/move/MoveAlongPathNode.java index 3a951245..ab4bdc6a 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; /** @@ -45,6 +46,9 @@ public class MoveAlongPathNode extends BaseAction { @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); From 933a75a0fb9b3b521ebe8afe89ad14e66ca515b7 Mon Sep 17 00:00:00 2001 From: AndyTechGuy Date: Sun, 28 Jul 2019 23:20:24 -0230 Subject: [PATCH 3/4] Pathfinding changes from mentor review --- src/main/java/org/terasology/minion/move/FindPathToNode.java | 3 ++- .../java/org/terasology/minion/move/MoveAlongPathNode.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/terasology/minion/move/FindPathToNode.java b/src/main/java/org/terasology/minion/move/FindPathToNode.java index 6416501b..a25b5697 100644 --- a/src/main/java/org/terasology/minion/move/FindPathToNode.java +++ b/src/main/java/org/terasology/minion/move/FindPathToNode.java @@ -17,6 +17,7 @@ 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; @@ -90,7 +91,7 @@ public void onSuccess(List paths) { public void onFailure(Throwable t) { moveComponent.path = Path.INVALID; } - }); + }, MoreExecutors.directExecutor()); } @Override diff --git a/src/main/java/org/terasology/minion/move/MoveAlongPathNode.java b/src/main/java/org/terasology/minion/move/MoveAlongPathNode.java index ab4bdc6a..58678709 100644 --- a/src/main/java/org/terasology/minion/move/MoveAlongPathNode.java +++ b/src/main/java/org/terasology/minion/move/MoveAlongPathNode.java @@ -41,7 +41,7 @@ public class MoveAlongPathNode extends BaseAction { private static final Logger logger = LoggerFactory.getLogger(MoveAlongPathNode.class); - @In + // @In private transient PathRenderSystem pathRenderSystem; @Override From 5fe037a80b7df5c1ef37e31edc9c23326bfc5e68 Mon Sep 17 00:00:00 2001 From: AndyTechGuy Date: Tue, 6 Aug 2019 00:40:42 -0230 Subject: [PATCH 4/4] Reset old path in construct() of FindPathToNode --- src/main/java/org/terasology/minion/move/FindPathToNode.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/terasology/minion/move/FindPathToNode.java b/src/main/java/org/terasology/minion/move/FindPathToNode.java index a25b5697..43e58931 100644 --- a/src/main/java/org/terasology/minion/move/FindPathToNode.java +++ b/src/main/java/org/terasology/minion/move/FindPathToNode.java @@ -62,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; @@ -91,7 +93,7 @@ public void onSuccess(List paths) { public void onFailure(Throwable t) { moveComponent.path = Path.INVALID; } - }, MoreExecutors.directExecutor()); + }); } @Override