Skip to content
Snippets Groups Projects
WallBasedPathfinder.java 4.06 KiB
Newer Older
  • Learn to ignore specific revisions
  • Enes Herguel's avatar
    Enes Herguel committed
    package approach3.parallel;
    
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
    import approach3.misc.Lexicon;
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
    import approach3.parallel.operations.Trace;
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
    import approach3.window.MainWindowApproach3;
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
    import structs.Int3;
    import structs.Vec3;
    
    import java.awt.*;
    import java.util.ArrayList;
    
    
    Enes Herguel's avatar
    Enes Herguel committed
    public class WallBasedPathfinder {
    
    
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
        public void find() {
    
            int beginX = SharedRessources.getInstance().getStart().x;
            int beginY = SharedRessources.getInstance().getStart().y;
    
            int endX = SharedRessources.getInstance().getEnd().x;
            int endY = SharedRessources.getInstance().getEnd().y;
    
    
            SharedRessources
                    .getInstance()
                    .getExecutor()
                    .execute(new Trace(endX, endY, beginX, beginY, 0));
    
    
        }
    
    
        public ArrayList<Point> calculatePath(int startX, int startY, int destX, int destY) {
    
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
            ArrayList<Point> path
                    = new ArrayList<>();
    
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
            int x = startX;
            int y = startY;
    
            while (x != destX || y != destY) {
    
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
                path.add(new Point(x, y));
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
    
                Int3 currentDir
                        =
                        SharedRessources.getInstance().getData(x, y);
    
                int dx = (int) currentDir.getX();
                int dy = (int) currentDir.getY();
    
                if (dx == 0 && dy == 0)
                    break;
    
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
                // System.out.println(Lexicon.getInstance().getText(new Point(dx, dy)));
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
                x += dx;
                y += dy;
            }
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
            return path;
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
        public void draw(Graphics g, boolean showMeta) {
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
            for (int j = 0; j < SharedRessources.getInstance().getHeight(); j++) {
                for (int i = 0; i < SharedRessources.getInstance().getWidth(); i++) {
                    if (SharedRessources.getInstance().isWall(i, j)) {
                        g.setColor(Color.blue);
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
                        g.fillRect(i * MainWindowApproach3.SIZE, j * MainWindowApproach3.SIZE,
                                MainWindowApproach3.SIZE, MainWindowApproach3.SIZE);
                    } else if (SharedRessources.getInstance().getStep(i, j) != Integer.MAX_VALUE && showMeta) {
                        int dx =
                                (int) SharedRessources.getInstance().getData(i, j).getX() * MainWindowApproach3.SIZE;
                        int dy =
                                (int) SharedRessources.getInstance().getData(i, j).getY() * MainWindowApproach3.SIZE;
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
    
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
                        int green = SharedRessources.getInstance().getStep(i, j);
                        if (green >= 255)
                            green = 255;
                        Color color
                                = new Color(0, green, 0);
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
    
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
                        g.setColor(color);
                        g.fillRect(i * MainWindowApproach3.SIZE, j * MainWindowApproach3.SIZE,
                                MainWindowApproach3.SIZE, MainWindowApproach3.SIZE);
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
    
    
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
                        g.setColor(Color.red);
                        g.drawLine(
                                i * MainWindowApproach3.SIZE,
                                j * MainWindowApproach3.SIZE,
                                i * MainWindowApproach3.SIZE + dx,
                                j * MainWindowApproach3.SIZE + dy);
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
    
    
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
                    } else {
                        g.setColor(Color.black);
                        g.fillRect(i * MainWindowApproach3.SIZE, j * MainWindowApproach3.SIZE,
                                MainWindowApproach3.SIZE, MainWindowApproach3.SIZE);
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
                    }
                }
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
    
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
            }
    
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
            if (SharedRessources.getInstance().
                    getEnd() == null || SharedRessources.getInstance().getStart() == null)
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
                return;
    
    
            g.setColor(Color.yellow);
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
            g.fillRect(
                    SharedRessources.getInstance().getEnd().x * MainWindowApproach3.SIZE,
                    SharedRessources.getInstance().getEnd().y * MainWindowApproach3.SIZE,
                    MainWindowApproach3.SIZE, MainWindowApproach3.SIZE);
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
    
            g.setColor(Color.red);
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
            g.fillRect(
                    SharedRessources.getInstance().getStart().x * MainWindowApproach3.SIZE,
                    SharedRessources.getInstance().getStart().y * MainWindowApproach3.SIZE,
                    MainWindowApproach3.SIZE, MainWindowApproach3.SIZE);
    
    NET-D3v3l0p3r's avatar
    NET-D3v3l0p3r committed
        }
    
    Enes Herguel's avatar
    Enes Herguel committed
    }