Skip to content

Commit

Permalink
feat: added loadVideo() to asset loader, related to #1120 #406
Browse files Browse the repository at this point in the history
  • Loading branch information
AlmasB committed May 15, 2023
1 parent 468bdad commit 8ab6c2d
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,6 @@ enum class AssetType {
UI,
CSS,
FONT,
MODEL3D
MODEL3D,
VIDEO
}
39 changes: 39 additions & 0 deletions fxgl-samples/src/main/java/sandbox/view/VideoSample.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/*
* FXGL - JavaFX Game Library. The MIT License (MIT).
* Copyright (c) AlmasB ([email protected]).
* See LICENSE for details.
*/

package sandbox.view;

import com.almasb.fxgl.app.GameApplication;
import com.almasb.fxgl.app.GameSettings;

import static com.almasb.fxgl.dsl.FXGL.*;

/**
* Shows how to load video files.
*
* @author Almas Baimagambetov ([email protected])
*/
public class VideoSample extends GameApplication {
@Override
protected void initSettings(GameSettings settings) {
settings.setWidth(1280);
settings.setHeight(720);
}

@Override
protected void initUI() {
var video = getAssetLoader().loadVideo("testvideo.mp4");
video.setFitWidth(getAppWidth());
video.setFitHeight(getAppHeight());
video.getMediaPlayer().play();

addUINode(video);
}

public static void main(String[] args) {
launch(args);
}
}
1 change: 1 addition & 0 deletions fxgl/src/main/java/module-info.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
requires transitive javafx.graphics;
requires transitive javafx.controls;
requires transitive javafx.fxml;
requires transitive javafx.media;

requires java.desktop;
requires com.fasterxml.jackson.databind;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ import javafx.fxml.FXMLLoader
import javafx.scene.Parent
import javafx.scene.image.Image
import javafx.scene.layout.Pane
import javafx.scene.media.Media
import javafx.scene.media.MediaPlayer
import javafx.scene.media.MediaView
import javafx.scene.text.Font
import java.io.InputStream
import java.net.URL
Expand All @@ -49,6 +52,7 @@ private const val PROPERTIES_DIR = ASSETS_DIR + "properties/"
private const val LEVELS_DIR = ASSETS_DIR + "levels/"
private const val DIALOGUES_DIR = ASSETS_DIR + "dialogues/"
private const val MODELS_DIR = ASSETS_DIR + "models/"
private const val VIDEOS_DIR = ASSETS_DIR + "videos/"

private const val UI_DIR = ASSETS_DIR + "ui/"
private const val CSS_DIR = UI_DIR + "css/"
Expand Down Expand Up @@ -98,6 +102,7 @@ class FXGLAssetLoaderService : AssetLoaderService() {
assetData[CSS] = CSSAssetLoader()
assetData[FONT] = FontAssetLoader()
assetData[MODEL3D] = Model3DAssetLoader()
assetData[VIDEO] = VideoAssetLoader()
}
}

Expand Down Expand Up @@ -469,6 +474,20 @@ class FXGLAssetLoaderService : AssetLoaderService() {
return load(MODEL3D, url)
}

/**
* Loads a video from file with given [name] from /assets/videos/.
*/
fun loadVideo(name: String): MediaView {
return load(VIDEO, name)
}

/**
* Loads a video file from given [url].
*/
fun loadVideo(url: URL): MediaView {
return load(VIDEO, url)
}

/**
* Load an asset as [assetType] from given [fileName] (relative to its category directory).
* For example, to load "player.png" from "/assets/textures", the call is
Expand Down Expand Up @@ -829,4 +848,26 @@ private class Model3DAssetLoader : AssetLoader<Model3D>(
}

override fun getDummy(): Model3D = Model3D()
}

private class VideoAssetLoader : AssetLoader<MediaView>(
MediaView::class.java,
VIDEOS_DIR
) {

override fun cast(obj: Any): MediaView {
val mediaView = obj as MediaView

val mediaPlayer = MediaPlayer(mediaView.mediaPlayer.media)

return MediaView(mediaPlayer)
}

override fun load(url: URL): MediaView {
return MediaView(MediaPlayer(Media(url.toExternalForm())))
}

override fun getDummy(): MediaView {
return MediaView()
}
}

0 comments on commit 8ab6c2d

Please sign in to comment.