mirror of
https://github.com/italicsjenga/agb.git
synced 2024-12-24 08:41:34 +11:00
105 lines
3.1 KiB
Rust
105 lines
3.1 KiB
Rust
use agb::{
|
|
include_wav,
|
|
sound::mixer::{Mixer, SoundChannel},
|
|
};
|
|
|
|
const BGM: &[u8] = include_wav!("sfx/bgm.wav");
|
|
const BAD_SELECTION: &[u8] = include_wav!("sfx/bad.wav");
|
|
const SELECT: &[u8] = include_wav!("sfx/select.wav");
|
|
const PLACE: &[u8] = include_wav!("sfx/place.wav");
|
|
|
|
const BANG: &[u8] = include_wav!("sfx/bang.wav");
|
|
const SWORD_HIT: &[u8] = include_wav!("sfx/sword_hit.wav");
|
|
const SLIME_DEATH: &[u8] = include_wav!("sfx/slime_death.wav");
|
|
const SWORD_PICKUP: &[u8] = include_wav!("sfx/sword_pickup.wav");
|
|
const WALL_HIT: &[u8] = include_wav!("sfx/wall_hit.wav");
|
|
const DOOR_OPEN: &[u8] = include_wav!("sfx/door_open.wav");
|
|
|
|
const SWICTH_TOGGLES: &[&[u8]] = &[include_wav!("sfx/switch_toggle1.wav")];
|
|
|
|
pub struct Sfx<'a> {
|
|
mixer: &'a mut Mixer<'a>,
|
|
}
|
|
|
|
impl<'a> Sfx<'a> {
|
|
pub fn new(mixer: &'a mut Mixer<'a>) -> Self {
|
|
let mut bgm_channel = SoundChannel::new_high_priority(BGM);
|
|
bgm_channel.stereo().should_loop();
|
|
|
|
mixer.play_sound(bgm_channel);
|
|
mixer.enable();
|
|
|
|
Self { mixer }
|
|
}
|
|
|
|
pub fn frame(&mut self) {
|
|
self.mixer.frame();
|
|
}
|
|
|
|
pub fn bad_selection(&mut self) {
|
|
self.mixer.play_sound(SoundChannel::new(BAD_SELECTION));
|
|
}
|
|
|
|
pub fn select(&mut self) {
|
|
self.mixer.play_sound(SoundChannel::new(SELECT));
|
|
}
|
|
|
|
pub fn place(&mut self) {
|
|
self.mixer.play_sound(SoundChannel::new(PLACE));
|
|
}
|
|
|
|
pub fn play_sound_effect(&mut self, effect: Option<SoundEffect>) {
|
|
if let Some(effect) = effect {
|
|
match effect {
|
|
SoundEffect::DoorFail | SoundEffect::WallHit => {
|
|
self.mixer.play_sound(SoundChannel::new(WALL_HIT));
|
|
}
|
|
SoundEffect::SlimeDie => {
|
|
self.mixer.play_sound(SoundChannel::new(SLIME_DEATH));
|
|
}
|
|
SoundEffect::HeroDie => {}
|
|
SoundEffect::SquidDie => {}
|
|
SoundEffect::SwordPickup => {
|
|
self.mixer.play_sound(SoundChannel::new(SWORD_PICKUP));
|
|
}
|
|
SoundEffect::SwordKill => {
|
|
self.mixer.play_sound(SoundChannel::new(SWORD_HIT));
|
|
}
|
|
SoundEffect::SwordFail => {
|
|
self.mixer.play_sound(SoundChannel::new(BANG));
|
|
}
|
|
SoundEffect::KeyPickup => {}
|
|
SoundEffect::DoorOpen => {
|
|
self.mixer.play_sound(SoundChannel::new(DOOR_OPEN));
|
|
}
|
|
SoundEffect::SwitchToggle => {
|
|
self.mixer.play_sound(SoundChannel::new(SWICTH_TOGGLES[0]));
|
|
}
|
|
SoundEffect::KeyDrop => {}
|
|
SoundEffect::SwordDrop => {}
|
|
SoundEffect::SwitchedDoorToggle => {}
|
|
SoundEffect::SpikesToggle => {}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Clone, Copy, PartialEq, Eq, Debug, Hash)]
|
|
pub enum SoundEffect {
|
|
SlimeDie,
|
|
HeroDie,
|
|
SquidDie,
|
|
SwordPickup,
|
|
SwordKill,
|
|
SwordFail,
|
|
KeyPickup,
|
|
DoorFail,
|
|
DoorOpen,
|
|
SwitchToggle,
|
|
KeyDrop,
|
|
SwordDrop,
|
|
SwitchedDoorToggle,
|
|
SpikesToggle,
|
|
WallHit,
|
|
}
|