package com.stevenliebregt.test;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.geometry.Insets;
import javafx.scene.control.Button;
import javafx.scene.input.ClipboardContent;
import javafx.scene.input.DataFormat;
import javafx.scene.input.Dragboard;
import javafx.scene.input.TransferMode;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import java.net.URL;
import java.util.ResourceBundle;
public class GameController implements Initializable
{
private static final int HAND_SIZE = 7;
private static final int BOARD_SIZE = 15;
private static final DataFormat TILE_FORMAT = new DataFormat("Tile");
@FXML
private GridPane boardGridPane;
@FXML
private GridPane handGridPane;
private Button draggingTile;
@Override
public void initialize(URL location, ResourceBundle resources)
{
initializeHand();
initializeBoard();
}
private void initializeHand()
{
for (int i = 0; i < HAND_SIZE; i++) {
StackPane stackPane = new StackPane();
stackPane.setPrefSize(80, 80);
stackPane.setBackground(new Background(new BackgroundFill(
Color.SALMON,
CornerRadii.EMPTY,
Insets.EMPTY
)));
handGridPane.add(stackPane, i, 0);
Button tile = new Button();
tile.setPrefSize(80, 80);
tile.setText("A");
tile.setOnDragDetected(event -> {
Dragboard dragboard = tile.startDragAndDrop(TransferMode.MOVE);
dragboard.setDragView(tile.snapshot(null, null));
ClipboardContent clipboardContent = new ClipboardContent();
clipboardContent.put(TILE_FORMAT, " ");
dragboard.setContent(clipboardContent);
draggingTile = tile;
});
stackPane.setOnDragOver(event -> {
Dragboard dragboard = event.getDragboard();
if (dragboard.hasContent(TILE_FORMAT) && draggingTile != null) {
event.acceptTransferModes(TransferMode.MOVE);
}
});
stackPane.setOnDragDropped(event -> {
// TODO: CHECK IF ALREADY HAS A TILE
Dragboard dragboard = event.getDragboard();
if (dragboard.hasContent(TILE_FORMAT)) {
((StackPane) draggingTile.getParent()).getChildren().remove(draggingTile);
stackPane.getChildren().add(draggingTile);
event.setDropCompleted(true);
draggingTile = null;
}
});
stackPane.getChildren().add(tile);
}
}
private void initializeBoard()
{
for (int row = 0; row < BOARD_SIZE; row++) {
for (int column = 0; column < BOARD_SIZE; column++) {
StackPane stackPane = new StackPane();
stackPane.prefWidthProperty().bind(boardGridPane.widthProperty().divide(BOARD_SIZE));
stackPane.prefHeightProperty().bind(boardGridPane.heightProperty().divide(BOARD_SIZE));
if ((row + column) % 2 == 0) {
stackPane.setBackground(new Background(new BackgroundFill(
Color.GOLD,
CornerRadii.EMPTY,
Insets.EMPTY
)));
}
stackPane.setOnDragOver(event -> {
Dragboard dragboard = event.getDragboard();
if (dragboard.hasContent(TILE_FORMAT) && draggingTile != null) {
event.acceptTransferModes(TransferMode.MOVE);
}
});
stackPane.setOnDragDropped(event -> {
// TODO: CHECK IF ALREADY HAS A CHILD
Dragboard dragboard = event.getDragboard();
if (dragboard.hasContent(TILE_FORMAT)) {
((StackPane) draggingTile.getParent()).getChildren().remove(draggingTile);
stackPane.getChildren().add(draggingTile);
event.setDropCompleted(true);
draggingTile = null;
}
});
boardGridPane.add(stackPane, column, row);
}
}
}
}
Comments