Search in sources :

Example 36 with MouseEvent

use of javafx.scene.input.MouseEvent in project FXyzLib by Birdasaur.

the class BillBoardBehaviorTest method initFirstPersonControls.

private void initFirstPersonControls(SubScene scene) {
    //make sure Subscene handles KeyEvents
    scene.setOnMouseEntered(e -> {
        scene.requestFocus();
    });
    //First person shooter keyboard movement
    scene.setOnKeyPressed(event -> {
        double change = 10.0;
        if (event.isShiftDown()) {
            change = 50.0;
        }
        KeyCode keycode = event.getCode();
        if (keycode == KeyCode.W) {
            camera.setTranslateZ(camera.getTranslateZ() + change);
        }
        if (keycode == KeyCode.S) {
            camera.setTranslateZ(camera.getTranslateZ() - change);
        }
        if (keycode == KeyCode.A) {
            camera.setTranslateX(camera.getTranslateX() - change);
        }
        if (keycode == KeyCode.D) {
            camera.setTranslateX(camera.getTranslateX() + change);
        }
    });
    scene.setOnMousePressed((MouseEvent me) -> {
        if (!scene.isFocused()) {
            scene.requestFocus();
        }
        mousePosX = me.getSceneX();
        mousePosY = me.getSceneY();
        mouseOldX = me.getSceneX();
        mouseOldY = me.getSceneY();
    });
    scene.setOnMouseDragged((MouseEvent me) -> {
        mouseOldX = mousePosX;
        mouseOldY = mousePosY;
        mousePosX = me.getSceneX();
        mousePosY = me.getSceneY();
        mouseDeltaX = (mousePosX - mouseOldX);
        mouseDeltaY = (mousePosY - mouseOldY);
        double modifier = 10.0;
        double modifierFactor = 0.1;
        if (me.isControlDown()) {
            modifier = 0.1;
        }
        if (me.isShiftDown()) {
            modifier = 50.0;
        }
        if (me.isPrimaryButtonDown()) {
            // +
            cameraTransform.ry.setAngle(((cameraTransform.ry.getAngle() + mouseDeltaX * modifierFactor * modifier * 2.0) % 360 + 540) % 360 - 180);
            cameraTransform.rx.setAngle(MathUtils.clamp(-60, (((cameraTransform.rx.getAngle() - mouseDeltaY * modifierFactor * modifier * 2.0) % 360 + 540) % 360 - 180), // - 
            60));
        } else if (me.isSecondaryButtonDown()) {
            double z = camera.getTranslateZ();
            double newZ = z + mouseDeltaX * modifierFactor * modifier;
            camera.setTranslateZ(newZ);
        } else if (me.isMiddleButtonDown()) {
            // -
            cameraTransform.t.setX(cameraTransform.t.getX() + mouseDeltaX * modifierFactor * modifier * 0.3);
            // -
            cameraTransform.t.setY(cameraTransform.t.getY() + mouseDeltaY * modifierFactor * modifier * 0.3);
        }
    });
}
Also used : MouseEvent(javafx.scene.input.MouseEvent) KeyCode(javafx.scene.input.KeyCode)

Example 37 with MouseEvent

use of javafx.scene.input.MouseEvent in project Minesweeper3D by SethDamiani.

the class Main method start.

@Override
public void start(Stage primaryStage) throws Exception {
    // Main JavaFX method
    // Add all sides into the cube group
    cube.getChildren().addAll(sideA, sideB, sideC, sideD, sideE, sideF);
    // Set proper layout
    cube.setLayoutX(150);
    cube.setLayoutY(190);
    // Create the main cube object
    createCube(cube, gX, gY, game, primaryStage);
    // Properly nest cube rotation control groups
    gameRoot.getChildren().add(gY);
    //       ||
    gY.getChildren().add(gX);
    //       ||
    gX.getChildren().add(cube);
    stopwatch.setFont(new Font(45));
    bombs.setFont(new Font(45));
    gameRoot.getChildren().addAll(stopwatch, bombs);
    timeTask = new Timeline(new // Task to keep track of time
    KeyFrame(// Task to keep track of time
    Duration.seconds(1), // Task to keep track of time
    event -> {
        time++;
        stopwatch.setText("Time: " + String.valueOf(time));
    }));
    // Make timeTask run forever and ever
    timeTask.setCycleCount(Timeline.INDEFINITE);
    for (int x = 0; x < Grid.length; x++) {
        // Add the cells to their proper side groups
        for (int y = 0; y < Grid[x].length; y++) {
            for (int z = 0; z < Grid[x][y].length; z++) {
                Grid[x][y][z] = new Cell(cube, 40, 40 * y, 40 * z, x);
                switch(x) {
                    case 0:
                        sideA.getChildren().add(Grid[x][y][z].cell);
                        break;
                    case 1:
                        sideB.getChildren().add(Grid[x][y][z].cell);
                        break;
                    case 2:
                        sideC.getChildren().add(Grid[x][y][z].cell);
                        break;
                    case 3:
                        sideD.getChildren().add(Grid[x][y][z].cell);
                        break;
                    case 4:
                        sideE.getChildren().add(Grid[x][y][z].cell);
                        break;
                    case 5:
                        sideF.getChildren().add(Grid[x][y][z].cell);
                        break;
                }
            }
        }
    }
    // Place bombs randomly
    placeBombs(100);
    // Place the correct numbers according to the new bomb positions
    placeNumbers();
    // -------------------------------------------------------------------------------
    // Confirm Exit screen setup
    // new Color(1,1,1,.5)
    Text confirmExitText = new Text("Quit");
    confirmExitText.setFill(Color.WHITE);
    confirmExitText.setFont(Font.font(80));
    confirmExitText.setX(400 - confirmExitText.getLayoutBounds().getWidth() / 2);
    confirmExitText.setY(200);
    Text confirmExitSubText = new Text("Are you sure you would like to quit to the main menu?\nAll progress will be lost.");
    confirmExitSubText.setFill(Color.WHITE);
    confirmExitSubText.setFont(Font.font(20));
    confirmExitSubText.setTextAlignment(TextAlignment.CENTER);
    confirmExitSubText.setX(400 - confirmExitSubText.getLayoutBounds().getWidth() / 2);
    confirmExitSubText.setY(300);
    Text confirmExitYesText = new Text("Yes");
    confirmExitYesText.setFont(Font.font(30));
    confirmExitYesText.setFill(Color.WHITE);
    confirmExitYesText.setX(300 - confirmExitYesText.getLayoutBounds().getWidth() / 2);
    confirmExitYesText.setY(500);
    Rectangle confirmExitYesButton = new Rectangle(confirmExitYesText.getBoundsInLocal().getMinX() - 20, confirmExitYesText.getBoundsInLocal().getMinY() - 20, confirmExitYesText.getLayoutBounds().getWidth() + 40, confirmExitYesText.getLayoutBounds().getHeight() + 40);
    confirmExitYesButton.setFill(Color.TRANSPARENT);
    confirmExitYesButton.setStroke(Color.WHITE);
    confirmExitYesButton.setStrokeWidth(10);
    confirmExitYesButton.setOnMouseEntered(event -> confirmExitYesButton.setFill(new Color(1, 1, 1, .5)));
    confirmExitYesButton.setOnMouseExited(event -> confirmExitYesButton.setFill(Color.TRANSPARENT));
    confirmExitYesText.setOnMouseEntered(event -> confirmExitYesButton.setFill(new Color(1, 1, 1, .5)));
    confirmExitYesText.setOnMouseExited(event -> confirmExitYesButton.setFill(Color.TRANSPARENT));
    confirmExitYesButton.setOnMouseClicked(event -> primaryStage.setScene(menu));
    confirmExitYesText.setOnMouseClicked(event -> primaryStage.setScene(menu));
    Text confirmExitNoText = new Text("No");
    confirmExitNoText.setFont(Font.font(30));
    confirmExitNoText.setFill(Color.WHITE);
    confirmExitNoText.setX(500 - confirmExitYesText.getLayoutBounds().getWidth() / 2);
    confirmExitNoText.setY(500);
    Rectangle confirmExitNoButton = new Rectangle(confirmExitNoText.getBoundsInLocal().getMinX() - 20, confirmExitNoText.getBoundsInLocal().getMinY() - 20, confirmExitNoText.getLayoutBounds().getWidth() + 40, confirmExitNoText.getLayoutBounds().getHeight() + 40);
    confirmExitNoButton.setFill(Color.TRANSPARENT);
    confirmExitNoButton.setStroke(Color.WHITE);
    confirmExitNoButton.setStrokeWidth(10);
    confirmExitNoButton.setOnMouseEntered(event -> confirmExitNoButton.setFill(new Color(1, 1, 1, .5)));
    confirmExitNoButton.setOnMouseExited(event -> confirmExitNoButton.setFill(Color.TRANSPARENT));
    confirmExitNoText.setOnMouseEntered(event -> confirmExitNoButton.setFill(new Color(1, 1, 1, .5)));
    confirmExitNoText.setOnMouseExited(event -> confirmExitNoButton.setFill(Color.TRANSPARENT));
    confirmExitNoButton.setOnMouseClicked(event -> {
        timeTask.play();
        primaryStage.setScene(game);
    });
    confirmExitNoText.setOnMouseClicked(event -> {
        timeTask.play();
        primaryStage.setScene(game);
    });
    confirmExitRoot.getChildren().addAll(confirmExitText, confirmExitSubText, confirmExitYesText, confirmExitNoText, confirmExitYesButton, confirmExitNoButton);
    // Quit screen UI setup
    // Initialize and configure background
    Rectangle quitBox = new Rectangle(800, 700, Color.INDIANRED);
    // Initialize and configure the title
    Text quitText = new Text(260, 200, "Game Over");
    quitText.setFont(new Font(80));
    quitText.setStroke(Color.WHITE);
    quitText.setFill(Color.WHITE);
    quitText.setTextAlignment(TextAlignment.CENTER);
    quitText.setX(400 - quitText.getLayoutBounds().getWidth() / 2);
    // Initialize and configure the time text
    Text endScoreText = new Text(260, 320, "Time: ");
    endScoreText.setFont(new Font(40));
    endScoreText.setTextAlignment(TextAlignment.CENTER);
    endScoreText.setFill(Color.WHITE);
    endScoreText.setStroke(Color.WHITE);
    // Center the text within the button
    endScoreText.setX(350 - endScoreText.getLayoutBounds().getWidth() / 2);
    // Initialize and configure first name input field
    TextField firstNameInput = new TextField();
    firstNameInput.setFont(new Font(24));
    // Initialize and configure first name input label
    Text firstNameLabel = new Text("First name: ");
    firstNameLabel.setFont(new Font(28));
    firstNameLabel.setFill(Color.WHITE);
    // Initialize and configure horizontal box for first name input
    HBox firstNameBox = new HBox(5, firstNameLabel, firstNameInput);
    firstNameBox.setLayoutX(180);
    firstNameBox.setLayoutY(395);
    // Initialize and configure last name input field
    TextField lastNameInput = new TextField();
    lastNameInput.setFont(new Font(24));
    // Initialize and configure last name input label
    Text lastNameLabel = new Text("Last name: ");
    lastNameLabel.setFont(new Font(28));
    lastNameLabel.setFill(Color.WHITE);
    // Initialize and configure horizontal box for last name input
    HBox lastNameBox = new HBox(5, lastNameLabel, lastNameInput);
    lastNameBox.setLayoutX(182);
    lastNameBox.setLayoutY(450);
    // Initialize and configure continue button border
    Rectangle continueRect = new Rectangle(300, 550, 500, 70);
    continueRect.setStroke(Color.WHITE);
    continueRect.setFill(Color.TRANSPARENT);
    continueRect.setStrokeWidth(5);
    // Initialize and configure continue button text
    Text continueText = new Text("Submit and Continue");
    continueText.setFont(new Font(50));
    continueText.setFill(Color.WHITE);
    continueText.setY(600);
    continueText.setX(400 - continueText.getLayoutBounds().getWidth() / 2);
    continueRect.setWidth(continueText.getLayoutBounds().getWidth() + 40);
    continueRect.setX(400 - continueRect.getLayoutBounds().getWidth() / 2);
    // Advance to next field on enter press
    firstNameInput.setOnAction(event -> lastNameInput.requestFocus());
    // Manual game-win override
    game.addEventHandler(// Manual game-win override
    KeyEvent.KEY_PRESSED, // Manual game-win override
    event -> {
        if (event.getCode() == KeyCode.BACK_SLASH && event.isAltDown()) {
            gameWon = true;
            endScoreText.setText("Time: " + time);
            endScoreText.setX(400 - endScoreText.getLayoutBounds().getWidth() / 2);
            game.getOnMouseClicked().handle(mouseEvent);
        }
    });
    // Submit score when enter is pressed in last name entry
    lastNameInput.setOnAction(// Submit score when enter is pressed in last name entry
    event -> {
        if (gameWon) {
            String firstName = firstNameInput.getText();
            String lastName = lastNameInput.getText();
            Long date = System.currentTimeMillis() / 1000;
            highScoresMap.put(date, new HighScore(date, difficulty, firstName, lastName, time));
            refreshTableData();
            try {
                writeHighScores();
            } catch (IOException e) {
                System.out.println("ERROR: couldn't save high scores to file.");
            }
        }
        primaryStage.setScene(menu);
    });
    quitRoot.getChildren().addAll(quitBox, quitText, endScoreText, firstNameBox, lastNameBox, continueRect, continueText);
    // Process new high score data into table and .csv
    EventHandler<MouseEvent> submitScores = // Process new high score data into table and .csv
    event -> {
        if (gameWon) {
            String firstName = firstNameInput.getText();
            String lastName = lastNameInput.getText();
            Long date = System.currentTimeMillis() / 1000;
            highScoresMap.put(date, new HighScore(date, difficulty, firstName, lastName, time));
            refreshTableData();
            try {
                writeHighScores();
            } catch (IOException e) {
                System.out.println("ERROR: couldn't save high scores to file.");
            }
        }
        primaryStage.setScene(menu);
    };
    continueRect.addEventHandler(MouseEvent.MOUSE_CLICKED, submitScores);
    continueText.addEventHandler(MouseEvent.MOUSE_CLICKED, submitScores);
    // Pause screen UI setup
    Rectangle pauseBox = new Rectangle(800, 700, Color.BLACK);
    Text pauseText = new Text(260, 350, "Paused");
    pauseText.setFont(new Font(80));
    pauseText.setStroke(Color.WHITE);
    pauseText.setFill(Color.WHITE);
    pauseText.setTextAlignment(TextAlignment.CENTER);
    Text timeText = new Text(260, 430, "Time: ");
    timeText.setFont(new Font(40));
    timeText.setTextAlignment(TextAlignment.CENTER);
    timeText.setFill(Color.WHITE);
    timeText.setStroke(Color.WHITE);
    timeText.setX(250 - timeText.getLayoutBounds().getWidth() / 2);
    Text bombsText = new Text(550, 430, bombs.getText());
    bombsText.setFont(new Font(40));
    bombsText.setTextAlignment(TextAlignment.CENTER);
    bombsText.setFill(Color.WHITE);
    bombsText.setStroke(Color.WHITE);
    bombsText.setX(500 - bombsText.getLayoutBounds().getWidth() / 2);
    Text infoText = new Text("Loading");
    infoText.setFont(new Font(40));
    infoText.setTextAlignment(TextAlignment.CENTER);
    infoText.setFill(Color.WHITE);
    infoText.setStroke(Color.WHITE);
    infoText.setX(400 - infoText.getLayoutBounds().getWidth() / 2);
    infoText.setY(430);
    Rectangle resume = new Rectangle(300, 500, 200, 70);
    resume.setFill(Color.TRANSPARENT);
    resume.setStroke(Color.WHITE);
    resume.setStrokeWidth(5);
    Text resumeText = new Text("Resume");
    resumeText.setFont(new Font(50));
    resumeText.setFill(Color.WHITE);
    resumeText.setY(550);
    resumeText.setX(400 - resumeText.getLayoutBounds().getWidth() / 2);
    pauseRoot.getChildren().addAll(pauseBox, pauseText, resume, resumeText, infoText);
    EventHandler<MouseEvent> resumeButton = event -> {
        timeTask.play();
        primaryStage.setScene(game);
    };
    resume.addEventHandler(MouseEvent.MOUSE_CLICKED, resumeButton);
    resumeText.addEventHandler(MouseEvent.MOUSE_CLICKED, resumeButton);
    pause.setOnKeyPressed(event -> {
        if (event.getCode() == KeyCode.SPACE) {
            primaryStage.setScene(game);
            timeTask.play();
        } else if (event.getCode() == KeyCode.ESCAPE) {
            primaryStage.setScene(confirmExit);
        }
    });
    game.setOnKeyPressed(event -> {
        if (event.getCode() == KeyCode.SPACE) {
            timeTask.pause();
            infoText.setText("Time: " + time + "s  Bombs: " + flaggedCells + "/" + totalBombs);
            infoText.setX(400 - infoText.getLayoutBounds().getWidth() / 2);
            primaryStage.setScene(pause);
        }
    });
    // High scores UI setup
    scores.setFill(new ImagePattern(bg));
    Text scoresTitle = new Text(120, 120, "High Scores");
    scoresRoot.getChildren().add(scoresTitle);
    scoresTitle.setFont(new Font(70));
    scoresTitle.setStroke(Color.BLACK);
    scoresTitle.setStrokeWidth(5);
    scoresTitle.setTextAlignment(TextAlignment.CENTER);
    scoresTitle.setX(400 - scoresTitle.getLayoutBounds().getWidth() / 2);
    Rectangle back = new Rectangle(100, 550, 200, 70);
    back.setFill(Color.TRANSPARENT);
    back.setStroke(Color.BLACK);
    back.setStrokeWidth(5);
    back.setFill(new Color(1, 1, 1, .5));
    back.setOnMouseEntered(event -> back.setFill(new Color(1, 1, 1, .8)));
    back.setOnMouseExited(event -> back.setFill(new Color(1, 1, 1, .5)));
    scoresRoot.getChildren().add(back);
    Text backText = new Text("Back");
    backText.setFont(new Font(50));
    backText.setFill(Color.BLACK);
    backText.setY(600);
    backText.setX(200 - backText.getLayoutBounds().getWidth() / 2);
    backText.setStroke(Color.BLACK);
    backText.setStrokeWidth(3);
    backText.setOnMouseEntered(event -> back.setFill(new Color(1, 1, 1, .8)));
    backText.setOnMouseExited(event -> back.setFill(new Color(1, 1, 1, .5)));
    scoresRoot.getChildren().add(backText);
    EventHandler<MouseEvent> backButton = event -> primaryStage.setScene(menu);
    back.addEventHandler(MouseEvent.MOUSE_CLICKED, backButton);
    backText.addEventHandler(MouseEvent.MOUSE_CLICKED, backButton);
    Rectangle deleteScore = new Rectangle(500, 550, 200, 70);
    deleteScore.setFill(Color.TRANSPARENT);
    deleteScore.setStroke(Color.BLACK);
    deleteScore.setStrokeWidth(5);
    deleteScore.setFill(new Color(1, 1, 1, .5));
    deleteScore.setOnMouseEntered(event -> deleteScore.setFill(new Color(1, 1, 1, .8)));
    deleteScore.setOnMouseExited(event -> deleteScore.setFill(new Color(1, 1, 1, .5)));
    scoresRoot.getChildren().add(deleteScore);
    Text deleteScoresText = new Text("Delete");
    deleteScoresText.setFont(new Font(50));
    deleteScoresText.setFill(Color.BLACK);
    deleteScoresText.setY(600);
    deleteScoresText.setX(600 - deleteScoresText.getLayoutBounds().getWidth() / 2);
    deleteScoresText.setStroke(Color.BLACK);
    deleteScoresText.setStrokeWidth(3);
    deleteScoresText.setOnMouseEntered(event -> deleteScore.setFill(new Color(1, 1, 1, .8)));
    deleteScoresText.setOnMouseExited(event -> deleteScore.setFill(new Color(1, 1, 1, .5)));
    scoresRoot.getChildren().add(deleteScoresText);
    // Delete selected high score from table and .csv
    EventHandler<MouseEvent> deleteScoreButton = // Delete selected high score from table and .csv
    event -> {
        if (table.getSelectionModel().getSelectedIndex() == -1)
            return;
        HighScore current = (HighScore) table.getSelectionModel().getSelectedItem();
        highScoresMap.remove(Long.parseLong(current.getRawID()));
        refreshTableData();
        try {
            writeHighScores();
        } catch (IOException e) {
            System.out.println("ERROR: couldn't save high scores to file.");
        }
    };
    deleteScore.addEventHandler(MouseEvent.MOUSE_CLICKED, deleteScoreButton);
    deleteScoresText.addEventHandler(MouseEvent.MOUSE_CLICKED, deleteScoreButton);
    CheckBox editable = new CheckBox("Edit mode");
    editable.setSelected(true);
    editable.setLayoutX(630);
    editable.setLayoutY(30);
    editable.setFont(Font.font("Tahoma", FontWeight.BLACK, 18));
    scoresRoot.getChildren().add(editable);
    // High scores table setup
    table = new TableView();
    table.setLayoutX(100);
    table.setLayoutY(200);
    table.setPrefWidth(600);
    table.setPrefHeight(300);
    table.setEditable(true);
    EventHandler<TableColumn.CellEditEvent> fieldEditCommit = event -> {
        if (table.getSelectionModel().getSelectedIndex() == -1)
            return;
        HighScore current = (HighScore) table.getSelectionModel().getSelectedItem();
        switch(event.getTableColumn().getId()) {
            case "Difficulty":
                highScoresMap.get(Long.parseLong(current.getRawID())).setDifficulty((String) event.getNewValue());
                break;
            case "First Name":
                highScoresMap.get(Long.parseLong(current.getRawID())).setFirstName((String) event.getNewValue());
                break;
            case "Last Name":
                highScoresMap.get(Long.parseLong(current.getRawID())).setLastName((String) event.getNewValue());
                break;
        }
        try {
            writeHighScores();
        } catch (IOException e) {
            System.out.println("Error saving scores");
        }
        refreshTableData();
    };
    table.setStyle(".list-view .scroll-bar:horizontal .increment-arrow,.list-view .scroll-bar:horizontal .decrement-arrow,.list-view .scroll-bar:horizontal .increment-button,.list-view .scroll-bar:horizontal .decrement-button {-fx-padding:0;}");
    IDCol.setCellValueFactory(new PropertyValueFactory<HighScore, String>("ID"));
    IDCol.prefWidthProperty().bind(table.widthProperty().multiply(0.3));
    IDCol.setId("ID");
    IDCol.setSortable(false);
    IDCol.setResizable(false);
    difficultyCol.setCellValueFactory(new PropertyValueFactory<HighScore, String>("difficulty"));
    difficultyCol.setCellFactory(TextFieldTableCell.forTableColumn());
    difficultyCol.setOnEditCommit(fieldEditCommit);
    difficultyCol.prefWidthProperty().bind(table.widthProperty().multiply(0.175));
    difficultyCol.setId("Difficulty");
    difficultyCol.setSortable(false);
    difficultyCol.setResizable(false);
    firstNameCol.setCellValueFactory(new PropertyValueFactory<HighScore, String>("firstName"));
    firstNameCol.setCellFactory(TextFieldTableCell.forTableColumn());
    firstNameCol.setOnEditCommit(fieldEditCommit);
    firstNameCol.prefWidthProperty().bind(table.widthProperty().multiply(0.175));
    firstNameCol.setId("First Name");
    firstNameCol.setSortable(false);
    firstNameCol.setResizable(false);
    lastNameCol.setCellValueFactory(new PropertyValueFactory<HighScore, String>("lastName"));
    lastNameCol.setCellFactory(TextFieldTableCell.forTableColumn());
    lastNameCol.setOnEditCommit(fieldEditCommit);
    lastNameCol.prefWidthProperty().bind(table.widthProperty().multiply(0.175));
    lastNameCol.setId("Last Name");
    lastNameCol.setSortable(false);
    lastNameCol.setResizable(false);
    timeCol.setCellValueFactory(new PropertyValueFactory<HighScore, String>("time"));
    timeCol.prefWidthProperty().bind(table.widthProperty().multiply(0.172));
    timeCol.setId("Time");
    timeCol.setSortable(true);
    timeCol.setResizable(false);
    table.getSortOrder().setAll(timeCol);
    timeCol.setSortType(TableColumn.SortType.ASCENDING);
    table.getColumns().addAll(IDCol, difficultyCol, firstNameCol, lastNameCol, timeCol);
    table.setOnMousePressed(event -> table.getSortOrder().setAll(timeCol));
    MenuItem tableDelete = new MenuItem("Delete");
    tableDelete.setOnAction(event -> {
        if (table.getSelectionModel().getSelectedIndex() == -1)
            return;
        HighScore current = (HighScore) table.getSelectionModel().getSelectedItem();
        highScoresMap.remove(Long.parseLong(current.getRawID()));
        refreshTableData();
    });
    editable.setOnAction(event -> {
        if (event.getSource() instanceof CheckBox) {
            CheckBox checkBox = (CheckBox) event.getSource();
            if (checkBox.isSelected()) {
                difficultyCol.setEditable(true);
                firstNameCol.setEditable(true);
                lastNameCol.setEditable(true);
            } else {
                difficultyCol.setEditable(false);
                firstNameCol.setEditable(false);
                lastNameCol.setEditable(false);
            }
        }
    });
    // Search abilities setup
    table.setPlaceholder(new Label("Search did not return any results."));
    ObservableList<String> searchOptions = FXCollections.observableArrayList("Date", "Difficulty", "First Name", "Last Name", "Time");
    ComboBox searchSelector = new ComboBox(searchOptions);
    searchSelector.getSelectionModel().select(2);
    searchSelector.setLayoutX(585 - searchSelector.getLayoutBounds().getWidth() / 2);
    searchSelector.setLayoutY(160);
    TextField search = new TextField();
    search.setPromptText("Search");
    search.setPrefWidth(480);
    search.setPrefHeight(searchSelector.getHeight());
    search.setLayoutX(100);
    search.setLayoutY(160);
    // Execute search on selection mode change
    searchSelector.setOnAction(event -> refreshTableData(search.getText(), (String) searchSelector.getSelectionModel().getSelectedItem()));
    // Execute search on any keystroke
    search.setOnKeyReleased(event -> {
        String query = search.getText();
        refreshTableData(query, (String) searchSelector.getSelectionModel().getSelectedItem());
    });
    scoresRoot.getChildren().addAll(table, searchSelector, search);
    // Menu setup
    menu.setFill(new ImagePattern(bg));
    Text title = new Text(120, 120, "3D Minesweeper");
    menuRoot.getChildren().add(title);
    title.setFont(new Font(70));
    title.setStroke(Color.BLACK);
    title.setStrokeWidth(5);
    title.setTextAlignment(TextAlignment.CENTER);
    title.setX(400 - title.getLayoutBounds().getWidth() / 2);
    Text name = new Text(150, 200, "Computer Science (ICS3U-01) FST\nBy Seth Damiani");
    menuRoot.getChildren().add(name);
    name.setFont(new Font(30));
    name.setTextAlignment(TextAlignment.CENTER);
    name.setStroke(Color.BLACK);
    name.setStrokeWidth(2);
    name.setX(400 - name.getLayoutBounds().getWidth() / 2);
    Rectangle easy = new Rectangle(250, 300, 300, 75);
    menuRoot.getChildren().add(easy);
    easy.setStroke(Color.BLACK);
    easy.setStrokeWidth(5);
    easy.setFill(new Color(1, 1, 1, .5));
    easy.setOnMouseEntered(event -> easy.setFill(new Color(1, 1, 1, .8)));
    easy.setOnMouseExited(event -> easy.setFill(new Color(1, 1, 1, .5)));
    Text easyText = new Text(400, 337.5, "Easy");
    menuRoot.getChildren().add(easyText);
    easyText.setFont(new Font(50));
    easyText.setTextAlignment(TextAlignment.CENTER);
    easyText.setStroke(Color.BLACK);
    easyText.setStrokeWidth(3);
    easyText.setX(400 - easyText.getLayoutBounds().getWidth() / 2);
    easyText.setY(350);
    easyText.setOnMouseEntered(event -> easy.setFill(new Color(1, 1, 1, .8)));
    easyText.setOnMouseExited(event -> easy.setFill(new Color(1, 1, 1, .5)));
    Rectangle medium = new Rectangle(250, 400, 300, 75);
    menuRoot.getChildren().add(medium);
    medium.setStroke(Color.BLACK);
    medium.setStrokeWidth(5);
    medium.setFill(Color.TRANSPARENT);
    medium.setFill(new Color(1, 1, 1, .5));
    medium.setOnMouseEntered(event -> medium.setFill(new Color(1, 1, 1, .8)));
    medium.setOnMouseExited(event -> medium.setFill(new Color(1, 1, 1, .5)));
    Text mediumText = new Text(400, 337.5, "Medium");
    menuRoot.getChildren().add(mediumText);
    mediumText.setFont(new Font(50));
    mediumText.setTextAlignment(TextAlignment.CENTER);
    mediumText.setStroke(Color.BLACK);
    mediumText.setStrokeWidth(3);
    mediumText.setX(400 - mediumText.getLayoutBounds().getWidth() / 2);
    mediumText.setY(450);
    mediumText.setOnMouseEntered(event -> medium.setFill(new Color(1, 1, 1, .8)));
    mediumText.setOnMouseExited(event -> medium.setFill(new Color(1, 1, 1, .5)));
    Rectangle hard = new Rectangle(250, 500, 300, 75);
    menuRoot.getChildren().add(hard);
    hard.setStroke(Color.BLACK);
    hard.setStrokeWidth(5);
    hard.setFill(Color.TRANSPARENT);
    hard.setFill(new Color(1, 1, 1, .5));
    hard.setOnMouseEntered(event -> hard.setFill(new Color(1, 1, 1, .8)));
    hard.setOnMouseExited(event -> hard.setFill(new Color(1, 1, 1, .5)));
    Text hardText = new Text(400, 337.5, "Hard");
    menuRoot.getChildren().add(hardText);
    hardText.setFont(new Font(50));
    hardText.setTextAlignment(TextAlignment.CENTER);
    hardText.setStroke(Color.BLACK);
    hardText.setStrokeWidth(3);
    hardText.setX(400 - hardText.getLayoutBounds().getWidth() / 2);
    hardText.setY(550);
    hardText.setOnMouseEntered(event -> hard.setFill(new Color(1, 1, 1, .8)));
    hardText.setOnMouseExited(event -> hard.setFill(new Color(1, 1, 1, .5)));
    Rectangle highscores = new Rectangle(600, 550, 150, 100);
    menuRoot.getChildren().add(highscores);
    highscores.setStroke(Color.BLACK);
    highscores.setStrokeWidth(5);
    highscores.setFill(Color.TRANSPARENT);
    highscores.setFill(new Color(1, 1, 1, .5));
    highscores.setOnMouseEntered(event -> highscores.setFill(new Color(1, 1, 1, .8)));
    highscores.setOnMouseExited(event -> highscores.setFill(new Color(1, 1, 1, .5)));
    Text highscoresText = new Text("High\nScores");
    menuRoot.getChildren().add(highscoresText);
    highscoresText.setFont(new Font(40));
    highscoresText.setTextAlignment(TextAlignment.CENTER);
    highscoresText.setStroke(Color.BLACK);
    highscoresText.setStrokeWidth(3);
    highscoresText.setX(675 - highscoresText.getLayoutBounds().getWidth() / 2);
    highscoresText.setY(590);
    highscoresText.setOnMouseEntered(event -> highscores.setFill(new Color(1, 1, 1, .8)));
    highscoresText.setOnMouseExited(event -> highscores.setFill(new Color(1, 1, 1, .5)));
    Rectangle exit = new Rectangle(50, 550, 150, 100);
    menuRoot.getChildren().add(exit);
    exit.setStroke(Color.BLACK);
    exit.setStrokeWidth(5);
    exit.setFill(Color.TRANSPARENT);
    exit.setFill(new Color(1, 1, 1, .5));
    exit.setOnMouseEntered(event -> exit.setFill(new Color(1, 1, 1, .8)));
    exit.setOnMouseExited(event -> exit.setFill(new Color(1, 1, 1, .5)));
    Text exitText = new Text("Exit");
    menuRoot.getChildren().add(exitText);
    exitText.setFont(new Font(40));
    exitText.setTextAlignment(TextAlignment.CENTER);
    exitText.setStroke(Color.BLACK);
    exitText.setStrokeWidth(3);
    exitText.setX(125 - exitText.getLayoutBounds().getWidth() / 2);
    exitText.setY(610);
    exitText.setOnMouseEntered(event -> exit.setFill(new Color(1, 1, 1, .8)));
    exitText.setOnMouseExited(event -> exit.setFill(new Color(1, 1, 1, .5)));
    // Handle click on easy button
    EventHandler<MouseEvent> easyButton = event -> {
        resetGame();
        placeBombs(50);
        totalBombs = 50;
        flaggedCells = 0;
        placeNumbers();
        bombs.setText("Bombs: " + flaggedCells + "/" + totalBombs);
        difficulty = "Easy";
        primaryStage.setScene(game);
        time = 0;
        timeTask.play();
    };
    easy.addEventHandler(MouseEvent.MOUSE_CLICKED, easyButton);
    easyText.addEventHandler(MouseEvent.MOUSE_CLICKED, easyButton);
    // Handle click on medium button
    EventHandler<MouseEvent> mediumButton = event -> {
        resetGame();
        placeBombs(100);
        totalBombs = 100;
        flaggedCells = 0;
        placeNumbers();
        bombs.setText("Bombs: " + flaggedCells + "/" + totalBombs);
        difficulty = "Medium";
        primaryStage.setScene(game);
        time = 0;
        timeTask.play();
    };
    medium.addEventHandler(MouseEvent.MOUSE_CLICKED, mediumButton);
    mediumText.addEventHandler(MouseEvent.MOUSE_CLICKED, mediumButton);
    // Handle click on hard button
    EventHandler<MouseEvent> hardButton = event -> {
        resetGame();
        placeBombs(150);
        totalBombs = 150;
        flaggedCells = 0;
        placeNumbers();
        bombs.setText("Bombs: " + flaggedCells + "/" + totalBombs);
        difficulty = "Hard";
        primaryStage.setScene(game);
        time = 0;
        timeTask.play();
    };
    hard.addEventHandler(MouseEvent.MOUSE_CLICKED, hardButton);
    hardText.addEventHandler(MouseEvent.MOUSE_CLICKED, hardButton);
    EventHandler<MouseEvent> exitButton = event -> System.exit(0);
    exit.addEventHandler(MouseEvent.MOUSE_CLICKED, exitButton);
    exitText.addEventHandler(MouseEvent.MOUSE_CLICKED, exitButton);
    EventHandler<MouseEvent> highScoresButton = event -> primaryStage.setScene(scores);
    highscoresText.addEventHandler(MouseEvent.MOUSE_CLICKED, highScoresButton);
    highscores.addEventHandler(MouseEvent.MOUSE_CLICKED, highScoresButton);
    readHighScores();
    refreshTableData();
    // Continuously check if game has been won or lost
    game.setOnMouseClicked(event -> {
        if (gameLost) {
            timeTask.stop();
            endScoreText.setText("Time: " + time);
            endScoreText.setX(400 - endScoreText.getLayoutBounds().getWidth() / 2);
            quitBox.setFill(Color.INDIANRED);
            quitText.setText("You Lost");
            quitText.setX(400 - quitText.getLayoutBounds().getWidth() / 2);
            firstNameBox.setVisible(false);
            lastNameBox.setVisible(false);
            endScoreText.setVisible(false);
            continueText.setText("Menu");
            continueText.setX(400 - continueText.getLayoutBounds().getWidth() / 2);
            continueRect.setWidth(continueText.getLayoutBounds().getWidth() + 40);
            continueRect.setX(400 - continueRect.getLayoutBounds().getWidth() / 2);
            primaryStage.setScene(quit);
        }
        if (gameWon) {
            timeTask.stop();
            quitBox.setFill(Color.FORESTGREEN);
            quitText.setText("You Won!");
            quitText.setX(400 - quitText.getLayoutBounds().getWidth() / 2);
            firstNameBox.setVisible(true);
            lastNameBox.setVisible(true);
            endScoreText.setVisible(true);
            endScoreText.setText("Time: " + time);
            continueText.setText("Submit & Continue");
            continueText.setX(400 - continueText.getLayoutBounds().getWidth() / 2);
            continueRect.setWidth(continueText.getLayoutBounds().getWidth() + 40);
            continueRect.setX(400 - continueRect.getLayoutBounds().getWidth() / 2);
            primaryStage.setScene(quit);
        }
    });
    primaryStage.setTitle("Minesweeper 3D - Seth Damiani");
    primaryStage.setResizable(false);
    primaryStage.setScene(menu);
    primaryStage.show();
}
Also used : EventHandler(javafx.event.EventHandler) FontWeight(javafx.scene.text.FontWeight) Scene(javafx.scene.Scene) MouseButton(javafx.scene.input.MouseButton) java.util(java.util) Point3D(javafx.geometry.Point3D) javafx.scene.control(javafx.scene.control) Rotate(javafx.scene.transform.Rotate) MouseEvent(javafx.scene.input.MouseEvent) FXCollections(javafx.collections.FXCollections) TextFieldTableCell(javafx.scene.control.cell.TextFieldTableCell) Application(javafx.application.Application) TextAlignment(javafx.scene.text.TextAlignment) RotateTransition(javafx.animation.RotateTransition) PrintWriter(java.io.PrintWriter) KeyCode(javafx.scene.input.KeyCode) HBox(javafx.scene.layout.HBox) Color(javafx.scene.paint.Color) KeyFrame(javafx.animation.KeyFrame) PropertyValueFactory(javafx.scene.control.cell.PropertyValueFactory) Font(javafx.scene.text.Font) FileWriter(java.io.FileWriter) Timeline(javafx.animation.Timeline) ImagePattern(javafx.scene.paint.ImagePattern) Rectangle(javafx.scene.shape.Rectangle) IOException(java.io.IOException) KeyEvent(javafx.scene.input.KeyEvent) Group(javafx.scene.Group) File(java.io.File) Text(javafx.scene.text.Text) Duration(javafx.util.Duration) Interpolator(javafx.animation.Interpolator) Stage(javafx.stage.Stage) ObservableList(javafx.collections.ObservableList) Image(javafx.scene.image.Image) HBox(javafx.scene.layout.HBox) Rectangle(javafx.scene.shape.Rectangle) Font(javafx.scene.text.Font) ImagePattern(javafx.scene.paint.ImagePattern) TextFieldTableCell(javafx.scene.control.cell.TextFieldTableCell) MouseEvent(javafx.scene.input.MouseEvent) Color(javafx.scene.paint.Color) Text(javafx.scene.text.Text) IOException(java.io.IOException) Timeline(javafx.animation.Timeline) KeyFrame(javafx.animation.KeyFrame)

Example 38 with MouseEvent

use of javafx.scene.input.MouseEvent in project Gargoyle by callakrsos.

the class XMLTextView method show.

public void show(double width, double height) throws IOException {
    btnClose.setOnMouseClicked(new EventHandler<MouseEvent>() {

        @Override
        public void handle(MouseEvent event) {
            close();
        }
    });
    Scene scene = new Scene(this, width, height);
    stage.setScene(scene);
    stage.initModality(Modality.APPLICATION_MODAL);
    stage.initOwner(SharedMemory.getPrimaryStage());
    stage.show();
}
Also used : MouseEvent(javafx.scene.input.MouseEvent) Scene(javafx.scene.Scene)

Example 39 with MouseEvent

use of javafx.scene.input.MouseEvent in project Gargoyle by callakrsos.

the class FXMLTextView method show.

public void show(double width, double height) throws IOException {
    btnClose.setOnMouseClicked(new EventHandler<MouseEvent>() {

        @Override
        public void handle(MouseEvent event) {
            close();
        }
    });
    Scene scene = new Scene(this, width, height);
    stage.setScene(scene);
    stage.initModality(Modality.APPLICATION_MODAL);
    stage.initOwner(SharedMemory.getPrimaryStage());
    stage.show();
}
Also used : MouseEvent(javafx.scene.input.MouseEvent) Scene(javafx.scene.Scene)

Example 40 with MouseEvent

use of javafx.scene.input.MouseEvent in project Gargoyle by callakrsos.

the class JavaTextView method show.

public void show(Window root, double width, double height) throws IOException {
    btnClose.setOnMouseClicked(new EventHandler<MouseEvent>() {

        @Override
        public void handle(MouseEvent event) {
            close();
        }
    });
    Scene scene = new Scene(this, width, height);
    stage.setTitle("JavaTextView Popup");
    stage.setScene(scene);
    //		stage.initModality(Modality.APPLICATION_MODAL);
    stage.initOwner(root);
    stage.show();
}
Also used : MouseEvent(javafx.scene.input.MouseEvent) Scene(javafx.scene.Scene)

Aggregations

MouseEvent (javafx.scene.input.MouseEvent)41 KeyCode (javafx.scene.input.KeyCode)32 Scene (javafx.scene.Scene)27 Group (javafx.scene.Group)24 PerspectiveCamera (javafx.scene.PerspectiveCamera)23 PointLight (javafx.scene.PointLight)22 Rotate (javafx.scene.transform.Rotate)19 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)16 AnimationTimer (javafx.animation.AnimationTimer)14 Point3D (org.fxyz.geometry.Point3D)10 KeyFrame (javafx.animation.KeyFrame)8 Timeline (javafx.animation.Timeline)8 AmbientLight (javafx.scene.AmbientLight)8 ArrayList (java.util.ArrayList)7 KeyValue (javafx.animation.KeyValue)7 Color (javafx.scene.paint.Color)7 Translate (javafx.scene.transform.Translate)7 OBJWriter (org.fxyz.utils.OBJWriter)7 List (java.util.List)6 Sphere (javafx.scene.shape.Sphere)5