Merge pull request 'Game UI' (#38) from gameui into master
All checks were successful
continuous-integration/drone/push Build is passing

Reviewed-on: #38
Reviewed-by: Mat_02 <diletomatteo@gmail.com>
This commit is contained in:
Mat_02 2023-05-09 12:51:18 +02:00
commit 7320fea2f9
4 changed files with 153 additions and 11 deletions

View File

@ -4,26 +4,43 @@
package school_project; package school_project;
import javafx.application.Application; import javafx.application.Application;
import javafx.scene.Group; import javafx.scene.Parent;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.KeyCombination;
import javafx.stage.Screen;
import javafx.stage.Stage; import javafx.stage.Stage;
import school_project.Parsers.FileParserFactory;
import java.io.File;
import java.io.IOException;
public class Controller extends Application { public class Controller extends Application {
private Stage stage;
Parent root;
public static Vec2 screen_size;
@Override @Override
public void start(Stage primaryStage) throws Exception { public void start(Stage primaryStage) throws IOException {
primaryStage.setTitle("test"); stage = primaryStage;
Button btn = new Button("test"); screen_size = new Vec2(
btn.setOnAction(event -> System.out.println("hey")); (int) Screen.getPrimary().getBounds().getWidth(),
(int) Screen.getPrimary().getBounds().getHeight()
);
Group root = new Group(); stage.setTitle("ROAD TO MASTER YOU");
root.getChildren().add(btn);
Scene scene = new Scene(root, 300,300); // Full Screen mode
primaryStage.setScene(scene); stage.setFullScreen(true);
stage.setFullScreenExitHint("");
primaryStage.setFullScreenExitKeyCombination(KeyCombination.NO_MATCH);
primaryStage.show(); root = new GameUI(FileParserFactory.loadMapFromFile(new File(getClass().getResource("level11.level").getFile())));
Scene scene = new Scene(root, screen_size.x, screen_size.y);
stage.setScene(scene);
stage.show();
} }
public static void main(String[] args) { public static void main(String[] args) {

View File

@ -0,0 +1,61 @@
package school_project;
import javafx.scene.Group;
import javafx.scene.input.MouseButton;
import school_project.Utils.MatrixShape;
import java.io.FileNotFoundException;
public class GameUI extends Group{
public final static int SEGMENT_SIZE = 50;
public final static int SPACE_SIZE = 5;
private final Vec2 piece_pos_click = new Vec2();
public GameUI(Map level) throws FileNotFoundException {
super();
MatrixShape grid = new MatrixShape(level);
//center the grid
grid.setLayoutX((Controller.screen_size.x - grid.boundary_size.x) >> 1);
grid.setLayoutY((Controller.screen_size.y - grid.boundary_size.y) >> 1);
getChildren().add(grid);
Vec2 piece_space = new Vec2(SPACE_SIZE, SPACE_SIZE);
int column = 0;
for (Piece p : level.getPieces()) {
MatrixShape _piece = new MatrixShape(p);
_piece.setLayoutX(piece_space.x);
_piece.setLayoutY(piece_space.y);
piece_space.y += _piece.boundary_size.y;
if(piece_space.y >= Controller.screen_size.y){
column++;
piece_space.y = SPACE_SIZE;
piece_space.x = (SEGMENT_SIZE*3 + SPACE_SIZE*4 )* column;
}
// Pieces Events
_piece.setOnMouseClicked(event -> {
if(event.getButton() == MouseButton.SECONDARY){
((Piece) _piece.shape).RotateRight(1);
_piece.update();
}
});
_piece.setOnMousePressed(event -> {
piece_pos_click.x = (int) event.getX();
piece_pos_click.y = (int) event.getY();
});
_piece.setOnMouseDragged(event -> {
_piece.setLayoutX(event.getSceneX() - piece_pos_click.x);
_piece.setLayoutY(event.getSceneY() - piece_pos_click.y);
});
getChildren().add(_piece);
}
}
}

View File

@ -0,0 +1,64 @@
package school_project.Utils;
import javafx.scene.Node;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Paint;
import javafx.scene.shape.Rectangle;
import school_project.*;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class MatrixShape extends GridPane {
public Shape shape;
public Vec2 boundary_size = new Vec2();
private Paint color;
public MatrixShape(Shape shape) {
super();
this.shape = shape;
if(shape instanceof Piece){
Piece p = (Piece) shape;
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++) {
Node _cell;
if(shape_matrix[i][j]){
if(shape instanceof Piece){
Piece p = (Piece) shape;
_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);
}
}
}
else{
_cell = new Pane();
((Pane) _cell).setPrefSize(GameUI.SEGMENT_SIZE, GameUI.SEGMENT_SIZE);
}
add(_cell, j, i);
}
}
boundary_size = new Vec2((GameUI.SEGMENT_SIZE + GameUI.SPACE_SIZE) * shape.getWidth(), (GameUI.SEGMENT_SIZE + GameUI.SPACE_SIZE) * shape.getHeight());
}
public void setColor(Paint p) {
color = p;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB