From 6b808a96222456056d9f0850b7fefa5d1f062f84 Mon Sep 17 00:00:00 2001 From: arnaudlabourel <arnaud.labourel@univ-amu.fr> Date: Mon, 18 Oct 2021 11:18:56 +0200 Subject: [PATCH] Refactoring de la partie dessin --- src/main/java/view/GridCanvas.java | 67 +++++++++++++++++++++++------- src/main/java/view/PointType.java | 4 +- 2 files changed, 54 insertions(+), 17 deletions(-) diff --git a/src/main/java/view/GridCanvas.java b/src/main/java/view/GridCanvas.java index 33c277a..65ad3ea 100644 --- a/src/main/java/view/GridCanvas.java +++ b/src/main/java/view/GridCanvas.java @@ -27,7 +27,6 @@ public class GridCanvas extends Canvas { this.numberOfRows = numberOfRows; this.setWidth(tileWidth * numberOfColumns); this.setHeight(tileHeight * numberOfRows); - // TODO change the EmptyGrid for an ArrayGrid grid = new EmptyGrid(numberOfRows, numberOfColumns); graphicsContext = getGraphicsContext2D(); } @@ -38,7 +37,7 @@ public class GridCanvas extends Canvas { } private void drawGrid(){ - drawGridTile(grid); + draw(grid); } private void clear(){ @@ -49,32 +48,70 @@ public class GridCanvas extends Canvas { grid.fill(tileGenerator); } - public void drawGridTile(Grid tileGrid){ + public void draw(Grid tileGrid){ + drawSquares(tileGrid); + strokeSquares(tileGrid); + } + + private void drawSquares(Grid tileGrid) { for(int row = 0; row < numberOfRows; row++) for(int column = 0; column < numberOfColumns; column++){ - Tile tile = tileGrid.getSquare(row, column).getTile(); - drawTile(tile, column * tileWidth, row * tileHeight); + Square square = tileGrid.getSquare(row, column); + drawSquare(square, column * tileWidth, row * tileHeight); } } - private void drawTile(Tile tile, double x, double y) { + private void strokeSquares(Grid tileGrid) { + for(int row = 0; row < numberOfRows; row++) + for(int column = 0; column < numberOfColumns; column++){ + Square square = tileGrid.getSquare(row, column); + strokeSquare(square, column * tileWidth, row * tileHeight); + } + } + + + private void strokeSquare(Square square, double x, double y) { + PointType[] cornerTypes = PointType.values(); + double[] xPoints = new double[cornerTypes.length]; + double[] yPoints = new double[cornerTypes.length]; + for(int index = 0; index < cornerTypes.length; index++){ + xPoints[index] = x + (cornerTypes[index].getXPosition() * tileWidth); + yPoints[index] = y + (cornerTypes[index].getYPosition() * tileHeight); + } + final int indexCenter = 4; + for(CardinalDirection side : CardinalDirection.values()) { + int indexCorner0 = side.ordinal(); + int indexCorner1 = (indexCorner0+1)%4; + strokeSquareSide(square, xPoints[indexCorner0], yPoints[indexCorner0], xPoints[indexCorner1], yPoints[indexCorner1], side); + strokeInternalTriangleSide(square, xPoints[indexCorner0],yPoints[indexCorner0],xPoints[indexCenter],yPoints[indexCenter], side); + } + } + + private void strokeSquareSide(Square square, double x0, double y0, double x1, double y1, CardinalDirection side) { + graphicsContext.strokeLine(x0, y0, x1, y1); + } + + private void strokeInternalTriangleSide(Square square, double x0, double y0, double x1, double y1, CardinalDirection side) { + graphicsContext.strokeLine(x0, y0, x1, y1); + } + + private void drawSquare(Square square, double x, double y) { for(CardinalDirection side: CardinalDirection.values()){ - drawSideTriangle(tile, x, y, side); + drawSideTriangle(square, x, y, side); } } - private void drawSideTriangle(Tile tile, double x, double y, CardinalDirection side){ + private void drawSideTriangle(Square square, double x, double y, CardinalDirection side){ + Color color = square.getTile().side(side).color(); List<PointType> cornerTypes = PointType.trianglePointTypes(side); - double[] xPoints = new double[3]; - double[] yPoints = new double[3]; - for(int index = 0; index < 3; index++){ + int size = PointType.trianglePointTypes(side).size(); + double[] xPoints = new double[size]; + double[] yPoints = new double[size]; + for(int index = 0; index < size; index++){ xPoints[index] = x + (cornerTypes.get(index).getXPosition() * tileWidth); yPoints[index] = y + (cornerTypes.get(index).getYPosition() * tileHeight); } - - Color color = tile.side(side).color(); graphicsContext.setFill(color); - graphicsContext.strokePolygon(xPoints, yPoints, 3); - graphicsContext.fillPolygon(xPoints, yPoints, 3); + graphicsContext.fillPolygon(xPoints, yPoints, size); } } diff --git a/src/main/java/view/PointType.java b/src/main/java/view/PointType.java index a530943..5406142 100644 --- a/src/main/java/view/PointType.java +++ b/src/main/java/view/PointType.java @@ -7,8 +7,8 @@ import java.util.List; public enum PointType { NORTH_WEST_CORNER(0,0), NORTH_EAST_CORNER(1,0), - SOUTH_WEST_CORNER(0,1), SOUTH_EAST_CORNER(1,1), + SOUTH_WEST_CORNER(0,1), CENTER(0.5,0.5); private final double xPosition; private final double yPosition; @@ -23,7 +23,7 @@ public enum PointType { case NORTH -> List.of(PointType.NORTH_WEST_CORNER, PointType.NORTH_EAST_CORNER, PointType.CENTER); case EAST -> List.of(PointType.NORTH_EAST_CORNER, PointType.SOUTH_EAST_CORNER, PointType.CENTER); case SOUTH -> List.of(PointType.SOUTH_EAST_CORNER, PointType.SOUTH_WEST_CORNER, PointType.CENTER); - case WEST -> List.of(PointType.NORTH_WEST_CORNER, PointType.SOUTH_WEST_CORNER, PointType.CENTER); + case WEST -> List.of(PointType.SOUTH_WEST_CORNER, PointType.NORTH_WEST_CORNER, PointType.CENTER); }; } -- GitLab