diff options
Diffstat (limited to 'graphics/src/audio/data.rs')
| -rw-r--r-- | graphics/src/audio/data.rs | 82 |
1 files changed, 23 insertions, 59 deletions
diff --git a/graphics/src/audio/data.rs b/graphics/src/audio/data.rs index 8ed95bb..9c68523 100644 --- a/graphics/src/audio/data.rs +++ b/graphics/src/audio/data.rs @@ -1,66 +1,30 @@ -use crate::audio::{parse, program::Program}; +use crate::audio::program::Program; +use std::fs; -const MELODY: &str = r#" -; setup -a v100 d50 -P4 - -%define notes -a p$1 v100 - a v0 - -a p$1 v100 - a v0 - -a pd4 v100 -- a v0 -- -a pa4 v100 -- a v0 -- -- -a pg3# v100 - a v0 - -- -a pg3 v100 - a v0 - -- -a pf3 v100 --- a v0 - -a pd3 v100 - a v0 - -a pf3 v100 - a v0 - -a pg3 v100 - a v0 - -%end - -notes d3 -notes c3 -notes b3 -notes b3b - -notes d3 -notes c3 -notes b3 -notes b3b -"#; - -const BASE: &str = r#" --128 - -; setup -b v100 d50 - -%define notes -b p$1 v100 -- b v0 -- -b p$1 v100 -- b v0 -- -b p$1 v100 - b v0 - -b p$1 v100 - b v0 - -- -b p$2 v100 - b v0 - -- -b p$2 v100 - b v0 - -- -b p$2 v100 - b v0 - -b p$2 v100 - b v0 - -b p$2 v100 -- b v0 -- -%end - -notes d2 d2 -notes c2 c2 -notes b2 b2 -notes b2 c2 -"#; +macro_rules! load_asm { + ($path:tt) => {{ + if cfg!(any(feature = "static", target_arch = "wasm32")) { + let src = include_str!(concat!("../../../", $path)); + Program::parse(src, true)? + } else { + let src = fs::read_to_string($path)?; + Program::parse(&src, true)? + } + }}; + ($first:tt, $($arg:tt)*) => { + load_asm!($first)$(.merge(load_asm!($arg)))* + }; +} pub struct Data { - pub test: Program, + pub megalovania: Program, } impl Data { - pub fn load() -> parse::Result<Self> { - let melody = Program::parse(MELODY, true)?; - let base = Program::parse(BASE, true)?; - let test = melody.merge(base); - Ok(Self { test }) + pub fn load() -> crate::Result<Self> { + let megalovania = load_asm!( + "assets/asm/megalovania_melody.asm", + "assets/asm/megalovania_base.asm" + ); + Ok(Self { megalovania }) } } |