Skip to content
Snippets Groups Projects
Select Git revision
  • 33b02765870865d23b48ed8847f6a8868bd61e0b
  • main default protected
  • master
3 results

Display.java

Blame
  • 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);
      }
    
    }