Skip to content

Commit 8ab6c2d

Browse files
committed
feat: added loadVideo() to asset loader, related to #1120 #406
1 parent 468bdad commit 8ab6c2d

File tree

5 files changed

+83
-1
lines changed

5 files changed

+83
-1
lines changed

fxgl-core/src/main/kotlin/com/almasb/fxgl/core/asset/AssetType.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,6 @@ enum class AssetType {
2222
UI,
2323
CSS,
2424
FONT,
25-
MODEL3D
25+
MODEL3D,
26+
VIDEO
2627
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* FXGL - JavaFX Game Library. The MIT License (MIT).
3+
* Copyright (c) AlmasB ([email protected]).
4+
* See LICENSE for details.
5+
*/
6+
7+
package sandbox.view;
8+
9+
import com.almasb.fxgl.app.GameApplication;
10+
import com.almasb.fxgl.app.GameSettings;
11+
12+
import static com.almasb.fxgl.dsl.FXGL.*;
13+
14+
/**
15+
* Shows how to load video files.
16+
*
17+
* @author Almas Baimagambetov ([email protected])
18+
*/
19+
public class VideoSample extends GameApplication {
20+
@Override
21+
protected void initSettings(GameSettings settings) {
22+
settings.setWidth(1280);
23+
settings.setHeight(720);
24+
}
25+
26+
@Override
27+
protected void initUI() {
28+
var video = getAssetLoader().loadVideo("testvideo.mp4");
29+
video.setFitWidth(getAppWidth());
30+
video.setFitHeight(getAppHeight());
31+
video.getMediaPlayer().play();
32+
33+
addUINode(video);
34+
}
35+
36+
public static void main(String[] args) {
37+
launch(args);
38+
}
39+
}

fxgl/src/main/java/module-info.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
requires transitive javafx.graphics;
1919
requires transitive javafx.controls;
2020
requires transitive javafx.fxml;
21+
requires transitive javafx.media;
2122

2223
requires java.desktop;
2324
requires com.fasterxml.jackson.databind;

fxgl/src/main/kotlin/com/almasb/fxgl/app/services/FXGLAssetLoaderService.kt

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ import javafx.fxml.FXMLLoader
3333
import javafx.scene.Parent
3434
import javafx.scene.image.Image
3535
import javafx.scene.layout.Pane
36+
import javafx.scene.media.Media
37+
import javafx.scene.media.MediaPlayer
38+
import javafx.scene.media.MediaView
3639
import javafx.scene.text.Font
3740
import java.io.InputStream
3841
import java.net.URL
@@ -49,6 +52,7 @@ private const val PROPERTIES_DIR = ASSETS_DIR + "properties/"
4952
private const val LEVELS_DIR = ASSETS_DIR + "levels/"
5053
private const val DIALOGUES_DIR = ASSETS_DIR + "dialogues/"
5154
private const val MODELS_DIR = ASSETS_DIR + "models/"
55+
private const val VIDEOS_DIR = ASSETS_DIR + "videos/"
5256

5357
private const val UI_DIR = ASSETS_DIR + "ui/"
5458
private const val CSS_DIR = UI_DIR + "css/"
@@ -98,6 +102,7 @@ class FXGLAssetLoaderService : AssetLoaderService() {
98102
assetData[CSS] = CSSAssetLoader()
99103
assetData[FONT] = FontAssetLoader()
100104
assetData[MODEL3D] = Model3DAssetLoader()
105+
assetData[VIDEO] = VideoAssetLoader()
101106
}
102107
}
103108

@@ -469,6 +474,20 @@ class FXGLAssetLoaderService : AssetLoaderService() {
469474
return load(MODEL3D, url)
470475
}
471476

477+
/**
478+
* Loads a video from file with given [name] from /assets/videos/.
479+
*/
480+
fun loadVideo(name: String): MediaView {
481+
return load(VIDEO, name)
482+
}
483+
484+
/**
485+
* Loads a video file from given [url].
486+
*/
487+
fun loadVideo(url: URL): MediaView {
488+
return load(VIDEO, url)
489+
}
490+
472491
/**
473492
* Load an asset as [assetType] from given [fileName] (relative to its category directory).
474493
* For example, to load "player.png" from "/assets/textures", the call is
@@ -829,4 +848,26 @@ private class Model3DAssetLoader : AssetLoader<Model3D>(
829848
}
830849

831850
override fun getDummy(): Model3D = Model3D()
851+
}
852+
853+
private class VideoAssetLoader : AssetLoader<MediaView>(
854+
MediaView::class.java,
855+
VIDEOS_DIR
856+
) {
857+
858+
override fun cast(obj: Any): MediaView {
859+
val mediaView = obj as MediaView
860+
861+
val mediaPlayer = MediaPlayer(mediaView.mediaPlayer.media)
862+
863+
return MediaView(mediaPlayer)
864+
}
865+
866+
override fun load(url: URL): MediaView {
867+
return MediaView(MediaPlayer(Media(url.toExternalForm())))
868+
}
869+
870+
override fun getDummy(): MediaView {
871+
return MediaView()
872+
}
832873
}

0 commit comments

Comments
 (0)