diff --git a/app/src/main/java/school_project/GameUI.java b/app/src/main/java/school_project/GameUI.java index 04f911f..b5e0b76 100644 --- a/app/src/main/java/school_project/GameUI.java +++ b/app/src/main/java/school_project/GameUI.java @@ -2,6 +2,7 @@ package school_project; import javafx.geometry.Insets; import javafx.geometry.Pos; +import javafx.scene.input.MouseButton; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.paint.Color; @@ -15,15 +16,20 @@ public class GameUI extends BorderPane { public GameUI(Map level) throws FileNotFoundException { super(); - MatrixShape grid = new MatrixShape(level, true); + MatrixShape grid = new MatrixShape(level); grid.setAlignment(Pos.CENTER); grid.setColor(Color.WHITE); HBox pieces = new HBox(); pieces.setSpacing(10); for (Piece p : level.getPieces()) { - MatrixShape _piece = new MatrixShape(p, false); - _piece.setColor(p.getColor()); + MatrixShape _piece = new MatrixShape(p); + _piece.setOnMouseClicked(event -> { + if(event.getButton() == MouseButton.SECONDARY){ + ((Piece) _piece.shape).RotateRight(1); + _piece.update(); + } + }); pieces.getChildren().add(_piece); } diff --git a/app/src/main/java/school_project/Utils/MatrixShape.java b/app/src/main/java/school_project/Utils/MatrixShape.java index 1db303a..3d79f28 100644 --- a/app/src/main/java/school_project/Utils/MatrixShape.java +++ b/app/src/main/java/school_project/Utils/MatrixShape.java @@ -7,37 +7,53 @@ import javafx.scene.layout.GridPane; import javafx.scene.paint.Color; import javafx.scene.paint.Paint; import javafx.scene.shape.Rectangle; -import org.checkerframework.common.reflection.qual.GetClass; import school_project.Controller; import school_project.GameUI; +import school_project.Piece; import school_project.Shape; import java.io.FileInputStream; import java.io.FileNotFoundException; -import java.util.ArrayList; public class MatrixShape extends GridPane { - public MatrixShape(Shape shape, boolean texture) throws FileNotFoundException { + public Shape shape; + private Paint color; + public MatrixShape(Shape shape) { super(); + this.shape = shape; + if(shape instanceof Piece p){ + color = p.getColor(); + } + + update(); + setHgap(GameUI.SPACE_SIZE); setVgap(GameUI.SPACE_SIZE); + } + + public void update(){ + getChildren().clear(); boolean[][] shape_matrix = shape.getShape(); for (int i = 0; i < shape_matrix.length; i++) { for (int j = 0; j < shape_matrix[i].length; j++) { if(shape_matrix[i][j]){ - Node _cell = texture ? new ImageView(new Image(new FileInputStream(Controller.class.getResource("tile.png").getFile()))) : new Rectangle(GameUI.SEGMENT_SIZE, GameUI.SEGMENT_SIZE); + Node _cell; + if(shape instanceof Piece p){ + _cell = new Rectangle(GameUI.SEGMENT_SIZE, GameUI.SEGMENT_SIZE); + ((Rectangle) _cell).setFill(color); + }else{ + try { + _cell = new ImageView(new Image(new FileInputStream(Controller.class.getResource("tile.png").getFile()))); + } catch (FileNotFoundException e) { + throw new RuntimeException(e); + } + } add(_cell, j, i); } } } } - public void setColor(Paint p) { - getChildren().forEach(node -> { - if(node instanceof Rectangle r){ - r.setFill(p); - r.setStroke(Color.BLACK); - } - }); + color = p; } }