From 30f797022c0cb7757ea540ce307461df57d77952 Mon Sep 17 00:00:00 2001 From: michiel Date: Thu, 16 Oct 2025 13:35:41 +0200 Subject: [PATCH] Skip Button --- .../toop/app/view/displays/SongDisplay.java | 16 ++++++---- ...getlucky.mp3 => Daft Punk - Get Lucky.mp3} | Bin ...enu.mp3 => MW Main Menu - some artist.mp3} | Bin ...litzkrieg.mp3 => Ramonas - Blitzkrieg.mp3} | Bin ...The Jungle Dragon - Terraria Calamity.mp3} | Bin app/src/main/resources/assets/style/dark.css | 29 +++++++++++++---- .../resources/assets/style/high-contrast.css | 29 +++++++++++++---- app/src/main/resources/assets/style/light.css | 30 ++++++++++++++---- .../framework/audio/AudioEventListener.java | 5 +++ .../toop/framework/audio/MusicManager.java | 14 ++++++-- .../framework/audio/events/AudioEvents.java | 3 ++ .../audio/interfaces/MusicManager.java | 1 + 12 files changed, 97 insertions(+), 30 deletions(-) rename app/src/main/resources/assets/audio/music/{getlucky.mp3 => Daft Punk - Get Lucky.mp3} (100%) rename app/src/main/resources/assets/audio/music/{mw2-main-menu.mp3 => MW Main Menu - some artist.mp3} (100%) rename app/src/main/resources/assets/audio/music/{blitzkrieg.mp3 => Ramonas - Blitzkrieg.mp3} (100%) rename app/src/main/resources/assets/audio/music/{roarofthejungledragon.mp3 => Roar Of The Jungle Dragon - Terraria Calamity.mp3} (100%) 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 d1bb14d..cd2f33c 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 @@ -1,13 +1,16 @@ package org.toop.app.view.displays; import javafx.application.Platform; +import javafx.scene.control.Button; import javafx.scene.control.ProgressBar; import javafx.scene.layout.VBox; import javafx.scene.paint.Color; +import org.toop.framework.audio.AudioEventListener; import org.toop.framework.audio.events.AudioEvents; import org.toop.framework.eventbus.EventFlow; import javafx.geometry.Pos; import javafx.scene.text.Text; +import org.toop.framework.eventbus.GlobalEventBus; public class SongDisplay extends VBox { @@ -19,27 +22,26 @@ public class SongDisplay extends VBox { 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("0:00/0:00"); - progressText.setFill(Color.WHITE); progressText.getStyleClass().add("progress-text"); - //TODO ADD SKIP BUTTON + Button skipButton = new Button(">>"); + skipButton.getStyleClass().setAll("skip-button"); + skipButton.setOnAction( event -> { + GlobalEventBus.post(new AudioEvents.SkipMusic()); + }); - getChildren().addAll(songTitle, progressBar, progressText); + getChildren().addAll(songTitle, progressBar, progressText, skipButton); } private void updateTheSong(AudioEvents.PlayingMusic event) { diff --git a/app/src/main/resources/assets/audio/music/getlucky.mp3 b/app/src/main/resources/assets/audio/music/Daft Punk - Get Lucky.mp3 similarity index 100% rename from app/src/main/resources/assets/audio/music/getlucky.mp3 rename to app/src/main/resources/assets/audio/music/Daft Punk - Get Lucky.mp3 diff --git a/app/src/main/resources/assets/audio/music/mw2-main-menu.mp3 b/app/src/main/resources/assets/audio/music/MW Main Menu - some artist.mp3 similarity index 100% rename from app/src/main/resources/assets/audio/music/mw2-main-menu.mp3 rename to app/src/main/resources/assets/audio/music/MW Main Menu - some artist.mp3 diff --git a/app/src/main/resources/assets/audio/music/blitzkrieg.mp3 b/app/src/main/resources/assets/audio/music/Ramonas - Blitzkrieg.mp3 similarity index 100% rename from app/src/main/resources/assets/audio/music/blitzkrieg.mp3 rename to app/src/main/resources/assets/audio/music/Ramonas - Blitzkrieg.mp3 diff --git a/app/src/main/resources/assets/audio/music/roarofthejungledragon.mp3 b/app/src/main/resources/assets/audio/music/Roar Of The Jungle Dragon - Terraria Calamity.mp3 similarity index 100% rename from app/src/main/resources/assets/audio/music/roarofthejungledragon.mp3 rename to app/src/main/resources/assets/audio/music/Roar Of The Jungle Dragon - Terraria Calamity.mp3 diff --git a/app/src/main/resources/assets/style/dark.css b/app/src/main/resources/assets/style/dark.css index 8987d1e..3d3cc77 100644 --- a/app/src/main/resources/assets/style/dark.css +++ b/app/src/main/resources/assets/style/dark.css @@ -13,31 +13,46 @@ } .song-display { - -fx-background-color: rgba(30, 60, 30, 0.85); - -fx-background-radius: 10px; -fx-padding: 8 12 8 12; -fx-spacing: 6px; -fx-alignment: center; -fx-effect: dropshadow(gaussian, rgba(0, 0, 0, 0.5), 6, 0.5, 0, 2); -fx-min-width: 220px; -fx-max-width: 260px; - -fx-text-fill: white; } .song-title { -fx-font-size: 14px; - -fx-font-weight: bold; - -fx-text-fill: white; + -fx-fill: white; } .progress-bar { - -fx-pref-width: 150px; + -fx-pref-width: 200px; -fx-accent: red; } +.progress-bar > .track { + -fx-background-radius: 30; +} + +.progress-bar > .bar { + -fx-background-radius: 30px; +} + .progress-text { -fx-font-size: 11px; - -fx-text-fill: white; + -fx-fill: white; +} + +.skip-button { + -fx-background-color: transparent; + -fx-background-radius: 0; + -fx-cursor: hand; + -fx-text-fill: white; + } + +.skip-button .text { + -fx-fill: white; } .button { diff --git a/app/src/main/resources/assets/style/high-contrast.css b/app/src/main/resources/assets/style/high-contrast.css index b2598ab..ef448ce 100644 --- a/app/src/main/resources/assets/style/high-contrast.css +++ b/app/src/main/resources/assets/style/high-contrast.css @@ -13,31 +13,46 @@ } .song-display { - -fx-background-color: rgba(30, 60, 30, 0.85); - -fx-background-radius: 10px; -fx-padding: 8 12 8 12; -fx-spacing: 6px; -fx-alignment: center; -fx-effect: dropshadow(gaussian, rgba(0, 0, 0, 0.5), 6, 0.5, 0, 2); -fx-min-width: 220px; -fx-max-width: 260px; - -fx-text-fill: white; } .song-title { -fx-font-size: 14px; - -fx-font-weight: bold; - -fx-text-fill: white; + -fx-fill: white; } .progress-bar { - -fx-pref-width: 150px; + -fx-pref-width: 200px; -fx-accent: red; } +.progress-bar > .track { + -fx-background-radius: 30; +} + +.progress-bar > .bar { + -fx-background-radius: 30px; +} + .progress-text { -fx-font-size: 11px; - -fx-text-fill: white; + -fx-fill: white; +} + +.skip-button { + -fx-background-color: transparent; + -fx-background-radius: 0; + -fx-cursor: hand; + -fx-text-fill: white; + } + +.skip-button .text { + -fx-fill: white; } .button { diff --git a/app/src/main/resources/assets/style/light.css b/app/src/main/resources/assets/style/light.css index 2a9f56f..0b5e1d7 100644 --- a/app/src/main/resources/assets/style/light.css +++ b/app/src/main/resources/assets/style/light.css @@ -13,31 +13,47 @@ } .song-display { - -fx-background-color: rgba(30, 60, 30, 0.85); - -fx-background-radius: 10px; -fx-padding: 8 12 8 12; -fx-spacing: 6px; -fx-alignment: center; -fx-effect: dropshadow(gaussian, rgba(0, 0, 0, 0.5), 6, 0.5, 0, 2); -fx-min-width: 220px; -fx-max-width: 260px; - -fx-text-fill: white; } .song-title { -fx-font-size: 14px; - -fx-font-weight: bold; - -fx-text-fill: white; + -fx-fill: black; } .progress-bar { - -fx-pref-width: 150px; + -fx-inner-background-color: black; + -fx-pref-width: 200px; -fx-accent: red; } +.progress-bar > .track { + -fx-background-radius: 30; +} + +.progress-bar > .bar { + -fx-background-radius: 30px; +} + .progress-text { -fx-font-size: 11px; - -fx-text-fill: white; + -fx-fill: black; +} + +.skip-button { + -fx-background-color: transparent; + -fx-background-radius: 0; + -fx-cursor: hand; + -fx-text-fill: black; + } + +.skip-button .text { + -fx-fill: black; } .button { diff --git a/framework/src/main/java/org/toop/framework/audio/AudioEventListener.java b/framework/src/main/java/org/toop/framework/audio/AudioEventListener.java index 6245249..6af1610 100644 --- a/framework/src/main/java/org/toop/framework/audio/AudioEventListener.java +++ b/framework/src/main/java/org/toop/framework/audio/AudioEventListener.java @@ -26,6 +26,7 @@ public class AudioEventListener implements org.toop.framework private final List resources; private int playingIndex = 0; private boolean playing = false; + private ScheduledExecutorService scheduler; + public MusicManager(List resources) { this.dispatcher = new JavaFXDispatcher(); @@ -69,6 +71,15 @@ public class MusicManager implements org.toop.framework playCurrentTrack(); } + public void skip() { + if (backgroundMusic.isEmpty()) return; + stop(); + scheduler.shutdownNow(); + playingIndex = playingIndex + 1; + playing = true; + playCurrentTrack(); + } + // Used in testing void play(int index) { if (playing) { @@ -104,8 +115,7 @@ public class MusicManager implements org.toop.framework private void setTrackRunnable(T track) { - - ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); + scheduler = Executors.newSingleThreadScheduledExecutor(); Runnable currentMusicTask = new Runnable() { @Override diff --git a/framework/src/main/java/org/toop/framework/audio/events/AudioEvents.java b/framework/src/main/java/org/toop/framework/audio/events/AudioEvents.java index 9111425..8ec0fcf 100644 --- a/framework/src/main/java/org/toop/framework/audio/events/AudioEvents.java +++ b/framework/src/main/java/org/toop/framework/audio/events/AudioEvents.java @@ -21,6 +21,9 @@ public class AudioEvents extends EventsBase { /** Gives back the name of the song, the position its currently at (in seconds) and how long it takes (in seconds) */ public record PlayingMusic(String name, long currentPosition, long duration) implements GenericEvent {} + /** Skips the song to the last second of the song resulting in a skip effect */ + public record SkipMusic() implements GenericEvent {} + /** Change volume, choose type with {@link VolumeControl}. */ public record ChangeVolume(double newVolume, VolumeControl controlType) implements GenericEvent {} diff --git a/framework/src/main/java/org/toop/framework/audio/interfaces/MusicManager.java b/framework/src/main/java/org/toop/framework/audio/interfaces/MusicManager.java index 21c495b..0e197f8 100644 --- a/framework/src/main/java/org/toop/framework/audio/interfaces/MusicManager.java +++ b/framework/src/main/java/org/toop/framework/audio/interfaces/MusicManager.java @@ -5,4 +5,5 @@ import org.toop.framework.resource.types.AudioResource; public interface MusicManager extends AudioManager { void play(); void stop(); + void skip(); }