Oreborous

Sleur en Pleur

Nov 12th, 2018
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.46 KB | None | 0 0
  1. package com.stevenliebregt.test;
  2.  
  3. import javafx.fxml.FXML;
  4. import javafx.fxml.Initializable;
  5. import javafx.geometry.Insets;
  6. import javafx.scene.control.Button;
  7. import javafx.scene.input.ClipboardContent;
  8. import javafx.scene.input.DataFormat;
  9. import javafx.scene.input.Dragboard;
  10. import javafx.scene.input.TransferMode;
  11. import javafx.scene.layout.*;
  12. import javafx.scene.paint.Color;
  13.  
  14. import java.net.URL;
  15. import java.util.ResourceBundle;
  16.  
  17. public class GameController implements Initializable
  18. {
  19.     private static final int HAND_SIZE = 7;
  20.     private static final int BOARD_SIZE = 15;
  21.  
  22.     private static final DataFormat TILE_FORMAT = new DataFormat("Tile");
  23.  
  24.     @FXML
  25.     private GridPane boardGridPane;
  26.  
  27.     @FXML
  28.     private GridPane handGridPane;
  29.  
  30.     private Button draggingTile;
  31.  
  32.     @Override
  33.     public void initialize(URL location, ResourceBundle resources)
  34.     {
  35.         initializeHand();
  36.         initializeBoard();
  37.     }
  38.  
  39.     private void initializeHand()
  40.     {
  41.         for (int i = 0; i < HAND_SIZE; i++) {
  42.             StackPane stackPane = new StackPane();
  43.             stackPane.setPrefSize(80, 80);
  44.             stackPane.setBackground(new Background(new BackgroundFill(
  45.                     Color.SALMON,
  46.                     CornerRadii.EMPTY,
  47.                     Insets.EMPTY
  48.             )));
  49.  
  50.             handGridPane.add(stackPane, i, 0);
  51.  
  52.             Button tile = new Button();
  53.             tile.setPrefSize(80, 80);
  54.             tile.setText("A");
  55.  
  56.             tile.setOnDragDetected(event -> {
  57.                 Dragboard dragboard = tile.startDragAndDrop(TransferMode.MOVE);
  58.                 dragboard.setDragView(tile.snapshot(null, null));
  59.  
  60.                 ClipboardContent clipboardContent = new ClipboardContent();
  61.                 clipboardContent.put(TILE_FORMAT, " ");
  62.                 dragboard.setContent(clipboardContent);
  63.  
  64.                 draggingTile = tile;
  65.             });
  66.  
  67.             stackPane.setOnDragOver(event -> {
  68.                 Dragboard dragboard = event.getDragboard();
  69.  
  70.                 if (dragboard.hasContent(TILE_FORMAT) && draggingTile != null) {
  71.                     event.acceptTransferModes(TransferMode.MOVE);
  72.                 }
  73.             });
  74.  
  75.             stackPane.setOnDragDropped(event -> {
  76.                 // TODO: CHECK IF ALREADY HAS A TILE
  77.  
  78.                 Dragboard dragboard = event.getDragboard();
  79.  
  80.                 if (dragboard.hasContent(TILE_FORMAT)) {
  81.                     ((StackPane) draggingTile.getParent()).getChildren().remove(draggingTile);
  82.                     stackPane.getChildren().add(draggingTile);
  83.                     event.setDropCompleted(true);
  84.  
  85.                     draggingTile = null;
  86.                 }
  87.             });
  88.  
  89.             stackPane.getChildren().add(tile);
  90.         }
  91.     }
  92.  
  93.     private void initializeBoard()
  94.     {
  95.         for (int row = 0; row < BOARD_SIZE; row++) {
  96.             for (int column = 0; column < BOARD_SIZE; column++) {
  97.                 StackPane stackPane = new StackPane();
  98.                 stackPane.prefWidthProperty().bind(boardGridPane.widthProperty().divide(BOARD_SIZE));
  99.                 stackPane.prefHeightProperty().bind(boardGridPane.heightProperty().divide(BOARD_SIZE));
  100.  
  101.                 if ((row + column) % 2 == 0) {
  102.                     stackPane.setBackground(new Background(new BackgroundFill(
  103.                             Color.GOLD,
  104.                             CornerRadii.EMPTY,
  105.                             Insets.EMPTY
  106.                     )));
  107.                 }
  108.  
  109.                 stackPane.setOnDragOver(event -> {
  110.                     Dragboard dragboard = event.getDragboard();
  111.  
  112.                     if (dragboard.hasContent(TILE_FORMAT) && draggingTile != null) {
  113.                         event.acceptTransferModes(TransferMode.MOVE);
  114.                     }
  115.                 });
  116.  
  117.                 stackPane.setOnDragDropped(event -> {
  118.                     // TODO: CHECK IF ALREADY HAS A CHILD
  119.  
  120.                     Dragboard dragboard = event.getDragboard();
  121.  
  122.                     if (dragboard.hasContent(TILE_FORMAT)) {
  123.                         ((StackPane) draggingTile.getParent()).getChildren().remove(draggingTile);
  124.                         stackPane.getChildren().add(draggingTile);
  125.                         event.setDropCompleted(true);
  126.  
  127.                         draggingTile = null;
  128.                     }
  129.                 });
  130.  
  131.                 boardGridPane.add(stackPane, column, row);
  132.             }
  133.         }
  134.     }
  135. }
Advertisement
Add Comment
Please, Sign In to add comment