Feat: Add intro video
This commit is contained in:
@@ -0,0 +1,91 @@
|
|||||||
|
package ch.unibas.dmi.dbis.cs108.casono.client.ui;
|
||||||
|
|
||||||
|
import ch.unibas.dmi.dbis.cs108.casono.client.ui.lobbyui.Casinomainui;
|
||||||
|
import java.net.URL;
|
||||||
|
import javafx.application.Application;
|
||||||
|
import javafx.application.Platform;
|
||||||
|
import javafx.geometry.Rectangle2D;
|
||||||
|
import javafx.scene.Scene;
|
||||||
|
import javafx.scene.layout.StackPane;
|
||||||
|
import javafx.scene.media.Media;
|
||||||
|
import javafx.scene.media.MediaPlayer;
|
||||||
|
import javafx.scene.media.MediaView;
|
||||||
|
import javafx.stage.Screen;
|
||||||
|
import javafx.stage.Stage;
|
||||||
|
import javafx.stage.StageStyle;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
/** Plays an intro video in fullscreen and then starts the main UI. */
|
||||||
|
public class IntroVideoPlayer extends Application {
|
||||||
|
|
||||||
|
private static final Logger LOGGER = LogManager.getLogger(IntroVideoPlayer.class);
|
||||||
|
|
||||||
|
private Stage videoStage;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void start(Stage stage) {
|
||||||
|
this.videoStage = stage;
|
||||||
|
|
||||||
|
URL videoUrl = getClass().getResource("/images/placeholder-animation.mp4");
|
||||||
|
|
||||||
|
if (videoUrl == null) {
|
||||||
|
LOGGER.error("Video file not found!");
|
||||||
|
Platform.exit();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Media media = new Media(videoUrl.toExternalForm());
|
||||||
|
MediaPlayer mediaPlayer = new MediaPlayer(media);
|
||||||
|
MediaView mediaView = new MediaView(mediaPlayer);
|
||||||
|
|
||||||
|
StackPane root = new StackPane(mediaView);
|
||||||
|
|
||||||
|
Rectangle2D screenBounds = Screen.getPrimary().getBounds();
|
||||||
|
|
||||||
|
Scene scene = new Scene(root, screenBounds.getWidth(), screenBounds.getHeight());
|
||||||
|
|
||||||
|
// scale video automatically
|
||||||
|
mediaView.setPreserveRatio(true);
|
||||||
|
mediaView.setFitWidth(screenBounds.getWidth());
|
||||||
|
mediaView.setFitHeight(screenBounds.getHeight());
|
||||||
|
|
||||||
|
stage.initStyle(StageStyle.UNDECORATED);
|
||||||
|
stage.setFullScreen(true);
|
||||||
|
stage.setScene(scene);
|
||||||
|
stage.show();
|
||||||
|
|
||||||
|
mediaPlayer.setOnEndOfMedia(this::onVideoEnd);
|
||||||
|
mediaPlayer.play();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onVideoEnd() {
|
||||||
|
videoStage.close();
|
||||||
|
setSystemProperties();
|
||||||
|
startMainUI();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setSystemProperties() {
|
||||||
|
var params = getParameters().getRaw();
|
||||||
|
if (params == null || params.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String arg = params.get(0);
|
||||||
|
String[] parts = arg.split(":", 2);
|
||||||
|
if (parts.length == 2) {
|
||||||
|
System.setProperty("casono.server.host", parts[0]);
|
||||||
|
System.setProperty("casono.server.port", parts[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void startMainUI() {
|
||||||
|
Stage mainStage = new Stage();
|
||||||
|
try {
|
||||||
|
new Casinomainui().start(mainStage);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
Platform.exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,13 +1,8 @@
|
|||||||
package ch.unibas.dmi.dbis.cs108.casono.client.ui;
|
package ch.unibas.dmi.dbis.cs108.casono.client.ui;
|
||||||
|
|
||||||
import ch.unibas.dmi.dbis.cs108.casono.client.ui.lobbyui.Casinomainui;
|
|
||||||
import javafx.application.Application;
|
import javafx.application.Application;
|
||||||
|
|
||||||
/**
|
/** Launcher for the Casono intro animation. */
|
||||||
* Launcher for the Casono main UI.
|
|
||||||
*
|
|
||||||
* <p>Default constructor for the application.
|
|
||||||
*/
|
|
||||||
public class Launcher {
|
public class Launcher {
|
||||||
|
|
||||||
/** Default constructor. */
|
/** Default constructor. */
|
||||||
@@ -21,6 +16,6 @@ public class Launcher {
|
|||||||
* @param args Command line arguments
|
* @param args Command line arguments
|
||||||
*/
|
*/
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
Application.launch(Casinomainui.class, args);
|
Application.launch(IntroVideoPlayer.class, args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,15 +32,9 @@ public class Casinomainui extends Application {
|
|||||||
public void start(Stage stage) throws IOException {
|
public void start(Stage stage) throws IOException {
|
||||||
// If the launcher passed an address argument (ip:port), expose it as
|
// If the launcher passed an address argument (ip:port), expose it as
|
||||||
// system properties so controllers can read it without embedding defaults.
|
// system properties so controllers can read it without embedding defaults.
|
||||||
var raw = getParameters().getRaw();
|
var params = getParameters();
|
||||||
if (raw != null && raw.size() > 0) {
|
processServerParameters(params);
|
||||||
String arg = raw.get(0);
|
|
||||||
String[] parts = arg.split(":", 2);
|
|
||||||
if (parts.length == 2) {
|
|
||||||
System.setProperty("casono.server.host", parts[0]);
|
|
||||||
System.setProperty("casono.server.port", parts[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FXMLLoader fxmlLoader =
|
FXMLLoader fxmlLoader =
|
||||||
new FXMLLoader(getClass().getResource("/ui-structure/Casinomainui.fxml"));
|
new FXMLLoader(getClass().getResource("/ui-structure/Casinomainui.fxml"));
|
||||||
Scene scene = new Scene(fxmlLoader.load(), SCENE_WIDTH, SCENE_HEIGHT);
|
Scene scene = new Scene(fxmlLoader.load(), SCENE_WIDTH, SCENE_HEIGHT);
|
||||||
@@ -54,6 +48,24 @@ public class Casinomainui extends Application {
|
|||||||
stage.show();
|
stage.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void processServerParameters(Application.Parameters params) {
|
||||||
|
if (params == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var raw = params.getRaw();
|
||||||
|
if (raw == null || raw.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String arg = raw.get(0);
|
||||||
|
String[] parts = arg.split(":", 2);
|
||||||
|
if (parts.length == 2) {
|
||||||
|
System.setProperty("casono.server.host", parts[0]);
|
||||||
|
System.setProperty("casono.server.port", parts[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Main entry point for launching the application.
|
* Main entry point for launching the application.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user