1
0
Fork 0
mirror of https://github.com/doukutsu-rs/doukutsu-rs synced 2025-12-01 08:37:23 +00:00

BGM lookup paths instead of one hardcoded

This commit is contained in:
Alula 2020-09-05 05:31:55 +02:00
parent 3f7174df66
commit ab7902dac1
No known key found for this signature in database
GPG key ID: 3E00485503A1D8BA
2 changed files with 15 additions and 2 deletions

View file

@ -117,6 +117,7 @@ pub struct EngineConstants {
pub font_path: String, pub font_path: String,
pub font_scale: f32, pub font_scale: f32,
pub font_space_offset: f32, pub font_space_offset: f32,
pub organya_paths: Vec<String>,
} }
impl Clone for EngineConstants { impl Clone for EngineConstants {
@ -133,6 +134,7 @@ impl Clone for EngineConstants {
font_path: self.font_path.clone(), font_path: self.font_path.clone(),
font_scale: self.font_scale, font_scale: self.font_scale,
font_space_offset: self.font_space_offset, font_space_offset: self.font_space_offset,
organya_paths: self.organya_paths.clone(),
} }
} }
} }
@ -468,6 +470,11 @@ impl EngineConstants {
font_path: str!("builtin/builtin_font.fnt"), font_path: str!("builtin/builtin_font.fnt"),
font_scale: 1.0, font_scale: 1.0,
font_space_offset: -3.0, font_space_offset: -3.0,
organya_paths: vec![
str!("/org/"), // NXEngine
str!("/base/Org/"), // CS+
str!("/Resource/ORG/"), // CSE2E
],
} }
} }

View file

@ -6,7 +6,7 @@ use cpal::traits::{DeviceTrait, HostTrait, StreamTrait};
use crate::engine_constants::EngineConstants; use crate::engine_constants::EngineConstants;
use crate::ggez::{Context, filesystem, GameResult}; use crate::ggez::{Context, filesystem, GameResult};
use crate::ggez::GameError::{AudioError, InvalidValue}; use crate::ggez::GameError::{AudioError, InvalidValue, ResourceLoadError};
use crate::sound::organya::Song; use crate::sound::organya::Song;
use crate::sound::playback::{PlaybackEngine, SavedPlaybackState}; use crate::sound::playback::{PlaybackEngine, SavedPlaybackState};
use crate::sound::wave_bank::SoundBank; use crate::sound::wave_bank::SoundBank;
@ -112,7 +112,13 @@ impl SoundManager {
self.tx.send(PlaybackMessage::SaveState)?; self.tx.send(PlaybackMessage::SaveState)?;
self.tx.send(PlaybackMessage::Stop)?; self.tx.send(PlaybackMessage::Stop)?;
} else if let Some(song_name) = SONGS.get(song_id) { } else if let Some(song_name) = SONGS.get(song_id) {
let org = organya::Song::load_from(filesystem::open(ctx, ["/base/Org/", &song_name.to_lowercase(), ".org"].join(""))?)?; let path = constants.organya_paths
.iter()
.map(|prefix| [prefix, &song_name.to_lowercase(), ".org"].join(""))
.find(|path| filesystem::exists(ctx, path))
.ok_or_else(|| ResourceLoadError(format!("BGM {:?} does not exist.", song_name)))?;
let org = organya::Song::load_from(filesystem::open(ctx, path)?)?;
log::info!("Playing BGM: {}", song_name); log::info!("Playing BGM: {}", song_name);
self.prev_song_id = self.current_song_id; self.prev_song_id = self.current_song_id;