summaryrefslogtreecommitdiff
path: root/game/src/music.rs
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2025-11-24 14:30:30 -0500
committerFreya Murphy <freya@freyacat.org>2025-11-24 14:30:30 -0500
commit4601aa8a74f3f99e8cbac0ccade955bb242db910 (patch)
tree10cb11ceeb4467133bed03d157b2074d744d5486 /game/src/music.rs
parentaudio: disable music debug (diff)
downloadDungeonCrawl-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.rs74
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),
+ })
+ }
+}