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

Merge branch 'development' into LocalGameplay

parents f87f2f95 5589550f
No related branches found
No related tags found
5 merge requests!74V1,!73Initial commit,!71Merge DataBase into Development,!64Merge LocalGameplay into Development,!63Merge localGameplay into development
Showing
with 166 additions and 74 deletions
include:
- template: Jobs/SAST.gitlab-ci.yml
cache:
paths:
- .m2/repository
variables:
MAVEN_OPTS: "-Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository"
stages:
- build
- test
- package
build-battlearena:
stage: build
image: maven:3.9.4-eclipse-temurin-20
script:
- "echo 'Starting Build Stage'"
- "mvn compile -X"
test-battlearena:
stage: test
image: maven:3.9.4-eclipse-temurin-20
script:
- "echo 'Starting Test Stage'"
- "mvn test"
artifacts:
reports:
junit:
- target/surefire-reports/TEST-*.xml
- target/failsafe-reports/TEST-*.xml
package-battlearena:
stage: package
image: maven:3.9.4-eclipse-temurin-20
script:
- "echo 'Starting Package Stage'"
- "mvn package"
only:
refs:
- main
artifacts:
paths:
- target/*.jar
expire_in: 2 days
## Hier könnte ihre Werbung stehn # Hier könnte ihre Werbung stehn
### Known issues: ### Known issues:
- JavaFX Mediaplayer is buggy under Windows 11. Videos can have weird behaviors and sometimes won't load at all - JavaFX Mediaplayer is buggy under Windows 11. Videos can have weird behaviors and sometimes won't load at all
- SQL server is very slow (thanks Oracle) - SQL server is very slow (thanks Oracle)
<br><br> <br>
#### FAQ:
Why is the Game loading so long? <br> - cry about it ## FAQ:
### Why is the Game loading so long?
cry about it
Why can't I connect to the Multiplayer? <br> - cry about it ### Why can't I connect to the Multiplayer?
cry about it
The character is moving too quickly <br> - cry about it ### Why is my character moving so quickly?
cry about it
The UI is too small <br> - cry about it ### Why is the UI so small?
cry about it
Why doesn't the intro load? <br> - cry about it ### Why doesn't the intro load?
\ No newline at end of file cry about it
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<groupId>de.hdm_stuttgart.battlearena</groupId> <groupId>de.hdm_stuttgart.battlearena</groupId>
<artifactId>BattleArena</artifactId> <artifactId>BattleArena</artifactId>
<version>v0.0.1</version> <version>0.6.1</version>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
......
...@@ -196,13 +196,17 @@ public class GameSceneController implements Initializable { ...@@ -196,13 +196,17 @@ public class GameSceneController implements Initializable {
updateExplosionspawns(); updateExplosionspawns();
player.checkGameplayObjectInteraction(player, graphicsContext2D); player.checkGameplayObjectInteraction(player, graphicsContext2D);
enemy.checkGameplayObjectInteraction(enemy, graphicsContext2D); enemy.checkGameplayObjectInteraction(enemy, graphicsContext2D);
player.placeBombAction(player, graphicsContext2D); player.placeBombAction(player, graphicsContext2D);
enemy.placeBombAction(enemy, graphicsContext2D); enemy.placeBombAction(enemy, graphicsContext2D);
healthBar();
}
private void healthBar() {
double playerHP = (double) getPlayer().getHealth() / getPlayer().getMaxEntityHealth(); double playerHP = (double) getPlayer().getHealth() / getPlayer().getMaxEntityHealth();
double enemyHP = (double) getEnemy().getHealth() / getEnemy().getMaxEntityHealth(); double enemyHP = (double) getEnemy().getHealth() / getEnemy().getMaxEntityHealth();
if (playerHP >= 0) { if (playerHP >= 0) {
playerHealth.setWidth(healthBarWidth * (playerHP)); playerHealth.setWidth(healthBarWidth * playerHP);
double playerPercentage = playerHP * 100; double playerPercentage = playerHP * 100;
playerHp.setText((int) playerPercentage + "%"); playerHp.setText((int) playerPercentage + "%");
} else { } else {
......
...@@ -4,6 +4,7 @@ import de.hdm_stuttgart.battlearena.Controller.Utilities.SceneLoader; ...@@ -4,6 +4,7 @@ import de.hdm_stuttgart.battlearena.Controller.Utilities.SceneLoader;
import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Persistence; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Persistence;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.TitledPane; import javafx.scene.control.TitledPane;
import javafx.scene.control.ToggleButton; import javafx.scene.control.ToggleButton;
import javafx.scene.control.ToggleGroup; import javafx.scene.control.ToggleGroup;
...@@ -21,6 +22,8 @@ public class LocalCreateController implements Initializable { ...@@ -21,6 +22,8 @@ public class LocalCreateController implements Initializable {
private TitledPane roundsTitledPane; private TitledPane roundsTitledPane;
@FXML @FXML
private ToggleGroup rounds; private ToggleGroup rounds;
@FXML
private Label errorMsg;
private final SceneLoader sceneLoader = new SceneLoader(); private final SceneLoader sceneLoader = new SceneLoader();
private static final Logger log = LogManager.getLogger(Persistence.class); private static final Logger log = LogManager.getLogger(Persistence.class);
...@@ -34,6 +37,7 @@ public class LocalCreateController implements Initializable { ...@@ -34,6 +37,7 @@ public class LocalCreateController implements Initializable {
log.info("Match rounds: " + selected.getText()); log.info("Match rounds: " + selected.getText());
} }
}); });
// TODO: toggle for time and other items
} }
@FXML @FXML
...@@ -44,7 +48,11 @@ public class LocalCreateController implements Initializable { ...@@ -44,7 +48,11 @@ public class LocalCreateController implements Initializable {
@FXML @FXML
private void skinSelectionScene() { private void skinSelectionScene() {
parent.getChildren().clear(); if (rounds.getSelectedToggle() == null) {
parent.getChildren().add(sceneLoader.loadScene("SkinSelection")); errorMsg.setText("Please select round");
} else {
parent.getChildren().clear();
parent.getChildren().add(sceneLoader.loadScene("SkinSelection"));
}
} }
} }
...@@ -9,6 +9,7 @@ import de.hdm_stuttgart.battlearena.Model.Map.Biom; ...@@ -9,6 +9,7 @@ import de.hdm_stuttgart.battlearena.Model.Map.Biom;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.TitledPane; import javafx.scene.control.TitledPane;
import javafx.scene.control.ToggleButton; import javafx.scene.control.ToggleButton;
import javafx.scene.control.ToggleGroup; import javafx.scene.control.ToggleGroup;
...@@ -29,7 +30,9 @@ public class MapSelectionController implements Initializable { ...@@ -29,7 +30,9 @@ public class MapSelectionController implements Initializable {
@FXML @FXML
private TitledPane maps, textures; private TitledPane maps, textures;
@FXML @FXML
private ToggleGroup textureToggle; private ToggleGroup textureToggle, mapToggle;
@FXML
private Label errorMsg;
private String selectedTexture, selectedMap; private String selectedTexture, selectedMap;
...@@ -72,17 +75,17 @@ public class MapSelectionController implements Initializable { ...@@ -72,17 +75,17 @@ public class MapSelectionController implements Initializable {
} }
private void setMap() { private void setMap() {
ToggleGroup group = new ToggleGroup(); mapToggle = new ToggleGroup();
for (MapData coreMap : coreMaps) { for (MapData coreMap : coreMaps) {
ToggleButton toggleButton = new ToggleButton(coreMap.getMapName()); ToggleButton toggleButton = new ToggleButton(coreMap.getMapName());
toggleButton.setToggleGroup(group); toggleButton.setToggleGroup(mapToggle);
boxBox.getChildren().add(toggleButton); boxBox.getChildren().add(toggleButton);
} }
group.selectedToggleProperty().addListener((observableValue, oldToggle, newToggle) -> { mapToggle.selectedToggleProperty().addListener((observableValue, oldToggle, newToggle) -> {
if (group.getSelectedToggle() != null) { if (mapToggle.getSelectedToggle() != null) {
ToggleButton selected = (ToggleButton) group.getSelectedToggle(); ToggleButton selected = (ToggleButton) mapToggle.getSelectedToggle();
mapIndex = boxBox.getChildren().indexOf(selected); mapIndex = boxBox.getChildren().indexOf(selected);
selectedMap = selected.getText(); selectedMap = selected.getText();
maps.setText(selectedMap); maps.setText(selectedMap);
...@@ -92,15 +95,21 @@ public class MapSelectionController implements Initializable { ...@@ -92,15 +95,21 @@ public class MapSelectionController implements Initializable {
@FXML @FXML
private void gameScene() { private void gameScene() {
try { if (mapToggle.getSelectedToggle() == null) {
RuntimeInfo.getInstance().setGameMap(coreMaps.get(mapIndex)); errorMsg.setText("Please select a map");
log.info("Selected map: " + selectedMap); } else if (textureToggle.getSelectedToggle() == null) {
log.info("Selected texture: " + selectedTexture); errorMsg.setText("Please select a texture");
parent.getScene().setRoot(FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/GameScene.fxml")))); } else {
RuntimeInfo.getInstance().setGameState(GameState.PLAYING); try {
} catch (IOException e) { RuntimeInfo.getInstance().setGameMap(coreMaps.get(mapIndex));
log.error(e); log.info("Selected map: " + selectedMap);
throw new RuntimeException(); log.info("Selected texture: " + selectedTexture);
parent.getScene().setRoot(FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/GameScene.fxml"))));
RuntimeInfo.getInstance().setGameState(GameState.PLAYING);
} catch (IOException e) {
log.error(e);
throw new RuntimeException();
}
} }
} }
......
...@@ -3,18 +3,23 @@ package de.hdm_stuttgart.battlearena.Controller; ...@@ -3,18 +3,23 @@ package de.hdm_stuttgart.battlearena.Controller;
import de.hdm_stuttgart.battlearena.Controller.Enum.GameState; import de.hdm_stuttgart.battlearena.Controller.Enum.GameState;
import de.hdm_stuttgart.battlearena.Controller.Utilities.CreateMediaPlayer; import de.hdm_stuttgart.battlearena.Controller.Utilities.CreateMediaPlayer;
import de.hdm_stuttgart.battlearena.Controller.Utilities.SceneLoader; import de.hdm_stuttgart.battlearena.Controller.Utilities.SceneLoader;
import de.hdm_stuttgart.battlearena.Main.Driver;
import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.AccountType; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.AccountType;
import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Persistence; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Persistence;
import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.RuntimeInfo; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.RuntimeInfo;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.fxml.LoadException;
import javafx.geometry.Rectangle2D; import javafx.geometry.Rectangle2D;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.image.ImageView; import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane; import javafx.scene.layout.StackPane;
import javafx.scene.media.MediaException;
import javafx.scene.media.MediaPlayer; import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView; import javafx.scene.media.MediaView;
import javafx.stage.Screen; import javafx.stage.Screen;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.File; import java.io.File;
import java.net.URL; import java.net.URL;
...@@ -34,11 +39,12 @@ public class MenuBorderPaneController implements Initializable { ...@@ -34,11 +39,12 @@ public class MenuBorderPaneController implements Initializable {
private final String[] videoFiles = {"depression", "cpr", "allMyFellas", "minecraftCat3", "steak", "wooOOoo", "myMind", "gender", "dogCheese", "gta", "cat", "bobama", "roomba", "firework", "cheezburger", private final String[] videoFiles = {"depression", "cpr", "allMyFellas", "minecraftCat3", "steak", "wooOOoo", "myMind", "gender", "dogCheese", "gta", "cat", "bobama", "roomba", "firework", "cheezburger",
"kangaroo", "lifeCouldBeMonke", "seal", "humping", "slap", "rolling", "spoderman", "imNotYou", "email", "parkingTickets", "russianKid", "rejectHumanity", "horse", "catSitting", "pablo", "holyCrap", "kangaroo", "lifeCouldBeMonke", "seal", "humping", "slap", "rolling", "spoderman", "imNotYou", "email", "parkingTickets", "russianKid", "rejectHumanity", "horse", "catSitting", "pablo", "holyCrap",
"lessGoo", "sadCat", "basketball", "yoinkySploinky", "spinSlot", "justTheTwoOfUs", "denied", "msPuff", "=D", "banana", "chaCha", "async", "sadHorse", "minecraftCat", "muecke", "top10Cats", "dog", "lessGoo", "sadCat", "basketball", "yoinkySploinky", "spinSlot", "justTheTwoOfUs", "denied", "msPuff", "=D", "banana", "chaCha", "async", "sadHorse", "minecraftCat", "muecke", "top10Cats", "dog",
"pot", "catRave", "mineCraftCat2", "defense", "singingCat", "tutel", "catEating", "catJump", "bear", "pancake", "frog", "gtfo", "carl", "dog2", "slippery", "wolf", "legCat", "sad", "waaahhh"}; "pot", "catRave", "mineCraftCat2", "defense", "singingCat", "rainbow", "tutel", "catEating", "catJump", "bear", "pancake", "frog", "gtfo", "carl", "dog2", "slippery", "wolf", "legCat", "sad", "waaahhh"};
List<String> shuffledVideos = Arrays.asList(videoFiles); List<String> shuffledVideos = Arrays.asList(videoFiles);
Rectangle2D screen = Screen.getPrimary().getVisualBounds(); Rectangle2D screen = Screen.getPrimary().getVisualBounds();
RuntimeInfo runtimeInfo = RuntimeInfo.getInstance(); RuntimeInfo runtimeInfo = RuntimeInfo.getInstance();
private static final Logger log = LogManager.getLogger(MenuBorderPaneController.class);
@Override @Override
public void initialize(URL url, ResourceBundle resourceBundle) { public void initialize(URL url, ResourceBundle resourceBundle) {
...@@ -53,7 +59,6 @@ public class MenuBorderPaneController implements Initializable { ...@@ -53,7 +59,6 @@ public class MenuBorderPaneController implements Initializable {
imgRight.setPreserveRatio(true); imgRight.setPreserveRatio(true);
imgLeft.setFitWidth(imageWidth); imgLeft.setFitWidth(imageWidth);
imgLeft.setPreserveRatio(true); imgLeft.setPreserveRatio(true);
easterEgg(); easterEgg();
// shuffle meme order // shuffle meme order
...@@ -68,7 +73,6 @@ public class MenuBorderPaneController implements Initializable { ...@@ -68,7 +73,6 @@ public class MenuBorderPaneController implements Initializable {
} }
}); });
btnLeft.setOnMouseClicked(mouseEvent -> { btnLeft.setOnMouseClicked(mouseEvent -> {
// make background music continue play after there is no meme left // make background music continue play after there is no meme left
if (videoCounter == shuffledVideos.size()) { if (videoCounter == shuffledVideos.size()) {
...@@ -82,13 +86,17 @@ public class MenuBorderPaneController implements Initializable { ...@@ -82,13 +86,17 @@ public class MenuBorderPaneController implements Initializable {
if (videoCounter < videoFiles.length) { if (videoCounter < videoFiles.length) {
String nextVideo = shuffledVideos.get(videoCounter); String nextVideo = shuffledVideos.get(videoCounter);
runtimeInfo.setGameState(GameState.NONE); runtimeInfo.setGameState(GameState.NONE);
mediaPlayer = new CreateMediaPlayer().getMediaPlayer(mediaView, new File("src/main/resources/videos/" + nextVideo + ".mp4"), false); try {
mediaView = new MediaView(mediaPlayer); mediaPlayer = new CreateMediaPlayer().getMediaPlayer(mediaView, new File("src/main/resources/videos/" + nextVideo + ".mp4"), false);
center.getChildren().add(mediaView); mediaView = new MediaView(mediaPlayer);
mediaPlayer.setOnEndOfMedia(() -> { center.getChildren().add(mediaView);
center.getChildren().remove(mediaView); mediaPlayer.setOnEndOfMedia(() -> {
runtimeInfo.setGameState(GameState.MENU); center.getChildren().remove(mediaView);
}); runtimeInfo.setGameState(GameState.MENU);
});
} catch (MediaException e) {
log.error(e);
}
} }
videoCounter++; videoCounter++;
}); });
......
...@@ -2,6 +2,7 @@ package de.hdm_stuttgart.battlearena.Controller; ...@@ -2,6 +2,7 @@ package de.hdm_stuttgart.battlearena.Controller;
import de.hdm_stuttgart.battlearena.Controller.Enum.GameState; import de.hdm_stuttgart.battlearena.Controller.Enum.GameState;
import de.hdm_stuttgart.battlearena.Controller.Utilities.SceneLoader; import de.hdm_stuttgart.battlearena.Controller.Utilities.SceneLoader;
import de.hdm_stuttgart.battlearena.Main.Driver;
import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Persistence; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Persistence;
import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.RuntimeInfo; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.RuntimeInfo;
import de.hdm_stuttgart.battlearena.Model.Sound.MusicPlayer; import de.hdm_stuttgart.battlearena.Model.Sound.MusicPlayer;
...@@ -9,8 +10,12 @@ import de.hdm_stuttgart.battlearena.Model.Sound.SoundEffects; ...@@ -9,8 +10,12 @@ import de.hdm_stuttgart.battlearena.Model.Sound.SoundEffects;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.fxml.LoadException;
import javafx.scene.control.Slider; import javafx.scene.control.Slider;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;
import javafx.scene.media.MediaException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.io.IOException; import java.io.IOException;
import java.net.URL; import java.net.URL;
...@@ -27,6 +32,7 @@ public class SettingsController implements Initializable { ...@@ -27,6 +32,7 @@ public class SettingsController implements Initializable {
private final Persistence persistence = Persistence.getInstance(); private final Persistence persistence = Persistence.getInstance();
private final MusicPlayer player = MusicPlayer.getInstance(); private final MusicPlayer player = MusicPlayer.getInstance();
private final SoundEffects sfx = new SoundEffects(); private final SoundEffects sfx = new SoundEffects();
private static final Logger log = LogManager.getLogger(SettingsController.class);
@Override @Override
public void initialize(URL url, ResourceBundle resourceBundle) { public void initialize(URL url, ResourceBundle resourceBundle) {
...@@ -36,9 +42,12 @@ public class SettingsController implements Initializable { ...@@ -36,9 +42,12 @@ public class SettingsController implements Initializable {
@FXML @FXML
private void creditScene() throws IOException { private void creditScene() throws IOException {
RuntimeInfo.getInstance().setGameState(GameState.NONE); try {
parent.getChildren().clear(); RuntimeInfo.getInstance().setGameState(GameState.NONE);
parent.getScene().setRoot(FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/credits.fxml")))); parent.getScene().setRoot(FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/credits.fxml"))));
} catch (LoadException e) {
log.error(e);
}
} }
@FXML @FXML
......
...@@ -6,6 +6,7 @@ import de.hdm_stuttgart.battlearena.Model.Entity.EntityClass; ...@@ -6,6 +6,7 @@ import de.hdm_stuttgart.battlearena.Model.Entity.EntityClass;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.geometry.Rectangle2D; import javafx.geometry.Rectangle2D;
import javafx.scene.control.Label;
import javafx.scene.control.ToggleButton; import javafx.scene.control.ToggleButton;
import javafx.scene.control.ToggleGroup; import javafx.scene.control.ToggleGroup;
import javafx.scene.image.ImageView; import javafx.scene.image.ImageView;
...@@ -24,6 +25,8 @@ public class SkinSelectionController implements Initializable { ...@@ -24,6 +25,8 @@ public class SkinSelectionController implements Initializable {
private ToggleGroup playerOne, playerTwo; private ToggleGroup playerOne, playerTwo;
@FXML @FXML
private ImageView playerOne1, playerOne2, playerOne3, playerTwo1, playerTwo2, playerTwo3; private ImageView playerOne1, playerOne2, playerOne3, playerTwo1, playerTwo2, playerTwo3;
@FXML
private Label errorMsg;
private String playerOneSkin, playerTwoSkin; private String playerOneSkin, playerTwoSkin;
private final RuntimeInfo runtimeInfo = RuntimeInfo.getInstance(); private final RuntimeInfo runtimeInfo = RuntimeInfo.getInstance();
private static final Logger log = LogManager.getLogger(MapSelectionController.class); private static final Logger log = LogManager.getLogger(MapSelectionController.class);
...@@ -86,9 +89,13 @@ public class SkinSelectionController implements Initializable { ...@@ -86,9 +89,13 @@ public class SkinSelectionController implements Initializable {
@FXML @FXML
private void gameScene() { private void gameScene() {
log.info("Player 1 skin: " + playerOneSkin); if (playerOne.getSelectedToggle() == null || playerTwo.getSelectedToggle() == null) {
log.info("Player 2 skin: " + playerTwoSkin); errorMsg.setText("Please select a skin!");
parent.getChildren().clear(); } else {
parent.getChildren().add(new SceneLoader().loadScene("MapSelection")); log.info("Player 1 skin: " + playerOneSkin);
log.info("Player 2 skin: " + playerTwoSkin);
parent.getChildren().clear();
parent.getChildren().add(new SceneLoader().loadScene("MapSelection"));
}
} }
} }
...@@ -2,13 +2,14 @@ package de.hdm_stuttgart.battlearena.Controller.Utilities; ...@@ -2,13 +2,14 @@ package de.hdm_stuttgart.battlearena.Controller.Utilities;
import javafx.scene.layout.BorderPane; import javafx.scene.layout.BorderPane;
import javafx.scene.media.Media; import javafx.scene.media.Media;
import javafx.scene.media.MediaException;
import javafx.scene.media.MediaPlayer; import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView; import javafx.scene.media.MediaView;
import java.io.File; import java.io.File;
public class CreateMediaPlayer { public class CreateMediaPlayer {
public MediaPlayer getMediaPlayer(MediaView mediaView, File file, boolean isFullscreen, BorderPane... parent) { public MediaPlayer getMediaPlayer(MediaView mediaView, File file, boolean isFullscreen, BorderPane... parent) throws MediaException {
Media media = new Media(file.toURI().toString()); Media media = new Media(file.toURI().toString());
MediaPlayer mediaPlayer = new MediaPlayer(media); MediaPlayer mediaPlayer = new MediaPlayer(media);
......
...@@ -9,6 +9,7 @@ import javafx.application.Application; ...@@ -9,6 +9,7 @@ import javafx.application.Application;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.event.EventHandler; import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.fxml.LoadException;
import javafx.geometry.Rectangle2D; import javafx.geometry.Rectangle2D;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.Scene; import javafx.scene.Scene;
...@@ -30,6 +31,7 @@ public class Driver extends Application { ...@@ -30,6 +31,7 @@ public class Driver extends Application {
Rectangle2D screen = Screen.getPrimary().getVisualBounds(); Rectangle2D screen = Screen.getPrimary().getVisualBounds();
InputHandler inputHandler = InputHandler.getInstance(); InputHandler inputHandler = InputHandler.getInstance();
Parent root;
...@@ -40,8 +42,11 @@ public class Driver extends Application { ...@@ -40,8 +42,11 @@ public class Driver extends Application {
Font.loadFont(getClass().getResourceAsStream("/fonts/AmaticSC-Bold.ttf"), 50); Font.loadFont(getClass().getResourceAsStream("/fonts/AmaticSC-Bold.ttf"), 50);
Font.loadFont(getClass().getResourceAsStream("/fonts/Arthemis-mLA22.ttf"), 50); Font.loadFont(getClass().getResourceAsStream("/fonts/Arthemis-mLA22.ttf"), 50);
Font.loadFont(getClass().getResourceAsStream("/fonts/ShadowsIntoLight-Regular.ttf"), 50); Font.loadFont(getClass().getResourceAsStream("/fonts/ShadowsIntoLight-Regular.ttf"), 50);
try {
Parent root = FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/Intro.fxml"))); root = FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/Intro.fxml")));
} catch (LoadException e) {
root = FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/LoadingScreen.fxml")));
}
Scene scene = new Scene(root); Scene scene = new Scene(root);
......
...@@ -538,6 +538,7 @@ class Player implements IEntity { ...@@ -538,6 +538,7 @@ class Player implements IEntity {
blastradius = updateBlastradius(blastradius); blastradius = updateBlastradius(blastradius);
if (isBigBombItemFrame && !isTeleportItemFrame) { if (isBigBombItemFrame && !isTeleportItemFrame) {
sfx.playSoundEffectOnce(SFX.BOMB);
log.debug("We have Big_Bomb ItemFrames in the List"); log.debug("We have Big_Bomb ItemFrames in the List");
bombPlacementRate = updateBombPlacementRate(bombPlacementRate); bombPlacementRate = updateBombPlacementRate(bombPlacementRate);
int xTile = (pixelpadding + mapPosX) / scaledTileSize; int xTile = (pixelpadding + mapPosX) / scaledTileSize;
...@@ -576,6 +577,7 @@ class Player implements IEntity { ...@@ -576,6 +577,7 @@ class Player implements IEntity {
removeMarker(markerPlacedPlayerTwo); removeMarker(markerPlacedPlayerTwo);
isTeleportItemFrame = false; isTeleportItemFrame = false;
} else if (!isTeleportItemFrame) { } else if (!isTeleportItemFrame) {
sfx.playSoundEffectOnce(SFX.BOMB);
log.debug("No BigBomb Itemframes in the List"); log.debug("No BigBomb Itemframes in the List");
bombPlacementRate = bombReducedPlacementRate; bombPlacementRate = bombReducedPlacementRate;
int xTile = (pixelpadding + mapPosX) / scaledTileSize; int xTile = (pixelpadding + mapPosX) / scaledTileSize;
......
...@@ -36,7 +36,6 @@ public class ConnectionHandler { ...@@ -36,7 +36,6 @@ public class ConnectionHandler {
ConnectionThread connectionthread = new ConnectionThread(client); ConnectionThread connectionthread = new ConnectionThread(client);
connectionthread.start(); connectionthread.start();
} }
private static class ConnectionThread extends Thread { private static class ConnectionThread extends Thread {
...@@ -49,6 +48,7 @@ public class ConnectionHandler { ...@@ -49,6 +48,7 @@ public class ConnectionHandler {
public void run() { public void run() {
try { try {
while (!Thread.interrupted()) { while (!Thread.interrupted()) {
System.out.println(Arrays.toString(coordinates));
int[] cords = client.sendcords(coordinates); int[] cords = client.sendcords(coordinates);
enemyX = cords[0]; enemyX = cords[0];
enemyY = cords[1]; enemyY = cords[1];
......
...@@ -77,17 +77,13 @@ public class Server { ...@@ -77,17 +77,13 @@ public class Server {
this.clientSocket = socket; this.clientSocket = socket;
} }
public void run() { public synchronized void run() {
ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(() -> {
try { try {
BufferedReader localIn = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); BufferedReader localIn = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter localOut = new PrintWriter(clientSocket.getOutputStream(), true); PrintWriter localOut = new PrintWriter(clientSocket.getOutputStream(), true);
String inputLine = localIn.readLine(); String inputLine;
while ((inputLine = localIn.readLine()) != null) { //only runs if there is a request from a server
if (inputLine != null) {
// Assuming that the input line is a comma-separated list of integers // Assuming that the input line is a comma-separated list of integers
String[] coordinates = inputLine.split(","); String[] coordinates = inputLine.split(",");
cords = new int[coordinates.length]; cords = new int[coordinates.length];
...@@ -157,27 +153,14 @@ public class Server { ...@@ -157,27 +153,14 @@ public class Server {
localOut.println(Arrays.toString(returncords)); localOut.println(Arrays.toString(returncords));
localOut.flush(); localOut.flush();
}
log.info("Player (X Y) : " + px + " " + py + " Attacking : " + playerAttacking + " direction : " + playerWalkDirection + " HP: " + playerHealth); log.info("Player (X Y) : " + px + " " + py + " Attacking : " + playerAttacking + " direction : " + playerWalkDirection + " HP: " + playerHealth);
log.info("Enemy (X Y) : " + enemyx + " " + enemyy + " Attacking : " + enemyAttacking + " direction : " + enemyWalkDirection + " HP: " + enemyHealth); log.info("Enemy (X Y) : " + enemyx + " " + enemyy + " Attacking : " + enemyAttacking + " direction : " + enemyWalkDirection + " HP: " + enemyHealth);
//check if server was shut down:W
if (!isServerRunning) {
executorService.shutdown();
try {
if (!executorService.awaitTermination(5, TimeUnit.SECONDS)) {
executorService.shutdownNow();
}
} catch (InterruptedException e) {
log.error("Error waiting for executor service termination: " + e.getMessage());
}
} }
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
}, 0, 50, TimeUnit.MILLISECONDS);
} }
} }
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
<?import javafx.geometry.Insets?> <?import javafx.geometry.Insets?>
<?import javafx.scene.control.Accordion?> <?import javafx.scene.control.Accordion?>
<?import javafx.scene.control.Button?> <?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.RadioButton?> <?import javafx.scene.control.RadioButton?>
<?import javafx.scene.control.ScrollPane?> <?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.TitledPane?> <?import javafx.scene.control.TitledPane?>
...@@ -116,6 +117,8 @@ ...@@ -116,6 +117,8 @@
</children> </children>
</HBox> </HBox>
<Pane VBox.vgrow="ALWAYS" /> <Pane VBox.vgrow="ALWAYS" />
<Label fx:id="errorMsg" />
<Pane VBox.vgrow="ALWAYS" />
<Button mnemonicParsing="false" onAction="#skinSelectionScene" text="Next" /> <Button mnemonicParsing="false" onAction="#skinSelectionScene" text="Next" />
<Pane VBox.vgrow="ALWAYS" /> <Pane VBox.vgrow="ALWAYS" />
<Button mnemonicParsing="false" onAction="#backButton" text="Back"> <Button mnemonicParsing="false" onAction="#backButton" text="Back">
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
<?import javafx.geometry.Insets?> <?import javafx.geometry.Insets?>
<?import javafx.scene.control.Accordion?> <?import javafx.scene.control.Accordion?>
<?import javafx.scene.control.Button?> <?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.ScrollPane?> <?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.control.TitledPane?> <?import javafx.scene.control.TitledPane?>
<?import javafx.scene.control.ToggleButton?> <?import javafx.scene.control.ToggleButton?>
...@@ -12,7 +13,6 @@ ...@@ -12,7 +13,6 @@
<?import javafx.scene.layout.VBox?> <?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Text?> <?import javafx.scene.text.Text?>
<HBox xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.hdm_stuttgart.battlearena.Controller.MapSelectionController"> <HBox xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.hdm_stuttgart.battlearena.Controller.MapSelectionController">
<children> <children>
<Pane HBox.hgrow="ALWAYS" /> <Pane HBox.hgrow="ALWAYS" />
...@@ -74,6 +74,7 @@ ...@@ -74,6 +74,7 @@
<Text fx:id="selectedMapText" strokeType="OUTSIDE" strokeWidth="0.0" /> <Text fx:id="selectedMapText" strokeType="OUTSIDE" strokeWidth="0.0" />
</children> </children>
</HBox> </HBox>
<Label fx:id="errorMsg" />
<Button mnemonicParsing="false" onAction="#gameScene" text="Start" /> <Button mnemonicParsing="false" onAction="#gameScene" text="Start" />
<Button mnemonicParsing="false" onAction="#backButton" text="Back"> <Button mnemonicParsing="false" onAction="#backButton" text="Back">
<VBox.margin> <VBox.margin>
......
...@@ -81,6 +81,7 @@ ...@@ -81,6 +81,7 @@
</ToggleButton> </ToggleButton>
</children> </children>
</HBox> </HBox>
<Label fx:id="errorMsg" />
<Button mnemonicParsing="false" onAction="#gameScene" text="Next" /> <Button mnemonicParsing="false" onAction="#gameScene" text="Next" />
<Button mnemonicParsing="false" onAction="#backButton" text="Back" /> <Button mnemonicParsing="false" onAction="#backButton" text="Back" />
</children> </children>
......
File added
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