use of javafx.animation.KeyFrame in project FXyzLib by Birdasaur.
the class CameraTransformer method transitionCameraTo.
public void transitionCameraTo(double milliseconds, double tx, double ty, double tz, double rx, double ry, double rz) {
final Timeline timeline = new Timeline();
timeline.getKeyFrames().addAll(new KeyFrame[] { new KeyFrame(Duration.millis(milliseconds), new KeyValue[] { // Frame End
new KeyValue(xRotateProperty(), rx, Interpolator.EASE_BOTH), new KeyValue(yRotateProperty(), ry, Interpolator.EASE_BOTH), new KeyValue(zRotateProperty(), rz, Interpolator.EASE_BOTH), new KeyValue(xTranslateProperty(), tx, Interpolator.EASE_BOTH), new KeyValue(yTranslateProperty(), ty, Interpolator.EASE_BOTH), new KeyValue(zTranslateProperty(), tz, Interpolator.EASE_BOTH) }) });
timeline.playFromStart();
}
use of javafx.animation.KeyFrame in project FXyzLib by Birdasaur.
the class CameraController method setCamera.
public void setCamera(AdvancedCamera camera) {
this.camera = camera;
switch(animPref) {
case TIMELINE:
timeline.getKeyFrames().addAll(new KeyFrame(Duration.millis(15), e -> {
new Timeline(new KeyFrame[] { new KeyFrame(Duration.ONE, ev -> {
update();
}) }).play();
}));
timeline.play();
break;
case TIMER:
timer.start();
break;
case TRANSITION:
transition.play();
break;
case ANIMATION:
break;
}
}
use of javafx.animation.KeyFrame in project TrayNotification by PlusHaze.
the class FadeAnimation method setupShowAnimation.
@Override
protected Timeline setupShowAnimation() {
Timeline tl = new Timeline();
// Sets opacity to 0.0 instantly which is pretty much invisible
KeyValue kvOpacity = new KeyValue(stage.opacityProperty(), 0.0);
KeyFrame frame1 = new KeyFrame(Duration.ZERO, kvOpacity);
// Sets opacity to 1.0 (fully visible) over the time of 3000 milliseconds.
KeyValue kvOpacity2 = new KeyValue(stage.opacityProperty(), 1.0);
KeyFrame frame2 = new KeyFrame(Duration.millis(3000), kvOpacity2);
tl.getKeyFrames().addAll(frame1, frame2);
tl.setOnFinished(e -> trayIsShowing = true);
return tl;
}
use of javafx.animation.KeyFrame 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();
}
use of javafx.animation.KeyFrame in project fxexperience2 by EricCanull.
the class SplinePanelController method updateAnimation.
public void updateAnimation() {
if (timeline != null) {
timeline.stop();
}
Interpolator spline = Interpolator.SPLINE(SplineEditor.getControlPoint1x(), SplineEditor.getControlPoint1y(), SplineEditor.getControlPoint2x(), SplineEditor.getControlPoint2y());
timeline = new Timeline();
timeline.setCycleCount(Timeline.INDEFINITE);
timeline.setAutoReverse(true);
timeline.getKeyFrames().addAll(new KeyFrame(Duration.ZERO, new KeyValue(scaleCircle.scaleXProperty(), 0d, spline), new KeyValue(scaleCircle.scaleYProperty(), 0d, spline), new KeyValue(rotateRectangle.rotateProperty(), 0d, spline), new KeyValue(fadeSquare.opacityProperty(), 0d, spline), new KeyValue(linearCircle.translateXProperty(), 0d, spline)), new KeyFrame(Duration.seconds(5), new KeyValue(scaleCircle.scaleXProperty(), 1d, spline), new KeyValue(scaleCircle.scaleYProperty(), 1d, spline), new KeyValue(rotateRectangle.rotateProperty(), 360d, spline), new KeyValue(rotateRectangle.rotateProperty(), 360d, spline), new KeyValue(fadeSquare.opacityProperty(), 1d, spline), new KeyValue(linearCircle.translateXProperty(), 180d, spline)));
timeline.play();
}
Aggregations