Skip to content
Snippets Groups Projects
Commit 041cee7a authored by Tran Peter's avatar Tran Peter
Browse files

Merge branch 'ui-gameScene' into 'development'

Merge ui gameScene into development

See merge request !31
parents 7a88b7b2 24c9b300
No related branches found
No related tags found
4 merge requests!74V1,!73Initial commit,!71Merge DataBase into Development,!31Merge ui gameScene into development
package de.hdm_stuttgart.battlearena.Controller;
import de.hdm_stuttgart.battlearena.Controller.Utilities.ScreenClasses;
import de.hdm_stuttgart.battlearena.Controller.Utilities.SceneLoader;
import de.hdm_stuttgart.battlearena.Controller.Utilities.ScreenDimensionCalculator;
import de.hdm_stuttgart.battlearena.Controller.Enum.GameMode;
import de.hdm_stuttgart.battlearena.Controller.Enum.GameState;
......@@ -17,35 +17,43 @@ import de.hdm_stuttgart.battlearena.Model.Map.TileManager;
import de.hdm_stuttgart.battlearena.Model.Sound.SoundEffects;
import javafx.animation.AnimationTimer;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.geometry.Insets;
import javafx.geometry.Rectangle2D;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.effect.Blend;
import javafx.scene.effect.BlendMode;
import javafx.scene.effect.BoxBlur;
import javafx.scene.effect.GaussianBlur;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Modality;
import javafx.stage.Screen;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.ResourceBundle;
import java.util.*;
import java.util.stream.Collectors;
public class GameSceneController implements Initializable {
private static final Logger log = LogManager.getLogger(GameSceneController.class);
@FXML
private BorderPane gameScene;
@FXML
private Canvas canvas2D;
@FXML
......@@ -58,6 +66,9 @@ public class GameSceneController implements Initializable {
private Label playerHp, enemyHp, time, round;
@FXML
private StackPane stackPane;
private final Pane pause = new SceneLoader().loadScene("Pause");
private boolean wasPaused;
Screen screen = Screen.getPrimary();
Rectangle2D visualBounds = screen.getVisualBounds();
final private double healthBarWidth = screen.getBounds().getWidth() / 5;
......@@ -211,6 +222,13 @@ public class GameSceneController implements Initializable {
graphicsContext2D.clearRect(0, 0, canvas2D.getWidth(), canvas2D.getHeight());
renderContent(graphicsContext2D);
updateContent();
if (wasPaused) {
resume();
}
} else {
if (!wasPaused) {
pauseMenu();
}
}
}
};
......@@ -218,6 +236,34 @@ public class GameSceneController implements Initializable {
log.debug("Game loop started");
}
private void pauseMenu() {
// setting blur in for loop otherwise all child node will inherit blur from root including pause menu
for (Node child : gameScene.getChildren()) {
if (child != stackPane) {
child.setEffect(new GaussianBlur(10));
}
}
for (Node child : stackPane.getChildren()) {
if (child != pause) {
child.setEffect(new GaussianBlur(10));
}
}
stackPane.getChildren().add(pause);
wasPaused = true;
}
private void resume() {
for (Node child : gameScene.getChildren()) {
child.setEffect(null);
}
for (Node child : stackPane.getChildren()) {
child.setEffect(null);
}
stackPane.getChildren().remove(pause);
wasPaused = false;
}
private void updateContent() {
player.updateEntityMovement(this);
enemy.updateEntityMovement(this);
......
package de.hdm_stuttgart.battlearena.Controller;
import de.hdm_stuttgart.battlearena.Controller.Utilities.SceneLoader;
import de.hdm_stuttgart.battlearena.Model.Inputs.InputHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.layout.VBox;
import java.io.IOException;
import java.util.Objects;
public class PauseController {
@FXML
private VBox parent;
@FXML
private void resume() {
InputHandler.getInstance().setPause(false);
}
@FXML
private void settings() {
parent.getChildren().clear();
parent.getChildren().add(new SceneLoader().loadScene("PauseSettings"));
}
@FXML
private void mainMenu() throws IOException {
// TODO: stop game scene
parent.getScene().setRoot(FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/MenuBorderPane.fxml"))));
}
}
package de.hdm_stuttgart.battlearena.Controller;
import de.hdm_stuttgart.battlearena.Controller.Utilities.MusicPlayerSingleton;
import de.hdm_stuttgart.battlearena.Controller.Utilities.SceneLoader;
import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Persistence;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.control.Slider;
import javafx.scene.layout.VBox;
import java.net.URL;
import java.util.ResourceBundle;
public class PauseSettingsController implements Initializable {
@FXML
private VBox parent;
@FXML
private Slider musicSlider, sfxSlider;
SceneLoader sceneLoader = new SceneLoader();
private int musicVolume, sfxVolume;
MusicPlayerSingleton musicPlayer = MusicPlayerSingleton.getInstance();
Persistence persistence = Persistence.getInstance();
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
setMusicVolume();
setSfxVolume();
}
@FXML
private void backButton() {
parent.getChildren().clear();
parent.getChildren().add(sceneLoader.loadScene("Pause"));
}
private void setMusicVolume() {
musicSlider.setValue(persistence.getSettings().getMusicVolume());
musicSlider.valueProperty().addListener((observableValue, oldValue, newValue) -> {
musicVolume = newValue.intValue();
persistence.getSettings().setMusicVolume(musicVolume);
musicPlayer.getMediaPlayer().setVolume((double) musicVolume / 100);
});
}
private void setSfxVolume(){
sfxSlider.setValue(persistence.getSettings().getSfxVolume());
sfxSlider.valueProperty().addListener(((observableValue, oldValue, newValue) -> {
sfxVolume = newValue.intValue();
persistence.getSettings().setSfxVolume(sfxVolume);
// sfxPlayer.getMediaPlayer().setVolume((double) sfxVolume / 100);
}));
}
}
package de.hdm_stuttgart.battlearena.Controller.Utilities;
public enum ScreenClasses {
// enums have a range because the screen calculations are not precise, especially with screen scaling in the OS settings
INCH27(26, 28),
INCH24(23, 25),
INCH13_SURFACE(12, 14);
final int lBound, uBound;
ScreenClasses(int lBound, int uBound) {
this.lBound = lBound;
this.uBound = uBound;
}
public static ScreenClasses inRange(int inches) {
for (ScreenClasses screens : ScreenClasses.values()) {
if (screens.isInRange(inches)) {
return screens;
}
}
return null;
}
private boolean isInRange(int inches) {
return inches >= lBound && inches <= uBound;
}
}
......@@ -129,6 +129,10 @@ public class InputHandler {
return isPause;
}
public void setPause(boolean pause) {
isPause = pause;
}
public boolean isMoveUp() {
return moveUp;
}
......
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.VBox?>
<VBox fx:id="parent" alignment="CENTER" prefHeight="400.0" prefWidth="600.0" spacing="20.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.hdm_stuttgart.battlearena.Controller.PauseController">
<children>
<Button mnemonicParsing="false" onAction="#resume" text="Continue" />
<Button mnemonicParsing="false" text="Restart" />
<Button mnemonicParsing="false" onAction="#settings" text="Settings" />
<Button mnemonicParsing="false" onAction="#mainMenu" text="Main Menu" />
</children>
</VBox>
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Slider?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Text?>
<VBox fx:id="parent" alignment="CENTER" prefHeight="400.0" prefWidth="600.0" spacing="20.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.hdm_stuttgart.battlearena.Controller.PauseSettingsController">
<children>
<HBox alignment="CENTER">
<children>
<VBox alignment="TOP_CENTER" spacing="10.0">
<children>
<VBox alignment="CENTER" VBox.vgrow="ALWAYS">
<children>
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="Music volume:" />
<Slider fx:id="musicSlider" blockIncrement="25.0" majorTickUnit="100.0" minorTickCount="1" prefHeight="14.0" prefWidth="480.0" showTickLabels="true" value="75.0" VBox.vgrow="NEVER" />
</children>
</VBox>
<VBox alignment="CENTER" VBox.vgrow="ALWAYS">
<children>
<Text strokeType="OUTSIDE" strokeWidth="0.0" text="SFX volume:" />
<Slider fx:id="sfxSlider" blockIncrement="25.0" majorTickUnit="100.0" minorTickCount="1" prefHeight="14.0" prefWidth="480.0" showTickLabels="true" value="75.0" />
</children>
</VBox>
</children>
</VBox>
</children>
</HBox>
<Button mnemonicParsing="false" onAction="#backButton" text="Back" />
</children>
</VBox>
......@@ -44,7 +44,7 @@
}
#gameScene {
-fx-background-image: url("../textures/images/game_scene_backgorund.jpg");
-fx-background-image: url("../textures/images/game_scene_backgorund.png");
-fx-background-size: cover;
}
......
src/main/resources/textures/images/game_scene_backgorund.png

3.93 MiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment