Skip to content
Snippets Groups Projects
FirefighterGrid.java 3.63 KiB
Newer Older
  • Learn to ignore specific revisions
  • LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
    package view;
    
    melizzzz's avatar
    melizzzz committed
    import javafx.scene.image.Image;
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
    import javafx.scene.canvas.Canvas;
    import javafx.scene.paint.Color;
    import javafx.util.Pair;
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
    import util.Position;
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
    
    public class FirefighterGrid extends Canvas implements Grid<ViewElement>{
    
    
    melizzzz's avatar
    melizzzz committed
        //private void paintElementAtPosition(ViewElement element, Position position) {
          //  paintBox(position.x(), position.y(), element.getColor());
        //}
    
    
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
        private void paintElementAtPosition(ViewElement element, Position position) {
    
    melizzzz's avatar
    melizzzz committed
            // Efface la case pour éviter les superpositions
            clearBox(position.x(), position.y());
    
            // Vérifie si une image est définie dans l'élément
            if (element.getImage() != null) {
                Image image = element.getImage();
                getGraphicsContext2D().drawImage(image, position.y() * boxWidth, position.x() * boxHeight, boxWidth, boxHeight);
            } else {
                // Sinon, utilise une couleur
                paintBox(position.x(), position.y(), element.getColor());
            }
    
    melizzzz's avatar
    melizzzz committed
    
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
        private int boxWidth;
        private int boxHeight;
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
        private int columnCount;
        private int rowCount;
    
        @Override
        public void repaint(List<Pair<Position, ViewElement>> positionedElements) {
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
            clear(positionedElements);
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
            paint(positionedElements);
            paintLines();
        }
    
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
        private void clear(List<Pair<Position, ViewElement>> positionedElements) {
            for (Pair<Position, ViewElement> positionElement : positionedElements) {
                Position position = positionElement.getKey();
    
                clearBox(position.x(), position.y());
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
        private void paint(List<Pair<Position, ViewElement>> positionedElements) {
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
            for(Pair<Position, ViewElement> pair : positionedElements){
                paintElementAtPosition(pair.getValue(), pair.getKey());
            }
        }
    
        @Override
        public void repaint(ViewElement[][] elements) {
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
            clear();
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
            paint(elements);
            paintLines();
        }
    
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
        private void clear() {
            getGraphicsContext2D().clearRect(0,0,getWidth(), getHeight());
        }
    
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
        private void paint(ViewElement[][] elements) {
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
            for(int column = 0; column < columnCount; column++)
                for(int row = 0; row < rowCount; row++){
                    paintElementAtPosition(elements[row][column], new Position(row, column));
                }
        }
    
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
        public int columnCount() {
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
            return columnCount;
        }
    
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
        public int rowCount() {
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
            return rowCount;
        }
    
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
        @Override
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
        public void setDimensions(int columnCount, int rowCount, int boxWidth, int boxHeight) {
            this.boxWidth = boxWidth;
            this.boxHeight = boxHeight;
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
            this.columnCount = columnCount;
            this.rowCount = rowCount;
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
            super.setWidth(boxWidth * columnCount);
            super.setHeight(boxHeight * rowCount);
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
        }
    
        private void paintLines(){
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
            paintHorizontalLines();
            paintVerticalLines();
        }
    
        private void paintVerticalLines() {
            for(int column = 0; column < columnCount; column++)
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
                getGraphicsContext2D().strokeLine(column * boxWidth, 0,column * boxWidth, getHeight());
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
        }
    
        private void paintHorizontalLines() {
            for(int row = 0; row < rowCount; row++)
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
                getGraphicsContext2D().strokeLine(0, row * boxHeight, getWidth(), row * boxHeight);
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
        private void paintBox(int row, int column, Color color){
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
            getGraphicsContext2D().setFill(color);
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
            getGraphicsContext2D().fillRect(column * boxWidth,row * boxHeight, boxWidth, boxHeight);
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
    
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
        private void clearBox(int row, int column){
            getGraphicsContext2D().clearRect(column * boxWidth,row * boxHeight, boxWidth, boxHeight);
    
    LABOUREL Arnaud's avatar
    LABOUREL Arnaud committed
        }