/** * @return menu content containing a list of credits */ protected final MenuContent createContentCredits() { log.debug("createContentCredits()"); ScrollPane pane = new FXGLScrollPane(); pane.setPrefWidth(app.getWidth() * 3 / 5); pane.setPrefHeight(app.getHeight() / 2); pane.setStyle("-fx-background:black;"); VBox vbox = new VBox(); vbox.setAlignment(Pos.CENTER); vbox.setPrefWidth(pane.getPrefWidth() - 15); List<String> credits = new ArrayList<>(getSettings().getCredits().getList()); credits.add(""); credits.add("Powered by FXGL " + FXGL.getVersion()); credits.add("Author: Almas Baimagambetov"); credits.add("https://github.com/AlmasB/FXGL"); credits.add(""); for (String credit : credits) { vbox.getChildren().add(getUIFactory().newText(credit)); } pane.setContent(vbox); return new MenuContent(pane); }
/** * @return menu content containing input mappings (action -> key/mouse) */ protected final MenuContent createContentControls() { log.debug("createContentControls()"); GridPane grid = new GridPane(); grid.setAlignment(Pos.CENTER); grid.setHgap(10); grid.setVgap(10); grid.setPadding(new Insets(10, 10, 10, 10)); grid.getColumnConstraints().add(new ColumnConstraints(200, 200, 200, Priority.ALWAYS, HPos.LEFT, true)); grid.getRowConstraints().add(new RowConstraints(40, 40, 40, Priority.ALWAYS, VPos.CENTER, true)); // row 0 grid.setUserData(0); forEach(app.getInput().getBindings(), (action, trigger) -> addNewInputBinding(action, trigger, grid)); ScrollPane scroll = new FXGLScrollPane(grid); scroll.setVbarPolicy(ScrollBarPolicy.ALWAYS); scroll.setMaxHeight(app.getHeight() / 2.5); HBox hbox = new HBox(scroll); hbox.setAlignment(Pos.CENTER); return new MenuContent(hbox); }
protected Node createMenuBodyGameMenu() { double midY = app.getHeight() / 2; double distance = midY - 50; Button btnContinue = createActionButton("RESUME", this::fireResume); Button btn1 = createActionButton("SAVE", this::fireSave); Button btn2 = createContentButton("LOAD", this::createContentLoad); Button btn3 = createContentButton("OPTIONS", () -> new MenuContent(makeOptionsMenu())); Button btn4 = createContentButton("EXTRA", () -> new MenuContent(makeExtraMenu())); Button btn5 = createActionButton("MAIN MENU", this::fireExitToMainMenu); Group group = new Group(btnContinue, btn1, btn2, btn3, btn4, btn5); double dtheta = Math.PI / (group.getChildren().size() - 1); double angle = Math.PI / 2; int i = 0; for (Node n : group.getChildren()) { Point2D vector = new Point2D(Math.cos(angle), -Math.sin(angle)) .normalize() .multiply(distance) .add(0, midY); n.setTranslateX(vector.getX() - (i == 0 || i == 5 ? 0 : 100)); n.setTranslateY(vector.getY()); angle -= dtheta; i++; } return group; }
hbox.setAlignment(Pos.CENTER); return new MenuContent(list, hbox);
Button btn1 = createActionButton("NEW GAME", this::fireNewGame); Button btn2 = createContentButton("LOAD", this::createContentLoad); Button btn3 = createContentButton("OPTIONS", () -> new MenuContent(makeOptionsMenu())); Button btn4 = createContentButton("EXTRA", () -> new MenuContent(makeExtraMenu())); Button btn5 = createActionButton("ONLINE", this::fireMultiplayer); Button btn6 = createActionButton("LOGOUT", this::fireLogout);
/** * https://github.com/AlmasB/FXGL/issues/493 * * @return menu content with video settings */ protected final MenuContent createContentVideo() { log.debug("createContentVideo()"); ChoiceBox<Language> languageBox = getUIFactory().newChoiceBox(FXCollections.observableArrayList(Language.values())); languageBox.setValue(Language.ENGLISH); getSettings().getLanguage().bind(languageBox.valueProperty()); VBox vbox = new VBox(); if (getSettings().isManualResizeEnabled()) { Button btnFixRatio = getUIFactory().newButton(localizedStringProperty("menu.fixRatio")); btnFixRatio.setOnAction(e -> { listener.fixAspectRatio(); }); vbox.getChildren().add(btnFixRatio); } if (getSettings().isFullScreenAllowed()) { CheckBox cbFullScreen = getUIFactory().newCheckBox(); cbFullScreen.setSelected(false); cbFullScreen.selectedProperty().bindBidirectional(getSettings().getFullScreen()); vbox.getChildren().add(new HBox(25, getUIFactory().newText(getLocalizedString("menu.fullscreen")+": "), cbFullScreen)); } return new MenuContent( new HBox(25, getUIFactory().newText(localizedStringProperty("menu.language").concat(":")), languageBox), vbox ); }
/** * @return menu content containing music and sound volume sliders */ protected final MenuContent createContentAudio() { log.debug("createContentAudio()"); Slider sliderMusic = new Slider(0, 1, 1); sliderMusic.valueProperty().bindBidirectional(app.getAudioPlayer().globalMusicVolumeProperty()); Text textMusic = getUIFactory().newText(localizedStringProperty("menu.music.volume").concat(": ")); Text percentMusic = getUIFactory().newText(""); percentMusic.textProperty().bind(sliderMusic.valueProperty().multiply(100).asString("%.0f")); Slider sliderSound = new Slider(0, 1, 1); sliderSound.valueProperty().bindBidirectional(app.getAudioPlayer().globalSoundVolumeProperty()); Text textSound = getUIFactory().newText(localizedStringProperty("menu.sound.volume").concat(": ")); Text percentSound = getUIFactory().newText(""); percentSound.textProperty().bind(sliderSound.valueProperty().multiply(100).asString("%.0f")); HBox hboxMusic = new HBox(15, textMusic, sliderMusic, percentMusic); HBox hboxSound = new HBox(15, textSound, sliderSound, percentSound); hboxMusic.setAlignment(Pos.CENTER_RIGHT); hboxSound.setAlignment(Pos.CENTER_RIGHT); return new MenuContent(hboxMusic, hboxSound); }
/** * @return menu content containing feedback options */ protected final MenuContent createContentFeedback() { log.debug("createContentFeedback()"); // url is a string key defined in system.properties Consumer<String> openBrowser = url -> { getNet() .openBrowserTask(url) .onFailure(error -> log.warning("Error opening browser: " + error)) .run(); }; Button btnGoogle = new Button("Google Forms"); btnGoogle.setOnAction(e -> openBrowser.accept(FXGL.getSettings().getUrlGoogleForms())); Button btnSurveyMonkey = new Button("Survey Monkey"); btnSurveyMonkey.setOnAction(e -> openBrowser.accept(FXGL.getSettings().getUrlGoogleForms())); VBox vbox = new VBox(15, getUIFactory().newText(getLocalizedString("menu.chooseFeedback"), Color.WHEAT, 18), btnGoogle, btnSurveyMonkey); vbox.setAlignment(Pos.CENTER); return new MenuContent(vbox); }
/** * @return menu content containing a list of achievements */ protected final MenuContent createContentAchievements() { log.debug("createContentAchievements()"); MenuContent content = new MenuContent(); for (Achievement a : app.getGameplay().getAchievementManager().getAchievements()) { CheckBox checkBox = new CheckBox(); checkBox.setDisable(true); checkBox.selectedProperty().bind(a.achievedProperty()); Text text = getUIFactory().newText(a.getName()); Tooltip.install(text, new Tooltip(a.getDescription())); HBox box = new HBox(25, text, checkBox); box.setAlignment(Pos.CENTER_RIGHT); content.getChildren().add(box); } return content; }
/** * @return menu content with difficulty and playtime */ protected final MenuContent createContentGameplay() { log.debug("createContentGameplay()"); Spinner<GameDifficulty> difficultySpinner = new FXGLSpinner<>(FXCollections.observableArrayList(GameDifficulty.values())); difficultySpinner.increment(); app.getGameState().gameDifficultyProperty().bind(difficultySpinner.valueProperty()); String playtime = app.getGameplay().getStats().getPlaytimeHours() + "H " + app.getGameplay().getStats().getPlaytimeMinutes() + "M " + app.getGameplay().getStats().getPlaytimeSeconds() + "S"; return new MenuContent( new HBox(25, getUIFactory().newText(localizedStringProperty("menu.difficulty").concat(":")), difficultySpinner), new HBox(25, getUIFactory().newText(localizedStringProperty("menu.playtime").concat(":")), getUIFactory().newText(playtime)) ); }