diff --git a/src/input/mod.rs b/src/input/mod.rs index 0b6f729..0907753 100644 --- a/src/input/mod.rs +++ b/src/input/mod.rs @@ -5,7 +5,7 @@ use crate::resources::{flashing_message::FlashingMessageIntent, *}; mod player; -pub fn handle_intent(bterm: &mut BTerm, world: &mut World, resources: &mut Resources) { +pub fn handle_intent(bterm: &mut BTerm, _world: &mut World, resources: &mut Resources) { if let Some(key) = bterm.key { if let Some(flashing_message) = &resources.flashing_message { if let Some(intent) = &flashing_message.intent { @@ -25,61 +25,56 @@ pub fn handle_intent(bterm: &mut BTerm, world: &mut World, resources: &mut Resou } pub fn handle(world: &mut World, resources: &mut Resources, bterm: &mut BTerm) { - if resources.flashing_message.is_some() { - if bterm.key.is_some() { - handle_intent(bterm, world, resources); - resources.flashing_message = None; - } - } else { - match bterm.key { - None => {} - Some(key) => match key { - VirtualKeyCode::Left | VirtualKeyCode::J => { - player::try_move(-1, 0, world, resources); - } - VirtualKeyCode::U | VirtualKeyCode::Home => { - player::try_move(-1, -1, world, resources) - } - VirtualKeyCode::Up | VirtualKeyCode::I => { - player::try_move(0, -1, world, resources); - } - VirtualKeyCode::O | VirtualKeyCode::PageUp => { - player::try_move(1, -1, world, resources) - } - VirtualKeyCode::Right | VirtualKeyCode::K => { - player::try_move(1, 0, world, resources); - } - VirtualKeyCode::Comma | VirtualKeyCode::PageDown => { - player::try_move(1, 1, world, resources) - } - VirtualKeyCode::Down | VirtualKeyCode::M => { - player::try_move(0, 1, world, resources); - } - VirtualKeyCode::N | VirtualKeyCode::End => { - player::try_move(-1, 1, world, resources) - } - VirtualKeyCode::W => { - player::whip(world, resources); - } - VirtualKeyCode::D => { - resources.show_debug_info = !resources.show_debug_info; - } - VirtualKeyCode::Escape | VirtualKeyCode::Q => { - resources.flashing_message = Some(FlashingMessage::new( - " Are you sure you want to quit (Y/N)? ", - Some(FlashingMessageIntent::Quit), - )); - } - VirtualKeyCode::P => { - resources.flashing_message = - Some(FlashingMessage::from(" Press any key to resume game. ")); - } - _ => { - resources - .sound_output - .play_sound(resources.sound_effects.bad_key.clone()); - } - }, - } + if resources.flashing_message.is_some() && bterm.key.is_some() { + handle_intent(bterm, world, resources); + resources.flashing_message = None; + } + + match bterm.key { + None => {} + Some(key) => match key { + VirtualKeyCode::Left | VirtualKeyCode::J => { + player::try_move(-1, 0, world, resources); + } + VirtualKeyCode::U | VirtualKeyCode::Home => player::try_move(-1, -1, world, resources), + VirtualKeyCode::Up | VirtualKeyCode::I => { + player::try_move(0, -1, world, resources); + } + VirtualKeyCode::O | VirtualKeyCode::PageUp => player::try_move(1, -1, world, resources), + VirtualKeyCode::Right | VirtualKeyCode::K => { + player::try_move(1, 0, world, resources); + } + VirtualKeyCode::Comma | VirtualKeyCode::PageDown => { + player::try_move(1, 1, world, resources) + } + VirtualKeyCode::Down | VirtualKeyCode::M => { + player::try_move(0, 1, world, resources); + } + VirtualKeyCode::N | VirtualKeyCode::End => player::try_move(-1, 1, world, resources), + VirtualKeyCode::W => { + player::whip(world, resources); + } + VirtualKeyCode::D => { + resources.show_debug_info = !resources.show_debug_info; + } + VirtualKeyCode::Escape | VirtualKeyCode::Q => { + resources.flashing_message = Some(FlashingMessage::new( + " Are you sure you want to quit (Y/N)? ", + Some(FlashingMessageIntent::Quit), + )); + } + VirtualKeyCode::P => { + resources + .sound_output + .play_sound(resources.sound_effects.pause.clone()); + resources.flashing_message = + Some(FlashingMessage::from(" Press any key to resume game. ")); + } + _ => { + resources + .sound_output + .play_sound(resources.sound_effects.bad_key.clone()); + } + }, } } diff --git a/src/resources/sound_effects.rs b/src/resources/sound_effects.rs index f0779c1..f0b7267 100644 --- a/src/resources/sound_effects.rs +++ b/src/resources/sound_effects.rs @@ -38,6 +38,7 @@ pub struct SoundEffects { pub slow_hit: SoundSamples, pub medium_hit: SoundSamples, pub fast_hit: SoundSamples, + pub pause: SoundSamples, rng: RandomNumberGenerator, } @@ -153,6 +154,19 @@ impl SoundEffects { duration: Duration::from_millis(25), }], }), + pause: sound_output.render_sound_effect(&SoundEffect { + sounds: { + let mut sounds = vec![Sound { + sound_type: SoundType::Tone(500), + duration: Duration::from_millis(100), + }]; + sounds.extend((100..=200).rev().step_by(10).map(|x| Sound { + sound_type: SoundType::Tone(x), + duration: Duration::from_millis(20), + })); + sounds + }, + }), rng: RandomNumberGenerator::new(), } }