Make sure all numpad inputs are mirrored on the number row, so that Mac OS works with numpad controls

This commit is contained in:
Timothy Warren 2021-11-18 10:32:50 -05:00
parent c490ab114b
commit e0f3b7c255

View File

@ -135,48 +135,49 @@ fn skip_turn(ecs: &mut World) -> RunState {
}
pub fn player_input(gs: &mut State, ctx: &mut Rltk) -> RunState {
// Player movement
// Mac OS is special when it comes to the numpad. Instead of reporting
// the keys as Numpad-specific numbers, it reports the number row scan
// codes. The quick fix is to match on both types of number scan codes.
match ctx.key {
None => return RunState::AwaitingInput, // Nothing happened
Some(key) => match key {
// Cardinal directions
VirtualKeyCode::Left
| VirtualKeyCode::Numpad4
| VirtualKeyCode::H
| VirtualKeyCode::Key4 => try_move_player(-1, 0, &mut gs.ecs),
| VirtualKeyCode::Key4
| VirtualKeyCode::H => try_move_player(-1, 0, &mut gs.ecs),
VirtualKeyCode::Right
| VirtualKeyCode::Numpad6
| VirtualKeyCode::L
| VirtualKeyCode::Key6 => try_move_player(1, 0, &mut gs.ecs),
| VirtualKeyCode::Key6
| VirtualKeyCode::L => try_move_player(1, 0, &mut gs.ecs),
VirtualKeyCode::Up
| VirtualKeyCode::Numpad8
| VirtualKeyCode::K
| VirtualKeyCode::Key8 => try_move_player(0, -1, &mut gs.ecs),
| VirtualKeyCode::Key8
| VirtualKeyCode::K => try_move_player(0, -1, &mut gs.ecs),
VirtualKeyCode::Down
| VirtualKeyCode::Numpad2
| VirtualKeyCode::J
| VirtualKeyCode::S
| VirtualKeyCode::Key2 => try_move_player(0, 1, &mut gs.ecs),
| VirtualKeyCode::Key2
| VirtualKeyCode::J => try_move_player(0, 1, &mut gs.ecs),
// Diagonals
VirtualKeyCode::Numpad9 | VirtualKeyCode::Y | VirtualKeyCode::Key9 => {
VirtualKeyCode::Numpad9 | VirtualKeyCode::Key9 | VirtualKeyCode::Y => {
try_move_player(1, -1, &mut gs.ecs)
}
VirtualKeyCode::Numpad7 | VirtualKeyCode::U | VirtualKeyCode::Key7 => {
VirtualKeyCode::Numpad7 | VirtualKeyCode::Key7 | VirtualKeyCode::U => {
try_move_player(-1, -1, &mut gs.ecs)
}
VirtualKeyCode::Numpad3 | VirtualKeyCode::N | VirtualKeyCode::Key3 => {
VirtualKeyCode::Numpad3 | VirtualKeyCode::Key3 | VirtualKeyCode::N => {
try_move_player(1, 1, &mut gs.ecs)
}
VirtualKeyCode::Numpad1 | VirtualKeyCode::B | VirtualKeyCode::Key1 => {
VirtualKeyCode::Numpad1 | VirtualKeyCode::Key1 | VirtualKeyCode::B => {
try_move_player(-1, 1, &mut gs.ecs)
}
// Skip Turn
VirtualKeyCode::Numpad5 | VirtualKeyCode::Space => return skip_turn(&mut gs.ecs),
VirtualKeyCode::Numpad5 | VirtualKeyCode::Key5 | VirtualKeyCode::Space => return skip_turn(&mut gs.ecs),
// Level changes
VirtualKeyCode::Period => {