Inputs start to be nice
This commit is contained in:
parent
679d6ebe4f
commit
db8fa3ebc8
@ -199,12 +199,12 @@ impl Updatable for Character {
|
|||||||
/// An event was asked to the character.
|
/// An event was asked to the character.
|
||||||
fn manage_event(&mut self, event: Event) {
|
fn manage_event(&mut self, event: Event) {
|
||||||
match event {
|
match event {
|
||||||
Event::ButtonPressed(Button::Button0) => {
|
Event::ButtonPressed(Button::Button1) => {
|
||||||
self.jump();
|
self.jump();
|
||||||
self.can_jump = false;
|
self.can_jump = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Event::ButtonReleased(Button::Button0) => {
|
Event::ButtonReleased(Button::Button1) => {
|
||||||
self.can_jump = true;
|
self.can_jump = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,10 +7,10 @@ use std::rc::Rc;
|
|||||||
use wasm_bindgen::prelude::*;
|
use wasm_bindgen::prelude::*;
|
||||||
use wasm_bindgen::JsCast;
|
use wasm_bindgen::JsCast;
|
||||||
|
|
||||||
use crate::Result;
|
use crate::{log, Result};
|
||||||
|
|
||||||
/// The different actions that a user can do.
|
/// The different actions that a user can do.
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Debug, Copy, Clone)]
|
||||||
pub enum Event {
|
pub enum Event {
|
||||||
/// A button has been pressed.
|
/// A button has been pressed.
|
||||||
ButtonPressed(Button),
|
ButtonPressed(Button),
|
||||||
@ -20,7 +20,7 @@ pub enum Event {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// The different actions that a user can do.
|
/// The different actions that a user can do.
|
||||||
#[derive(Copy, Clone, PartialEq, Eq, Hash)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
|
||||||
pub enum Button {
|
pub enum Button {
|
||||||
/// The user asks to go to the left.
|
/// The user asks to go to the left.
|
||||||
Left,
|
Left,
|
||||||
@ -67,13 +67,14 @@ impl InputManager {
|
|||||||
|
|
||||||
/// Adds a gamepad to the input manager.
|
/// Adds a gamepad to the input manager.
|
||||||
pub fn add_gamepad(&mut self, gamepad: web_sys::Gamepad) {
|
pub fn add_gamepad(&mut self, gamepad: web_sys::Gamepad) {
|
||||||
|
log!("Gamepad added {}", gamepad.id());
|
||||||
self.gamepads.push(Gamepad::new(gamepad));
|
self.gamepads.push(Gamepad::new(gamepad));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Updates the gamepad states.
|
/// Updates the gamepad states.
|
||||||
pub fn update(&mut self) {
|
pub fn update(&mut self) {
|
||||||
for gamepad in &mut self.gamepads {
|
for gamepad in &mut self.gamepads {
|
||||||
gamepad.update();
|
gamepad.update(&mut self.events);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -98,9 +99,7 @@ impl Gamepad {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Updates the state of the gamepad and adds the corresponding events to the deque.
|
/// Updates the state of the gamepad and adds the corresponding events to the deque.
|
||||||
pub fn update(&mut self) -> VecDeque<Event> {
|
pub fn update(&mut self, events: &mut VecDeque<Event>) {
|
||||||
let mut events = VecDeque::new();
|
|
||||||
|
|
||||||
const BUTTONS: [Button; 4] = [
|
const BUTTONS: [Button; 4] = [
|
||||||
Button::Button0,
|
Button::Button0,
|
||||||
Button::Button1,
|
Button::Button1,
|
||||||
@ -125,8 +124,6 @@ impl Gamepad {
|
|||||||
events.push_back(Event::ButtonPressed(button));
|
events.push_back(Event::ButtonPressed(button));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
events
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Checks if a button is pressed.
|
/// Checks if a button is pressed.
|
||||||
@ -143,9 +140,9 @@ impl Gamepad {
|
|||||||
Button::Up => false,
|
Button::Up => false,
|
||||||
Button::Down => false,
|
Button::Down => false,
|
||||||
Button::Button0 => Into::<web_sys::GamepadButton>::into(buttons.get(0)).pressed(),
|
Button::Button0 => Into::<web_sys::GamepadButton>::into(buttons.get(0)).pressed(),
|
||||||
Button::Button1 => Into::<web_sys::GamepadButton>::into(buttons.get(0)).pressed(),
|
Button::Button1 => Into::<web_sys::GamepadButton>::into(buttons.get(1)).pressed(),
|
||||||
Button::Button2 => Into::<web_sys::GamepadButton>::into(buttons.get(0)).pressed(),
|
Button::Button2 => Into::<web_sys::GamepadButton>::into(buttons.get(2)).pressed(),
|
||||||
Button::Button3 => Into::<web_sys::GamepadButton>::into(buttons.get(0)).pressed(),
|
Button::Button3 => Into::<web_sys::GamepadButton>::into(buttons.get(3)).pressed(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -167,6 +164,8 @@ impl Inputs {
|
|||||||
|
|
||||||
window.add_event_listener_with_callback("gamepadconnected", cb.as_ref().unchecked_ref())?;
|
window.add_event_listener_with_callback("gamepadconnected", cb.as_ref().unchecked_ref())?;
|
||||||
|
|
||||||
|
cb.forget();
|
||||||
|
|
||||||
Ok(inputs)
|
Ok(inputs)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -177,4 +176,10 @@ impl Inputs {
|
|||||||
let mut inner = self.0.borrow_mut();
|
let mut inner = self.0.borrow_mut();
|
||||||
inner.update();
|
inner.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns the next event.
|
||||||
|
pub fn next(&mut self) -> Option<Event> {
|
||||||
|
let mut inner = self.0.borrow_mut();
|
||||||
|
inner.events.pop_front()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -180,9 +180,9 @@ impl Engine {
|
|||||||
|
|
||||||
if self.document.has_focus()? {
|
if self.document.has_focus()? {
|
||||||
// Manage events
|
// Manage events
|
||||||
// while let Some(event) = inner.keyboard.pop() {
|
while let Some(event) = self.inputs.next() {
|
||||||
// inner.scene.manage_action(&action);
|
self.scene.manage_event(event);
|
||||||
// }
|
}
|
||||||
|
|
||||||
// let keyboard = inner.keyboard.clone();
|
// let keyboard = inner.keyboard.clone();
|
||||||
if self.scene.update(now, duration) == State::Finished {
|
if self.scene.update(now, duration) == State::Finished {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user