@@ -33,6 +33,9 @@ import javafx.fxml.FXMLLoader
3333import javafx.scene.Parent
3434import javafx.scene.image.Image
3535import javafx.scene.layout.Pane
36+ import javafx.scene.media.Media
37+ import javafx.scene.media.MediaPlayer
38+ import javafx.scene.media.MediaView
3639import javafx.scene.text.Font
3740import java.io.InputStream
3841import java.net.URL
@@ -49,6 +52,7 @@ private const val PROPERTIES_DIR = ASSETS_DIR + "properties/"
4952private const val LEVELS_DIR = ASSETS_DIR + " levels/"
5053private const val DIALOGUES_DIR = ASSETS_DIR + " dialogues/"
5154private const val MODELS_DIR = ASSETS_DIR + " models/"
55+ private const val VIDEOS_DIR = ASSETS_DIR + " videos/"
5256
5357private const val UI_DIR = ASSETS_DIR + " ui/"
5458private 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