Select Git revision
Display.java
Forked from
LABOUREL Arnaud / Image Template
Source project has a limited visibility.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
GridTileCanvas.java 2.61 KiB
package view;
import javafx.beans.NamedArg;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import model.CardinalDirection;
import model.Square;
import model.SquareGrid;
import model.Tile;
import java.util.List;
import java.util.Random;
public class GridTileCanvas extends Canvas {
public final double tileWidth;
private final double tileHeight;
private final Integer numberOfColumns;
private final Integer numberOfRows;
public GridTileCanvas(@NamedArg("tileWidth") Double tileWidth,
@NamedArg("tileHeight") Double tileHeight,
@NamedArg("numberOfColumns") Integer numberOfColumns,
@NamedArg("numberOfRows") Integer numberOfRows) {
this.tileWidth = tileWidth;
this.tileHeight = tileHeight;
this.numberOfColumns = numberOfColumns;
this.numberOfRows = numberOfRows;
this.setWidth(tileWidth * numberOfColumns);
this.setHeight(tileHeight * numberOfRows);
SquareGrid tileGrid = new SquareGrid(numberOfRows, numberOfColumns);
tileGrid.fillWithRandomTiles(List.of(Color.BLUE, Color.GREEN, Color.BLACK, Color.RED), new Random());
drawGridTile(tileGrid);
}
public void drawGridTile(SquareGrid tileGrid){
for(int row = 0; row < tileGrid.getNumberOfRows(); row++)
for(int column = 0; column < tileGrid.getNumberOfColumns(); column++){
drawTile(tileGrid.getTile(row, column), column, row);
}
}
public void drawTile(Tile tile, int row, int column){
for(CardinalDirection cardinalDirection: CardinalDirection.values()){
drawTriangle(column, row, cardinalDirection, tile.getColor(cardinalDirection));
}
}
private double getXPosition(int column, PointType pointType){
return (column + pointType.getXPosition()) * tileWidth;
}
private double getYPosition(int row, PointType pointType){
return (row + pointType.getYPosition()) * tileHeight;
}
private void drawTriangle(int row, int column, CardinalDirection side, Color color){
List<PointType> cornerTypes = PointType.getIncidentCornerTypes(side);
double[] xPoints = new double[3];
double[] yPoints = new double[3];
for(int index = 0; index < 2; index++){
xPoints[index] = getXPosition(column, cornerTypes.get(index));
yPoints[index] = getYPosition(row, cornerTypes.get(index));
}
xPoints[2] = getXPosition(column, PointType.CENTER);
yPoints[2] = getYPosition(row, PointType.CENTER);
GraphicsContext graphicsContext = getGraphicsContext2D();
graphicsContext.setFill(color);
graphicsContext.fillPolygon(xPoints, yPoints, 3);
}
}