diff options
| author | Freya Murphy <freya@freyacat.org> | 2025-11-24 14:30:30 -0500 |
|---|---|---|
| committer | Freya Murphy <freya@freyacat.org> | 2025-11-24 14:30:30 -0500 |
| commit | 4601aa8a74f3f99e8cbac0ccade955bb242db910 (patch) | |
| tree | 10cb11ceeb4467133bed03d157b2074d744d5486 /game/src/music.rs | |
| parent | audio: disable music debug (diff) | |
| download | DungeonCrawl-4601aa8a74f3f99e8cbac0ccade955bb242db910.tar.gz DungeonCrawl-4601aa8a74f3f99e8cbac0ccade955bb242db910.tar.bz2 DungeonCrawl-4601aa8a74f3f99e8cbac0ccade955bb242db910.zip | |
audio: move data out of crate
Diffstat (limited to '')
| -rw-r--r-- | game/src/music.rs | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/game/src/music.rs b/game/src/music.rs new file mode 100644 index 0000000..366e79d --- /dev/null +++ b/game/src/music.rs @@ -0,0 +1,74 @@ +use audio::program::Track; +use std::{fs, rc::Rc}; + +macro_rules! load_asm { + ($path:tt) => {{ + let res = if cfg!(any(feature = "static", target_arch = "wasm32")) { + let src = include_str!(concat!("../../", $path)); + Track::parse(src) + } else { + let src = fs::read_to_string($path)?; + Track::parse(&src) + }; + res.map_err(|mut err| { + err.file = Some(String::from($path)); + err + })? + }}; + ($first:tt, $($arg:tt),*) => { + load_asm!($first)$(.merge(&load_asm!($arg)))* + }; +} + +pub struct Sound { + pub track: Rc<Track>, + pub looping: bool, + pub priority: u32, +} +impl Sound { + fn new(track: Track, looping: bool, priority: u32) -> Self { + Self { + track: Rc::new(track), + looping, + priority, + } + } +} + +pub struct Music { + pub attack: Sound, + pub discover: Sound, + pub background: Sound, + pub game_over: Sound, + pub speak: Sound, + pub use_potion: Sound, + pub use_bomb: Sound, + pub drop_item: Sound, + pub pickup_item: Sound, +} +impl Music { + pub fn load() -> crate::Result<Self> { + // TODO: create REAL audio files + let attack = load_asm!("assets/asm/placeholder.asm"); + let discover = load_asm!("assets/asm/placeholder.asm"); + let background = load_asm!("assets/asm/placeholder.asm"); + let game_over = load_asm!("assets/asm/placeholder.asm"); + let speak = load_asm!("assets/asm/placeholder.asm"); + let use_potion = load_asm!("assets/asm/placeholder.asm"); + let use_bomb = load_asm!("assets/asm/placeholder.asm"); + let drop_item = load_asm!("assets/asm/placeholder.asm"); + let pickup_item = load_asm!("assets/asm/placeholder.asm"); + + Ok(Self { + attack: Sound::new(attack, false, 2), + discover: Sound::new(discover, false, 3), + background: Sound::new(background, true, 1), + game_over: Sound::new(game_over, true, 1), + speak: Sound::new(speak, false, 2), + use_potion: Sound::new(use_potion, false, 2), + use_bomb: Sound::new(use_bomb, false, 2), + drop_item: Sound::new(drop_item, false, 2), + pickup_item: Sound::new(pickup_item, false, 2), + }) + } +} |