diff --git a/app/src/main/java/org/toop/app/view/displays/SongDisplay.java b/app/src/main/java/org/toop/app/view/displays/SongDisplay.java index 071d775..d1bb14d 100644 --- a/app/src/main/java/org/toop/app/view/displays/SongDisplay.java +++ b/app/src/main/java/org/toop/app/view/displays/SongDisplay.java @@ -3,64 +3,84 @@ package org.toop.app.view.displays; import javafx.application.Platform; import javafx.scene.control.ProgressBar; import javafx.scene.layout.VBox; -import org.toop.app.App; -import org.toop.app.view.View; -import org.toop.framework.audio.AudioEventListener; -import org.toop.framework.resource.ResourceManager; -import org.toop.framework.resource.resources.MusicAsset; -import org.toop.local.AppContext; +import javafx.scene.paint.Color; +import org.toop.framework.audio.events.AudioEvents; +import org.toop.framework.eventbus.EventFlow; import javafx.geometry.Pos; -import javafx.scene.control.Button; import javafx.scene.text.Text; -import org.toop.framework.audio.MusicManager; - -import java.util.ArrayList; -import java.util.List; public class SongDisplay extends VBox { private final Text songTitle; private final ProgressBar progressBar; private final Text progressText; - private MusicManager manager; public SongDisplay() { + new EventFlow() + .listen(this::updateTheSong); + + //TODO ADD NICER CSS setAlignment(Pos.CENTER); getStyleClass().add("song-display"); + + // TODO ADD GOOD SONG TITLES WITH ARTISTS DISPLAYED songTitle = new Text("song playing"); + songTitle.setFill(Color.WHITE); songTitle.getStyleClass().add("song-title"); progressBar = new ProgressBar(0); progressBar.getStyleClass().add("progress-bar"); - progressText = new Text("THIS IS AN EXAMPLE CUZ BAS DIDNT DECIDE TO MAKE EVENTS"); + progressText = new Text("0:00/0:00"); + progressText.setFill(Color.WHITE); progressText.getStyleClass().add("progress-text"); + //TODO ADD SKIP BUTTON + getChildren().addAll(songTitle, progressBar, progressText); - - setMusicManager(); } - public void updateTheSong(String title, double progress) { - songTitle.setText(title); - progressBar.setProgress(progress); + private void updateTheSong(AudioEvents.PlayingMusic event) { + Platform.runLater(() -> { + String text = event.name(); + text = text.substring(0, text.length() - 4); + songTitle.setText(text); + double currentPos = event.currentPosition(); + double duration = event.duration(); + if (currentPos / duration > 0.05) { + double progress = currentPos / duration; + progressBar.setProgress(progress); + } + else if (currentPos / duration < 0.05) { + progressBar.setProgress(0.05); + } + progressText.setText(getTimeString(event.currentPosition(), event.duration())); + }); } - public String getPlayingSong() { - return manager.getCurrentTrack().getName(); - } + private String getTimeString(long position, long duration) { + long positionMinutes = position / 60; + long durationMinutes = duration / 60; + long positionSeconds = position % 60; + long durationSeconds = duration % 60; + String positionSecondsStr = String.valueOf(positionSeconds); + String durationSecondsStr = String.valueOf(durationSeconds); - public void setMusicManager() { - List tracks = ResourceManager.getAllOfTypeAndRemoveWrapper(MusicAsset.class); - this.manager = new MusicManager<>(tracks); + if (positionSeconds < 10) { + positionSecondsStr = "0" + positionSeconds; + } + if (durationSeconds < 10) { + durationSecondsStr = "0" + durationSeconds; + } - String song = getPlayingSong(); - Platform.runLater(() -> songTitle.setText(song)); + String time = positionMinutes + ":" + positionSecondsStr + " / " + durationMinutes + ":" + durationSecondsStr; + return time; } } + diff --git a/app/src/main/java/org/toop/app/view/views/ChallengeView.java b/app/src/main/java/org/toop/app/view/views/ChallengeView.java index f5ee907..55b526f 100644 --- a/app/src/main/java/org/toop/app/view/views/ChallengeView.java +++ b/app/src/main/java/org/toop/app/view/views/ChallengeView.java @@ -4,6 +4,7 @@ import org.toop.app.GameInformation; import org.toop.app.Server; import org.toop.app.view.View; import org.toop.app.view.ViewStack; +import org.toop.app.view.displays.SongDisplay; import org.toop.local.AppContext; import javafx.geometry.Pos; @@ -95,6 +96,14 @@ public final class ChallengeView extends View { nodes.add(vbox(computerDifficultyText, computerDifficultySlider)); } + final SongDisplay songdisplay = new SongDisplay(); + + + add(Pos.BOTTOM_RIGHT, + fit(vboxFill( + songdisplay + ))); + add(Pos.CENTER, fit(hboxFill( vboxFill( diff --git a/app/src/main/java/org/toop/app/view/views/CreditsView.java b/app/src/main/java/org/toop/app/view/views/CreditsView.java index 84da377..3f02ef8 100644 --- a/app/src/main/java/org/toop/app/view/views/CreditsView.java +++ b/app/src/main/java/org/toop/app/view/views/CreditsView.java @@ -3,6 +3,7 @@ package org.toop.app.view.views; import org.toop.app.App; import org.toop.app.view.View; import org.toop.app.view.ViewStack; +import org.toop.app.view.displays.SongDisplay; import org.toop.local.AppContext; import javafx.animation.KeyFrame; @@ -46,6 +47,14 @@ public final class CreditsView extends View { final Text openglHeader = header(); openglHeader.setText(AppContext.getString("opengl") + ": Omar"); + final SongDisplay songdisplay = new SongDisplay(); + + + add(Pos.BOTTOM_RIGHT, + fit(vboxFill( + songdisplay + ))); + add(Pos.CENTER, fit("credits-fit", vboxFill("credits-container", "credits-container", vbox("credits-spacer-top", ""), diff --git a/app/src/main/java/org/toop/app/view/views/GameView.java b/app/src/main/java/org/toop/app/view/views/GameView.java index 3834159..0ea669b 100644 --- a/app/src/main/java/org/toop/app/view/views/GameView.java +++ b/app/src/main/java/org/toop/app/view/views/GameView.java @@ -2,6 +2,7 @@ package org.toop.app.view.views; import org.toop.app.view.View; import org.toop.app.view.ViewStack; +import org.toop.app.view.displays.SongDisplay; import org.toop.local.AppContext; import javafx.geometry.Pos; @@ -85,6 +86,14 @@ public final class GameView extends View { forfeitButton = null; } + final SongDisplay songdisplay = new SongDisplay(); + + + add(Pos.BOTTOM_RIGHT, + fit(vboxFill( + songdisplay + ))); + if (onMessage != null) { chatListView = new ListView(); diff --git a/app/src/main/java/org/toop/app/view/views/LocalMultiplayerView.java b/app/src/main/java/org/toop/app/view/views/LocalMultiplayerView.java index a4e72d9..88c9e84 100644 --- a/app/src/main/java/org/toop/app/view/views/LocalMultiplayerView.java +++ b/app/src/main/java/org/toop/app/view/views/LocalMultiplayerView.java @@ -5,6 +5,7 @@ import org.toop.app.game.ReversiGame; import org.toop.app.game.TicTacToeGame; import org.toop.app.view.View; import org.toop.app.view.ViewStack; +import org.toop.app.view.displays.SongDisplay; import org.toop.local.AppContext; import javafx.geometry.Pos; @@ -48,6 +49,14 @@ public final class LocalMultiplayerView extends View { } }); + final SongDisplay songdisplay = new SongDisplay(); + + + add(Pos.BOTTOM_RIGHT, + fit(vboxFill( + songdisplay + ))); + add(Pos.CENTER, fit(vboxFill( hbox( diff --git a/app/src/main/java/org/toop/app/view/views/LocalView.java b/app/src/main/java/org/toop/app/view/views/LocalView.java index 2089e5c..550bdb9 100644 --- a/app/src/main/java/org/toop/app/view/views/LocalView.java +++ b/app/src/main/java/org/toop/app/view/views/LocalView.java @@ -3,6 +3,7 @@ package org.toop.app.view.views; import org.toop.app.GameInformation; import org.toop.app.view.View; import org.toop.app.view.ViewStack; +import org.toop.app.view.displays.SongDisplay; import org.toop.local.AppContext; import javafx.geometry.Pos; @@ -34,6 +35,14 @@ public final class LocalView extends View { backButton.setText(AppContext.getString("back")); backButton.setOnAction(_ -> { ViewStack.push(new MainView()); }); + final SongDisplay songdisplay = new SongDisplay(); + + + add(Pos.BOTTOM_RIGHT, + fit(vboxFill( + songdisplay + ))); + add(Pos.BOTTOM_LEFT, vboxFill( backButton diff --git a/app/src/main/java/org/toop/app/view/views/MainView.java b/app/src/main/java/org/toop/app/view/views/MainView.java index 02c8085..10fa0fc 100644 --- a/app/src/main/java/org/toop/app/view/views/MainView.java +++ b/app/src/main/java/org/toop/app/view/views/MainView.java @@ -37,7 +37,6 @@ public final class MainView extends View { final SongDisplay songdisplay = new SongDisplay(); - add(Pos.BOTTOM_RIGHT, fit(vboxFill( songdisplay diff --git a/app/src/main/java/org/toop/app/view/views/OnlineView.java b/app/src/main/java/org/toop/app/view/views/OnlineView.java index 2c5b783..3d7750d 100644 --- a/app/src/main/java/org/toop/app/view/views/OnlineView.java +++ b/app/src/main/java/org/toop/app/view/views/OnlineView.java @@ -3,6 +3,7 @@ package org.toop.app.view.views; import org.toop.app.Server; import org.toop.app.view.View; import org.toop.app.view.ViewStack; +import org.toop.app.view.displays.SongDisplay; import org.toop.local.AppContext; import javafx.geometry.Pos; @@ -44,6 +45,13 @@ public class OnlineView extends View { new Server(serverIPInput.getText(), serverPortInput.getText(), playerNameInput.getText()); }); + final SongDisplay songdisplay = new SongDisplay(); + + add(Pos.BOTTOM_RIGHT, + fit(vboxFill( + songdisplay + ))); + add(Pos.CENTER, fit(vboxFill( serverInformationHeader, diff --git a/app/src/main/java/org/toop/app/view/views/OptionsView.java b/app/src/main/java/org/toop/app/view/views/OptionsView.java index 3b8eaaa..d4af353 100644 --- a/app/src/main/java/org/toop/app/view/views/OptionsView.java +++ b/app/src/main/java/org/toop/app/view/views/OptionsView.java @@ -3,6 +3,7 @@ package org.toop.app.view.views; import org.toop.app.App; import org.toop.app.view.View; import org.toop.app.view.ViewStack; +import org.toop.app.view.displays.SongDisplay; import org.toop.framework.audio.VolumeControl; import org.toop.framework.audio.events.AudioEvents; import org.toop.framework.eventbus.EventFlow; @@ -99,6 +100,14 @@ public final class OptionsView extends View { backButton.setText(AppContext.getString("back")); backButton.setOnAction(_ -> { ViewStack.pop(); }); + final SongDisplay songdisplay = new SongDisplay(); + + + add(Pos.BOTTOM_RIGHT, + fit(vboxFill( + songdisplay + ))); + add(Pos.BOTTOM_LEFT, vboxFill( backButton diff --git a/app/src/main/java/org/toop/app/view/views/ServerView.java b/app/src/main/java/org/toop/app/view/views/ServerView.java index 36614eb..c819c14 100644 --- a/app/src/main/java/org/toop/app/view/views/ServerView.java +++ b/app/src/main/java/org/toop/app/view/views/ServerView.java @@ -2,6 +2,7 @@ package org.toop.app.view.views; import org.toop.app.view.View; import org.toop.app.view.ViewStack; +import org.toop.app.view.displays.SongDisplay; import org.toop.local.AppContext; import javafx.application.Platform; @@ -53,6 +54,14 @@ public final class ServerView extends View { listView = new ListView