use bevy_input::ButtonInput;
use bevy_input::keyboard::KeyCode;
const DIGIT_KEYS: [KeyCode; 9] = [
KeyCode::Digit1,
KeyCode::Digit2,
KeyCode::Digit3,
KeyCode::Digit4,
KeyCode::Digit5,
KeyCode::Digit6,
KeyCode::Digit7,
KeyCode::Digit8,
KeyCode::Digit9,
];
#[must_use]
pub fn digit_key_to_choice_index(keys: &ButtonInput<KeyCode>, max: usize) -> Option<usize> {
for (idx, key) in DIGIT_KEYS.iter().enumerate() {
if idx >= max {
return None;
}
if keys.just_pressed(*key) {
return Some(idx);
}
}
None
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn returns_index_when_in_range() {
let mut keys = ButtonInput::<KeyCode>::default();
keys.press(KeyCode::Digit3);
assert_eq!(digit_key_to_choice_index(&keys, 5), Some(2));
}
#[test]
fn returns_none_when_above_max() {
let mut keys = ButtonInput::<KeyCode>::default();
keys.press(KeyCode::Digit5);
assert_eq!(digit_key_to_choice_index(&keys, 3), None);
}
#[test]
fn returns_none_when_no_digit_pressed() {
let keys = ButtonInput::<KeyCode>::default();
assert_eq!(digit_key_to_choice_index(&keys, 5), None);
}
#[test]
fn returns_none_when_max_zero() {
let mut keys = ButtonInput::<KeyCode>::default();
keys.press(KeyCode::Digit1);
assert_eq!(digit_key_to_choice_index(&keys, 0), None);
}
}