From 47d5b57a58170b431cd5ff71c410315868e214a7 Mon Sep 17 00:00:00 2001 From: Utkarsh Date: Sun, 25 Oct 2020 23:35:00 +0530 Subject: [PATCH] Trigger gamepad connection event at start up --- crates/bevy_gilrs/src/gilrs_system.rs | 11 +++++++++++ crates/bevy_gilrs/src/lib.rs | 8 ++++++-- crates/bevy_input/src/lib.rs | 2 ++ examples/input/gamepad_input.rs | 3 ++- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/crates/bevy_gilrs/src/gilrs_system.rs b/crates/bevy_gilrs/src/gilrs_system.rs index ef03d7fc75bbe..3a6164c050c00 100644 --- a/crates/bevy_gilrs/src/gilrs_system.rs +++ b/crates/bevy_gilrs/src/gilrs_system.rs @@ -4,6 +4,17 @@ use bevy_ecs::{Resources, World}; use bevy_input::{gamepad::GamepadEventRaw, prelude::*}; use gilrs::{EventType, Gilrs}; +pub fn gilrs_event_startup_system(_world: &mut World, resources: &mut Resources) { + let gilrs = resources.get_thread_local::().unwrap(); + let mut event = resources.get_mut::>().unwrap(); + for (id, _) in gilrs.gamepads() { + event.send(GamepadEventRaw( + convert_gamepad_id(id), + GamepadEventType::Connected, + )); + } +} + pub fn gilrs_event_system(_world: &mut World, resources: &mut Resources) { let mut gilrs = resources.get_thread_local_mut::().unwrap(); let mut event = resources.get_mut::>().unwrap(); diff --git a/crates/bevy_gilrs/src/lib.rs b/crates/bevy_gilrs/src/lib.rs index 350814f0d01bd..9ca5d92ccbf21 100644 --- a/crates/bevy_gilrs/src/lib.rs +++ b/crates/bevy_gilrs/src/lib.rs @@ -2,9 +2,10 @@ mod converter; mod gilrs_system; use bevy_app::prelude::*; +use bevy_app::startup_stage::PRE_STARTUP; use bevy_ecs::prelude::*; use gilrs::GilrsBuilder; -use gilrs_system::gilrs_event_system; +use gilrs_system::{gilrs_event_startup_system, gilrs_event_system}; #[derive(Default)] pub struct GilrsPlugin; @@ -18,7 +19,10 @@ impl Plugin for GilrsPlugin { { Ok(gilrs) => { app.add_thread_local_resource(gilrs) - .add_startup_system(gilrs_event_system.thread_local_system()) + .add_startup_system_to_stage( + PRE_STARTUP, + gilrs_event_startup_system.thread_local_system(), + ) .add_system_to_stage( stage::PRE_EVENT, gilrs_event_system.thread_local_system(), diff --git a/crates/bevy_input/src/lib.rs b/crates/bevy_input/src/lib.rs index d1ff1b75ebc4c..ec8ec844984de 100644 --- a/crates/bevy_input/src/lib.rs +++ b/crates/bevy_input/src/lib.rs @@ -26,6 +26,7 @@ use keyboard::{keyboard_input_system, KeyCode, KeyboardInput}; use mouse::{mouse_button_input_system, MouseButton, MouseButtonInput, MouseMotion, MouseWheel}; use touch::{touch_screen_input_system, TouchInput, Touches}; +use bevy_app::startup_stage::STARTUP; use bevy_ecs::IntoQuerySystem; use gamepad::{ gamepad_event_system, GamepadAxis, GamepadButton, GamepadEvent, GamepadEventRaw, @@ -53,6 +54,7 @@ impl Plugin for InputPlugin { .init_resource::>() .init_resource::>() .add_system_to_stage(bevy_app::stage::EVENT, gamepad_event_system.system()) + .add_startup_system_to_stage(STARTUP, gamepad_event_system.system()) .add_event::() .init_resource::() .add_system_to_stage(bevy_app::stage::EVENT, touch_screen_input_system.system()); diff --git a/examples/input/gamepad_input.rs b/examples/input/gamepad_input.rs index 1b8279489ddac..24a544f53d46c 100644 --- a/examples/input/gamepad_input.rs +++ b/examples/input/gamepad_input.rs @@ -1,4 +1,5 @@ use bevy::prelude::*; +use bevy_app::startup_stage::POST_STARTUP; use bevy_input::gamepad::{Gamepad, GamepadButton, GamepadEvent, GamepadEventType}; use bevy_utils::HashSet; @@ -6,7 +7,7 @@ fn main() { App::build() .add_default_plugins() .init_resource::() - .add_startup_system(connection_system.system()) + .add_startup_system_to_stage(POST_STARTUP, connection_system.system()) .add_system(connection_system.system()) .add_system(gamepad_system.system()) .run();