diff --git a/src/input/dummy_player_controller.rs b/src/input/dummy_player_controller.rs index e572e6e..f93dac7 100644 --- a/src/input/dummy_player_controller.rs +++ b/src/input/dummy_player_controller.rs @@ -52,6 +52,10 @@ impl PlayerController for DummyPlayerController { false } + fn skip(&self) -> bool { + false + } + fn trigger_up(&self) -> bool { false } @@ -84,6 +88,10 @@ impl PlayerController for DummyPlayerController { false } + fn trigger_skip(&self) -> bool { + false + } + fn trigger_menu_ok(&self) -> bool { false } diff --git a/src/input/keyboard_player_controller.rs b/src/input/keyboard_player_controller.rs index ea7c12f..ee24b92 100644 --- a/src/input/keyboard_player_controller.rs +++ b/src/input/keyboard_player_controller.rs @@ -24,6 +24,7 @@ bitfield! { pub prev_weapon, set_prev_weapon: 9; pub escape, set_escape: 10; pub enter, set_enter: 11; + pub skip, set_skip: 12; } #[derive(Clone)] @@ -60,6 +61,7 @@ impl PlayerController for KeyboardController { self.state.set_inventory(keyboard::is_key_pressed(ctx, keymap.inventory)); self.state.set_jump(keyboard::is_key_pressed(ctx, keymap.jump)); self.state.set_shoot(keyboard::is_key_pressed(ctx, keymap.shoot)); + self.state.set_skip(keyboard::is_key_pressed(ctx, keymap.skip)); self.state.set_prev_weapon(keyboard::is_key_pressed(ctx, keymap.prev_weapon)); self.state.set_next_weapon(keyboard::is_key_pressed(ctx, keymap.next_weapon)); self.state.set_enter(keyboard::is_key_pressed(ctx, VirtualKeyCode::Return)); @@ -107,6 +109,10 @@ impl PlayerController for KeyboardController { self.state.shoot() } + fn skip(&self) -> bool { + self.state.skip() + } + fn trigger_up(&self) -> bool { self.trigger.up() } @@ -139,6 +145,10 @@ impl PlayerController for KeyboardController { self.trigger.shoot() } + fn trigger_skip(&self) -> bool { + self.trigger.skip() + } + fn trigger_menu_ok(&self) -> bool { self.trigger.jump() || self.trigger.enter() } diff --git a/src/input/player_controller.rs b/src/input/player_controller.rs index e71ea4b..79ef3d7 100644 --- a/src/input/player_controller.rs +++ b/src/input/player_controller.rs @@ -31,6 +31,9 @@ pub trait PlayerController: PlayerControllerClone { /// True if "shoot" button is down. fn shoot(&self) -> bool; + /// True if "skip" button is down. + fn skip(&self) -> bool; + fn trigger_up(&self) -> bool; fn trigger_left(&self) -> bool; @@ -47,6 +50,8 @@ pub trait PlayerController: PlayerControllerClone { fn trigger_shoot(&self) -> bool; + fn trigger_skip(&self) -> bool; + fn trigger_menu_ok(&self) -> bool; fn trigger_menu_back(&self) -> bool; diff --git a/src/input/touch_player_controller.rs b/src/input/touch_player_controller.rs index a02251b..581b209 100644 --- a/src/input/touch_player_controller.rs +++ b/src/input/touch_player_controller.rs @@ -133,6 +133,11 @@ impl PlayerController for TouchPlayerController { self.state.shoot() } + fn skip(&self) -> bool { + // TODO + false + } + fn trigger_up(&self) -> bool { self.trigger.up() } @@ -165,6 +170,11 @@ impl PlayerController for TouchPlayerController { self.trigger.shoot() } + fn trigger_skip(&self) -> bool { + // TODO + false + } + fn trigger_menu_ok(&self) -> bool { self.trigger.jump() } diff --git a/src/settings.rs b/src/settings.rs index b8251ee..8bd2310 100644 --- a/src/settings.rs +++ b/src/settings.rs @@ -72,6 +72,7 @@ pub struct PlayerKeyMap { pub next_weapon: VirtualKeyCode, pub jump: VirtualKeyCode, pub shoot: VirtualKeyCode, + pub skip: VirtualKeyCode, pub inventory: VirtualKeyCode, pub map: VirtualKeyCode, } @@ -86,6 +87,7 @@ fn p1_default_keymap() -> PlayerKeyMap { next_weapon: VirtualKeyCode::S, jump: VirtualKeyCode::Z, shoot: VirtualKeyCode::X, + skip: VirtualKeyCode::LControl, inventory: VirtualKeyCode::Q, map: VirtualKeyCode::W, } @@ -101,6 +103,7 @@ fn p2_default_keymap() -> PlayerKeyMap { next_weapon: VirtualKeyCode::H, jump: VirtualKeyCode::B, shoot: VirtualKeyCode::N, + skip: VirtualKeyCode::RControl, inventory: VirtualKeyCode::T, map: VirtualKeyCode::Y, } diff --git a/src/text_script.rs b/src/text_script.rs index ec2c5fc..ba613be 100644 --- a/src/text_script.rs +++ b/src/text_script.rs @@ -564,7 +564,9 @@ impl TextScriptVM { } if remaining > 1 { - let ticks = if state.textscript_vm.flags.fast() { + let ticks = if state.textscript_vm.flags.fast() + || game_scene.player1.controller.skip() + || game_scene.player2.controller.skip() { 0 } else if game_scene.player1.controller.jump() || game_scene.player1.controller.shoot() @@ -633,8 +635,10 @@ impl TextScriptVM { TextScriptExecutionState::WaitInput(event, ip) => { if game_scene.player1.controller.trigger_jump() || game_scene.player1.controller.trigger_shoot() + || game_scene.player1.controller.skip() || game_scene.player2.controller.trigger_jump() - || game_scene.player2.controller.trigger_shoot() { + || game_scene.player2.controller.trigger_shoot() + || game_scene.player2.controller.skip() { state.textscript_vm.state = TextScriptExecutionState::Running(event, ip); } break;