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.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");
|
||||
|
||||
@ -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();
|
||||
}
|
||||
|
||||
@ -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.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) {
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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")) {
|
||||
|
||||
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