Support rebinding gamepad inputs

This commit is contained in:
2024-11-29 18:54:26 -05:00
parent 24474fabd0
commit ce7ba71ea0
4 changed files with 184 additions and 34 deletions
+13 -7
View File
@@ -8,7 +8,7 @@ use egui::{
use gilrs::{EventType, Gilrs};
use winit::{
application::ApplicationHandler,
event::{KeyEvent, WindowEvent},
event::WindowEvent,
event_loop::{ActiveEventLoop, EventLoopProxy},
window::Window,
};
@@ -83,7 +83,7 @@ impl ApplicationHandler<UserEvent> for Application {
match &event {
WindowEvent::KeyboardInput { event, .. } => {
self.controllers.handle_key_event(event);
viewport.handle_key_event(event);
viewport.app.handle_key_event(event);
}
WindowEvent::Focused(new_focused) => {
self.focused = new_focused.then_some(viewport_id);
@@ -143,7 +143,17 @@ impl ApplicationHandler<UserEvent> for Application {
fn user_event(&mut self, event_loop: &ActiveEventLoop, event: UserEvent) {
match event {
UserEvent::GamepadEvent(event) => self.controllers.handle_gamepad_event(&event),
UserEvent::GamepadEvent(event) => {
self.controllers.handle_gamepad_event(&event);
let Some(viewport) = self
.focused
.as_ref()
.and_then(|id| self.viewports.get_mut(id))
else {
return;
};
viewport.app.handle_gamepad_event(&event);
}
UserEvent::OpenInput => {
let input = InputWindow::new(self.mappings.clone());
self.open(event_loop, Box::new(input));
@@ -248,10 +258,6 @@ impl Viewport {
}
}
pub fn handle_key_event(&mut self, event: &KeyEvent) {
self.app.handle_key_event(event);
}
fn redraw(&mut self, event_loop: &ActiveEventLoop) -> Option<Action> {
let mut input = self.state.take_egui_input(&self.window);
input.viewports = std::iter::once((ViewportId::ROOT, self.info.clone())).collect();