mirror of
https://github.com/bevyengine/bevy
synced 2024-11-26 22:50:19 +00:00
51509a9a3e
# Objective - Part of the splitting process of #3692. ## Solution - Remove / change the tuple structs inside of `gamepad.rs` of `bevy_input` to normal structs. ## Reasons - It made the `gamepad_connection_system` cleaner. - It made the `gamepad_input_events.rs` example cleaner (which is probably the most notable change for the user facing API). - Tuple structs are not descriptive (`.0`, `.1`). - Using tuple structs for more than 1 field is a bad idea (This means that the `Gamepad` type might be fine as a tuple struct, but I still prefer normal structs over tuple structs). Feel free to discuss this change as this is more or less just a matter of taste. ## Changelog ### Changed - The `Gamepad`, `GamepadButton`, `GamepadAxis`, `GamepadEvent` and `GamepadEventRaw` types are now normal structs instead of tuple structs and have a `new()` function. ## Migration Guide - The `Gamepad`, `GamepadButton`, `GamepadAxis`, `GamepadEvent` and `GamepadEventRaw` types are now normal structs instead of tuple structs and have a `new()` function. To migrate change every instantiation to use the `new()` function instead and use the appropriate field names instead of `.0` and `.1`.
51 lines
1.9 KiB
Rust
51 lines
1.9 KiB
Rust
use crate::converter::{convert_axis, convert_button, convert_gamepad_id};
|
|
use bevy_ecs::event::EventWriter;
|
|
use bevy_ecs::system::{NonSend, NonSendMut};
|
|
use bevy_input::{gamepad::GamepadEventRaw, prelude::*};
|
|
use gilrs::{EventType, Gilrs};
|
|
|
|
pub fn gilrs_event_startup_system(gilrs: NonSend<Gilrs>, mut events: EventWriter<GamepadEventRaw>) {
|
|
for (id, _) in gilrs.gamepads() {
|
|
events.send(GamepadEventRaw::new(
|
|
convert_gamepad_id(id),
|
|
GamepadEventType::Connected,
|
|
));
|
|
}
|
|
}
|
|
|
|
pub fn gilrs_event_system(mut gilrs: NonSendMut<Gilrs>, mut events: EventWriter<GamepadEventRaw>) {
|
|
while let Some(gilrs_event) = gilrs.next_event() {
|
|
match gilrs_event.event {
|
|
EventType::Connected => {
|
|
events.send(GamepadEventRaw::new(
|
|
convert_gamepad_id(gilrs_event.id),
|
|
GamepadEventType::Connected,
|
|
));
|
|
}
|
|
EventType::Disconnected => {
|
|
events.send(GamepadEventRaw::new(
|
|
convert_gamepad_id(gilrs_event.id),
|
|
GamepadEventType::Disconnected,
|
|
));
|
|
}
|
|
EventType::ButtonChanged(gilrs_button, value, _) => {
|
|
if let Some(button_type) = convert_button(gilrs_button) {
|
|
events.send(GamepadEventRaw::new(
|
|
convert_gamepad_id(gilrs_event.id),
|
|
GamepadEventType::ButtonChanged(button_type, value),
|
|
));
|
|
}
|
|
}
|
|
EventType::AxisChanged(gilrs_axis, value, _) => {
|
|
if let Some(axis_type) = convert_axis(gilrs_axis) {
|
|
events.send(GamepadEventRaw::new(
|
|
convert_gamepad_id(gilrs_event.id),
|
|
GamepadEventType::AxisChanged(axis_type, value),
|
|
));
|
|
}
|
|
}
|
|
_ => (),
|
|
};
|
|
}
|
|
gilrs.inc();
|
|
}
|