Skip to content
Snippets Groups Projects
Commit 6b808a96 authored by LABOUREL Arnaud's avatar LABOUREL Arnaud
Browse files

Refactoring de la partie dessin

parent a2938d33
No related branches found
No related tags found
No related merge requests found
......@@ -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 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 drawTile(Tile tile, double x, double y) {
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);
}
}
......@@ -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);
};
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment