From e4ab3b0fa08bc75ae2ddcd8e5b35b68c94359c02 Mon Sep 17 00:00:00 2001 From: SpaceToad Date: Sun, 22 Jun 2014 17:57:10 +0200 Subject: [PATCH] Kill path finding jobs upon interruption, for #1873. --- .../buildcraft/core/robots/AIRobotMoveToBlock.java | 7 +++++++ .../core/robots/boards/AIRobotGoToRandomDirt.java | 6 ++++++ .../core/robots/boards/AIRobotSearchBlock.java | 7 +++++++ common/buildcraft/core/utils/PathFindingJob.java | 12 +++++++++++- 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/common/buildcraft/core/robots/AIRobotMoveToBlock.java b/common/buildcraft/core/robots/AIRobotMoveToBlock.java index c1a5c0f989..83b52a7713 100755 --- a/common/buildcraft/core/robots/AIRobotMoveToBlock.java +++ b/common/buildcraft/core/robots/AIRobotMoveToBlock.java @@ -95,4 +95,11 @@ private void setNextInPath() { prevDistance = Double.MAX_VALUE; } } + + @Override + public void end() { + if (pathSearchJob != null) { + pathSearchJob.terminate(); + } + } } diff --git a/common/buildcraft/core/robots/boards/AIRobotGoToRandomDirt.java b/common/buildcraft/core/robots/boards/AIRobotGoToRandomDirt.java index 821e6c650d..691cc415a3 100755 --- a/common/buildcraft/core/robots/boards/AIRobotGoToRandomDirt.java +++ b/common/buildcraft/core/robots/boards/AIRobotGoToRandomDirt.java @@ -74,4 +74,10 @@ public void delegateAIEnded(AIRobot ai) { } } + @Override + public void end() { + if (pathFindingJob != null) { + pathFindingJob.terminate(); + } + } } diff --git a/common/buildcraft/core/robots/boards/AIRobotSearchBlock.java b/common/buildcraft/core/robots/boards/AIRobotSearchBlock.java index 17a010fc70..b15df5295a 100755 --- a/common/buildcraft/core/robots/boards/AIRobotSearchBlock.java +++ b/common/buildcraft/core/robots/boards/AIRobotSearchBlock.java @@ -55,4 +55,11 @@ public void delegateAIEnded(AIRobot ai) { terminate(); } } + + @Override + public void end() { + if (blockScannerJob != null) { + blockScannerJob.terminate(); + } + } } diff --git a/common/buildcraft/core/utils/PathFindingJob.java b/common/buildcraft/core/utils/PathFindingJob.java index c140b82877..891b5e1ff0 100755 --- a/common/buildcraft/core/utils/PathFindingJob.java +++ b/common/buildcraft/core/utils/PathFindingJob.java @@ -12,6 +12,8 @@ public class PathFindingJob extends Thread { private PathFinding pathFinding; + private boolean stop = false; + public PathFindingJob(PathFinding iPathFinding) { super("Path Finding"); pathFinding = iPathFinding; @@ -19,9 +21,17 @@ public PathFindingJob(PathFinding iPathFinding) { @Override public void run() { - while (!pathFinding.isDone()) { + while (!isTerminated() && !pathFinding.isDone()) { pathFinding.iterate(); } } + public synchronized void terminate() { + stop = true; + } + + public synchronized boolean isTerminated() { + return stop; + } + }