mirror of
https://github.com/italicsjenga/agb.git
synced 2024-12-24 00:31:34 +11:00
Add sound priorities
This commit is contained in:
parent
53cf1a5064
commit
574e91df2f
|
@ -18,6 +18,12 @@ impl MixerController {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Eq)]
|
||||
enum SoundPriority {
|
||||
High,
|
||||
Low,
|
||||
}
|
||||
|
||||
pub struct SoundChannel {
|
||||
data: &'static [u8],
|
||||
pos: Num<usize, 8>,
|
||||
|
@ -27,6 +33,8 @@ pub struct SoundChannel {
|
|||
|
||||
panning: Num<i16, 4>, // between -1 and 1
|
||||
is_done: bool,
|
||||
|
||||
priority: SoundPriority,
|
||||
}
|
||||
|
||||
impl SoundChannel {
|
||||
|
@ -38,6 +46,7 @@ impl SoundChannel {
|
|||
playback_speed: 1.into(),
|
||||
panning: 0.into(),
|
||||
is_done: false,
|
||||
priority: SoundPriority::Low,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -58,4 +67,9 @@ impl SoundChannel {
|
|||
self.panning = panning;
|
||||
self
|
||||
}
|
||||
|
||||
pub fn high_priority(mut self) -> Self {
|
||||
self.priority = SoundPriority::High;
|
||||
self
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
use super::hw;
|
||||
use super::hw::LeftOrRight;
|
||||
use super::SoundChannel;
|
||||
use super::{SoundChannel, SoundPriority};
|
||||
use crate::number::Num;
|
||||
|
||||
pub struct Mixer {
|
||||
|
@ -41,6 +41,19 @@ impl Mixer {
|
|||
return;
|
||||
}
|
||||
|
||||
if new_channel.priority == SoundPriority::Low {
|
||||
return; // don't bother even playing it
|
||||
}
|
||||
|
||||
for channel in self.channels.iter_mut() {
|
||||
if channel.as_ref().unwrap().priority == SoundPriority::High {
|
||||
continue;
|
||||
}
|
||||
|
||||
channel.replace(new_channel);
|
||||
return;
|
||||
}
|
||||
|
||||
panic!("Cannot play more than 16 sounds at once");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue