diff --git a/src/algorithm/ParallelPathfinder.java b/src/algorithm/ParallelPathfinder.java index e98b076a64264d44d6178771ee0d6790fd88834d..0511c78a042bd0bc57e1ef613bd67a0a90eb1efd 100644 --- a/src/algorithm/ParallelPathfinder.java +++ b/src/algorithm/ParallelPathfinder.java @@ -8,7 +8,17 @@ import java.awt.*; import java.util.ArrayList; public class ParallelPathfinder { + + private int lastDestX; + private int lastDestY; + private void flood(int destX, int destY) { + + lastDestX = destX; + lastDestY = destY; + + System.out.println("[*] Flooding..."); + SharedRessources .getInstance().add(new Explorer(destX - 1, destY, 1, Explorer.Direction.West)); SharedRessources @@ -31,7 +41,9 @@ public class ParallelPathfinder { } public ArrayList<Point> calculatePath(int startX, int startY, int destX, int destY) { - flood(destX, destY); + + if (destX != lastDestX || destY != lastDestY) + flood(destX, destY); ArrayList<Point> path = new ArrayList<>(); @@ -59,6 +71,7 @@ public class ParallelPathfinder { return path; + } public void draw(Graphics g) { diff --git a/src/window/Game.java b/src/window/Game.java index 6a328a32aaf765fe0b7bf5485e35ca48449c1e42..8adbaa3190b4b7e7c49ca22c1da07c5a2732e5f2 100644 --- a/src/window/Game.java +++ b/src/window/Game.java @@ -4,6 +4,8 @@ import javax.swing.*; import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; public abstract class Game extends JFrame { @@ -13,12 +15,16 @@ public abstract class Game extends JFrame { private boolean running; private boolean[] pressedKeyMap; + private boolean[] pressedMouseKeyMap; + + private int mX, mY; public Game(String title, int w, int h) { super(title); this.setSize(w, h); pressedKeyMap = new boolean[1024]; + pressedMouseKeyMap = new boolean[4]; this.windowThread = new Thread(() -> { loadGame(); @@ -55,6 +61,24 @@ public abstract class Game extends JFrame { pressedKeyMap[e.getKeyCode()] = false; } + + }); + + this.addMouseListener(new MouseAdapter() { + @Override + public void mousePressed(MouseEvent e) { + super.mousePressed(e); + mX = e.getX(); + mY = e.getY(); + pressedMouseKeyMap[e.getButton()] = true; + } + + @Override + public void mouseReleased(MouseEvent e) { + super.mouseReleased(e); + pressedMouseKeyMap[e.getButton()] = false; + } + }); this.setDefaultCloseOperation(EXIT_ON_CLOSE); @@ -70,6 +94,22 @@ public abstract class Game extends JFrame { return !isKeyDown(key); } + public boolean isMouseKeyDown(int key) { + return pressedMouseKeyMap[key]; + } + + public boolean isMouseKeyUp(int key) { + return !isMouseKeyDown(key); + } + + public int getMouseX() { + return mX; + } + + public int getMouseY() { + return mY; + } + public final void run() { this.setVisible(true); this.running = true; diff --git a/src/window/MainWindow.java b/src/window/MainWindow.java index 080b42ddba0d84a7ef490ff8f8a09dc8b8fbddcc..97adbb75fbd6ae26cdceb34a0a9a53df9452aa16 100644 --- a/src/window/MainWindow.java +++ b/src/window/MainWindow.java @@ -7,6 +7,7 @@ import parallel.SharedRessources; import javax.imageio.ImageIO; import java.awt.*; import java.awt.event.KeyEvent; +import java.awt.event.MouseEvent; import java.io.File; import java.io.IOException; import java.util.ArrayList; @@ -33,12 +34,19 @@ public class MainWindow extends Game { = new ParallelPathfinder(); } + private boolean pressed; + @Override public void updateGame() { - if (isKeyDown(KeyEvent.VK_ENTER)) - pts = parallelPathfinder.calculatePath(8, 5, 1590, 800); + if (isMouseKeyDown(MouseEvent.BUTTON1) && !pressed) { + pts = + parallelPathfinder.calculatePath(this.getMouseX(), this.getMouseY(), 1590, 800); + pressed = true; + } + if (isMouseKeyUp(MouseEvent.BUTTON1)) + pressed = false; } @Override