feat(audio): implement audio & main menu music
This commit is contained in:
@ -12,6 +12,7 @@ import java.util.ArrayList;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.vibecoders.moongazer.managers.Assets;
|
import org.vibecoders.moongazer.managers.Assets;
|
||||||
|
import org.vibecoders.moongazer.managers.Audio;
|
||||||
import org.vibecoders.moongazer.scenes.*;
|
import org.vibecoders.moongazer.scenes.*;
|
||||||
|
|
||||||
public class Game extends ApplicationAdapter {
|
public class Game extends ApplicationAdapter {
|
||||||
@ -96,10 +97,13 @@ public class Game extends ApplicationAdapter {
|
|||||||
public void dispose() {
|
public void dispose() {
|
||||||
// Save settings
|
// Save settings
|
||||||
Settings.saveSettings();
|
Settings.saveSettings();
|
||||||
// Dispose resources
|
// Dispose scenes
|
||||||
introScene.dispose();
|
introScene.dispose();
|
||||||
mainMenuScene.dispose();
|
mainMenuScene.dispose();
|
||||||
|
// Dispose resources
|
||||||
|
Audio.dispose();
|
||||||
Assets.dispose();
|
Assets.dispose();
|
||||||
|
// Dispose batch and stage
|
||||||
batch.dispose();
|
batch.dispose();
|
||||||
stage.dispose();
|
stage.dispose();
|
||||||
log.debug("Resources disposed");
|
log.debug("Resources disposed");
|
||||||
|
|||||||
@ -129,6 +129,7 @@ public class Assets {
|
|||||||
// "Load" unsupported file types as FileHandle
|
// "Load" unsupported file types as FileHandle
|
||||||
loadingThread = new Thread(() -> {
|
loadingThread = new Thread(() -> {
|
||||||
loadAny("videos/main_menu_background.webm");
|
loadAny("videos/main_menu_background.webm");
|
||||||
|
loadAny("audio/I Once Praised the Day.mp3");
|
||||||
});
|
});
|
||||||
loadingThread.start();
|
loadingThread.start();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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");
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -5,6 +5,7 @@ import static org.vibecoders.moongazer.Constants.*;
|
|||||||
import org.vibecoders.moongazer.Game;
|
import org.vibecoders.moongazer.Game;
|
||||||
import org.vibecoders.moongazer.State;
|
import org.vibecoders.moongazer.State;
|
||||||
import org.vibecoders.moongazer.managers.Assets;
|
import org.vibecoders.moongazer.managers.Assets;
|
||||||
|
import org.vibecoders.moongazer.managers.Audio;
|
||||||
|
|
||||||
import com.badlogic.gdx.Gdx;
|
import com.badlogic.gdx.Gdx;
|
||||||
import com.badlogic.gdx.graphics.Color;
|
import com.badlogic.gdx.graphics.Color;
|
||||||
@ -29,6 +30,8 @@ public class Intro extends Scene {
|
|||||||
logo = Assets.getAsset("icons/logo.png", Texture.class);
|
logo = Assets.getAsset("icons/logo.png", Texture.class);
|
||||||
log.info("Starting to load all remaining assets...");
|
log.info("Starting to load all remaining assets...");
|
||||||
Assets.loadAll();
|
Assets.loadAll();
|
||||||
|
Audio.init();
|
||||||
|
Audio.musicSetVolume();
|
||||||
// Create scenes
|
// Create scenes
|
||||||
game.mainMenuScene = new MainMenu(game);
|
game.mainMenuScene = new MainMenu(game);
|
||||||
game.settingsScene = new SettingsScene(game);
|
game.settingsScene = new SettingsScene(game);
|
||||||
@ -38,6 +41,7 @@ public class Intro extends Scene {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Renders the intro scene.
|
* Renders the intro scene.
|
||||||
|
*
|
||||||
* @param batch The SpriteBatch to draw with.
|
* @param batch The SpriteBatch to draw with.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@ -54,7 +58,8 @@ public class Intro extends Scene {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ScreenUtils.clear(Color.BLACK);
|
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;
|
var currentOpacity = totalTime;
|
||||||
if (currentOpacity > 1) {
|
if (currentOpacity > 1) {
|
||||||
if (!end) {
|
if (!end) {
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import java.util.Map;
|
|||||||
import org.vibecoders.moongazer.Game;
|
import org.vibecoders.moongazer.Game;
|
||||||
import org.vibecoders.moongazer.State;
|
import org.vibecoders.moongazer.State;
|
||||||
import org.vibecoders.moongazer.managers.Assets;
|
import org.vibecoders.moongazer.managers.Assets;
|
||||||
|
import org.vibecoders.moongazer.managers.Audio;
|
||||||
import org.vibecoders.moongazer.ui.UITextButton;
|
import org.vibecoders.moongazer.ui.UITextButton;
|
||||||
|
|
||||||
import com.badlogic.gdx.Gdx;
|
import com.badlogic.gdx.Gdx;
|
||||||
@ -163,6 +164,7 @@ public class MainMenu extends Scene {
|
|||||||
return;
|
return;
|
||||||
videoPlayer.setLooping(true);
|
videoPlayer.setLooping(true);
|
||||||
videoPlayer.play();
|
videoPlayer.play();
|
||||||
|
Audio.menuMusicPlay();
|
||||||
videoPrepared = true;
|
videoPrepared = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -16,6 +16,7 @@ import org.vibecoders.moongazer.Game;
|
|||||||
import org.vibecoders.moongazer.State;
|
import org.vibecoders.moongazer.State;
|
||||||
import org.vibecoders.moongazer.Settings;
|
import org.vibecoders.moongazer.Settings;
|
||||||
import org.vibecoders.moongazer.managers.Assets;
|
import org.vibecoders.moongazer.managers.Assets;
|
||||||
|
import org.vibecoders.moongazer.managers.Audio;
|
||||||
import org.vibecoders.moongazer.ui.UICloseButton;
|
import org.vibecoders.moongazer.ui.UICloseButton;
|
||||||
import org.vibecoders.moongazer.ui.UITextButton;
|
import org.vibecoders.moongazer.ui.UITextButton;
|
||||||
import org.vibecoders.moongazer.ui.UISlider;
|
import org.vibecoders.moongazer.ui.UISlider;
|
||||||
@ -64,12 +65,14 @@ public class SettingsScene extends Scene {
|
|||||||
masterVolSlider = new UISlider();
|
masterVolSlider = new UISlider();
|
||||||
masterVolSlider.onChanged(() -> {
|
masterVolSlider.onChanged(() -> {
|
||||||
Settings.setMasterVolume(masterVolSlider.getValue());
|
Settings.setMasterVolume(masterVolSlider.getValue());
|
||||||
|
Audio.musicSetVolume();
|
||||||
});
|
});
|
||||||
row.add(masterVolSlider.slider).width(300).right().padRight(40);
|
row.add(masterVolSlider.slider).width(300).right().padRight(40);
|
||||||
} else if (volume.equals("Music Volume")) {
|
} else if (volume.equals("Music Volume")) {
|
||||||
musicSlider = new UISlider();
|
musicSlider = new UISlider();
|
||||||
musicSlider.onChanged(() -> {
|
musicSlider.onChanged(() -> {
|
||||||
Settings.setMusicVolume(musicSlider.getValue());
|
Settings.setMusicVolume(musicSlider.getValue());
|
||||||
|
Audio.musicSetVolume();
|
||||||
});
|
});
|
||||||
row.add(musicSlider.slider).width(300).right().padRight(40);
|
row.add(musicSlider.slider).width(300).right().padRight(40);
|
||||||
} else if (volume.equals("SFX Volume")) {
|
} else if (volume.equals("SFX Volume")) {
|
||||||
|
|||||||
BIN
app/src/main/resources/audio/I Once Praised The Day.mp3
Normal file
BIN
app/src/main/resources/audio/I Once Praised The Day.mp3
Normal file
Binary file not shown.
Reference in New Issue
Block a user