Oreborous icon

Sleur en Pleur

Oreborous | PRO | 11/12/18 10:00:38 AM UTC | 0 ⭐ | 287 👁️ | Never ⏰ | []
Java |

4.46 KB

|

None

|

0 👍

/

0 👎

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