diff --git a/app/src/main/java/org/vibecoders/moongazer/Game.java b/app/src/main/java/org/vibecoders/moongazer/Game.java index be67d15..1ef576c 100644 --- a/app/src/main/java/org/vibecoders/moongazer/Game.java +++ b/app/src/main/java/org/vibecoders/moongazer/Game.java @@ -12,6 +12,7 @@ import java.util.ArrayList; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.vibecoders.moongazer.managers.Assets; +import org.vibecoders.moongazer.managers.Audio; import org.vibecoders.moongazer.scenes.*; public class Game extends ApplicationAdapter { @@ -96,10 +97,13 @@ public class Game extends ApplicationAdapter { public void dispose() { // Save settings Settings.saveSettings(); - // Dispose resources + // Dispose scenes introScene.dispose(); mainMenuScene.dispose(); + // Dispose resources + Audio.dispose(); Assets.dispose(); + // Dispose batch and stage batch.dispose(); stage.dispose(); log.debug("Resources disposed"); diff --git a/app/src/main/java/org/vibecoders/moongazer/managers/Assets.java b/app/src/main/java/org/vibecoders/moongazer/managers/Assets.java index 24dd74e..8e66d90 100644 --- a/app/src/main/java/org/vibecoders/moongazer/managers/Assets.java +++ b/app/src/main/java/org/vibecoders/moongazer/managers/Assets.java @@ -129,6 +129,7 @@ public class Assets { // "Load" unsupported file types as FileHandle loadingThread = new Thread(() -> { loadAny("videos/main_menu_background.webm"); + loadAny("audio/I Once Praised the Day.mp3"); }); loadingThread.start(); } diff --git a/app/src/main/java/org/vibecoders/moongazer/managers/Audio.java b/app/src/main/java/org/vibecoders/moongazer/managers/Audio.java new file mode 100644 index 0000000..76c70de --- /dev/null +++ b/app/src/main/java/org/vibecoders/moongazer/managers/Audio.java @@ -0,0 +1,53 @@ +package org.vibecoders.moongazer.managers; + +import org.slf4j.Logger; +import org.vibecoders.moongazer.Settings; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.audio.Music; +import com.badlogic.gdx.files.FileHandle; + +public class Audio { + private static final Logger log = org.slf4j.LoggerFactory.getLogger(Audio.class); + private static boolean initialized = false; + private static Music menuMusic = null; + + public static void init() { + if (initialized) { + return; + } + initialized = true; + menuMusic = Gdx.audio.newMusic(Assets.getAsset("audio/I Once Praised the Day.mp3", FileHandle.class)); + log.info("Audio manager initialized"); + } + + public static void menuMusicSetVolume() { + menuMusic.setVolume(Settings.getMusicVolume() * Settings.getMasterVolume()); + } + + public static void musicSetVolume() { + menuMusicSetVolume(); + } + + public static void menuMusicPlay() { + if (!menuMusic.isPlaying()) { + menuMusic.setLooping(true); + menuMusic.play(); + } + } + + public static void menuMusicStop() { + if (menuMusic.isPlaying()) { + menuMusic.stop(); + } + } + + public static void dispose() { + if (menuMusic != null) { + menuMusic.dispose(); + menuMusic = null; + } + initialized = false; + log.info("Audio manager disposed"); + } +} diff --git a/app/src/main/java/org/vibecoders/moongazer/scenes/Intro.java b/app/src/main/java/org/vibecoders/moongazer/scenes/Intro.java index 5964bf1..1f723e7 100644 --- a/app/src/main/java/org/vibecoders/moongazer/scenes/Intro.java +++ b/app/src/main/java/org/vibecoders/moongazer/scenes/Intro.java @@ -5,6 +5,7 @@ import static org.vibecoders.moongazer.Constants.*; import org.vibecoders.moongazer.Game; import org.vibecoders.moongazer.State; import org.vibecoders.moongazer.managers.Assets; +import org.vibecoders.moongazer.managers.Audio; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.Color; @@ -29,6 +30,8 @@ public class Intro extends Scene { logo = Assets.getAsset("icons/logo.png", Texture.class); log.info("Starting to load all remaining assets..."); Assets.loadAll(); + Audio.init(); + Audio.musicSetVolume(); // Create scenes game.mainMenuScene = new MainMenu(game); game.settingsScene = new SettingsScene(game); @@ -38,6 +41,7 @@ public class Intro extends Scene { /** * Renders the intro scene. + * * @param batch The SpriteBatch to draw with. */ @Override @@ -54,7 +58,8 @@ public class Intro extends Scene { return; } ScreenUtils.clear(Color.BLACK); - // log.debug("Rendering logo at position: ({}, {})", WINDOW_WIDTH / 2 - logo.getWidth() / 4, WINDOW_HEIGHT / 2 - logo.getHeight() / 4); + // log.debug("Rendering logo at position: ({}, {})", WINDOW_WIDTH / 2 - + // logo.getWidth() / 4, WINDOW_HEIGHT / 2 - logo.getHeight() / 4); var currentOpacity = totalTime; if (currentOpacity > 1) { if (!end) { diff --git a/app/src/main/java/org/vibecoders/moongazer/scenes/MainMenu.java b/app/src/main/java/org/vibecoders/moongazer/scenes/MainMenu.java index 6c83b02..6743f9c 100644 --- a/app/src/main/java/org/vibecoders/moongazer/scenes/MainMenu.java +++ b/app/src/main/java/org/vibecoders/moongazer/scenes/MainMenu.java @@ -9,6 +9,7 @@ import java.util.Map; import org.vibecoders.moongazer.Game; import org.vibecoders.moongazer.State; import org.vibecoders.moongazer.managers.Assets; +import org.vibecoders.moongazer.managers.Audio; import org.vibecoders.moongazer.ui.UITextButton; import com.badlogic.gdx.Gdx; @@ -163,6 +164,7 @@ public class MainMenu extends Scene { return; videoPlayer.setLooping(true); videoPlayer.play(); + Audio.menuMusicPlay(); videoPrepared = true; } diff --git a/app/src/main/java/org/vibecoders/moongazer/scenes/SettingsScene.java b/app/src/main/java/org/vibecoders/moongazer/scenes/SettingsScene.java index b611137..a77d37a 100644 --- a/app/src/main/java/org/vibecoders/moongazer/scenes/SettingsScene.java +++ b/app/src/main/java/org/vibecoders/moongazer/scenes/SettingsScene.java @@ -16,6 +16,7 @@ import org.vibecoders.moongazer.Game; import org.vibecoders.moongazer.State; import org.vibecoders.moongazer.Settings; import org.vibecoders.moongazer.managers.Assets; +import org.vibecoders.moongazer.managers.Audio; import org.vibecoders.moongazer.ui.UICloseButton; import org.vibecoders.moongazer.ui.UITextButton; import org.vibecoders.moongazer.ui.UISlider; @@ -64,12 +65,14 @@ public class SettingsScene extends Scene { masterVolSlider = new UISlider(); masterVolSlider.onChanged(() -> { Settings.setMasterVolume(masterVolSlider.getValue()); + Audio.musicSetVolume(); }); row.add(masterVolSlider.slider).width(300).right().padRight(40); } else if (volume.equals("Music Volume")) { musicSlider = new UISlider(); musicSlider.onChanged(() -> { Settings.setMusicVolume(musicSlider.getValue()); + Audio.musicSetVolume(); }); row.add(musicSlider.slider).width(300).right().padRight(40); } else if (volume.equals("SFX Volume")) { diff --git a/app/src/main/resources/audio/I Once Praised The Day.mp3 b/app/src/main/resources/audio/I Once Praised The Day.mp3 new file mode 100644 index 0000000..5ecab06 Binary files /dev/null and b/app/src/main/resources/audio/I Once Praised The Day.mp3 differ