@@ -5,7 +5,15 @@ use bevy_utils::{tracing::info, HashMap, HashSet};
5
5
6
6
#[ derive( Debug , Copy , Clone , PartialEq , Eq , Hash ) ]
7
7
#[ cfg_attr( feature = "serialize" , derive( serde:: Serialize , serde:: Deserialize ) ) ]
8
- pub struct Gamepad ( pub usize ) ;
8
+ pub struct Gamepad {
9
+ pub id : usize ,
10
+ }
11
+
12
+ impl Gamepad {
13
+ pub fn new ( id : usize ) -> Self {
14
+ Self { id }
15
+ }
16
+ }
9
17
10
18
#[ derive( Default ) ]
11
19
/// Container of unique connected [`Gamepad`]s
@@ -48,11 +56,35 @@ pub enum GamepadEventType {
48
56
49
57
#[ derive( Debug , Clone , PartialEq ) ]
50
58
#[ cfg_attr( feature = "serialize" , derive( serde:: Serialize , serde:: Deserialize ) ) ]
51
- pub struct GamepadEvent ( pub Gamepad , pub GamepadEventType ) ;
59
+ pub struct GamepadEvent {
60
+ pub gamepad : Gamepad ,
61
+ pub event_type : GamepadEventType ,
62
+ }
63
+
64
+ impl GamepadEvent {
65
+ pub fn new ( gamepad : Gamepad , event_type : GamepadEventType ) -> Self {
66
+ Self {
67
+ gamepad,
68
+ event_type,
69
+ }
70
+ }
71
+ }
52
72
53
73
#[ derive( Debug , Clone , PartialEq ) ]
54
74
#[ cfg_attr( feature = "serialize" , derive( serde:: Serialize , serde:: Deserialize ) ) ]
55
- pub struct GamepadEventRaw ( pub Gamepad , pub GamepadEventType ) ;
75
+ pub struct GamepadEventRaw {
76
+ pub gamepad : Gamepad ,
77
+ pub event_type : GamepadEventType ,
78
+ }
79
+
80
+ impl GamepadEventRaw {
81
+ pub fn new ( gamepad : Gamepad , event_type : GamepadEventType ) -> Self {
82
+ Self {
83
+ gamepad,
84
+ event_type,
85
+ }
86
+ }
87
+ }
56
88
57
89
#[ derive( Debug , Copy , Clone , PartialEq , Eq , Hash ) ]
58
90
#[ cfg_attr( feature = "serialize" , derive( serde:: Serialize , serde:: Deserialize ) ) ]
@@ -80,7 +112,19 @@ pub enum GamepadButtonType {
80
112
81
113
#[ derive( Debug , Copy , Clone , PartialEq , Eq , Hash ) ]
82
114
#[ cfg_attr( feature = "serialize" , derive( serde:: Serialize , serde:: Deserialize ) ) ]
83
- pub struct GamepadButton ( pub Gamepad , pub GamepadButtonType ) ;
115
+ pub struct GamepadButton {
116
+ pub gamepad : Gamepad ,
117
+ pub button_type : GamepadButtonType ,
118
+ }
119
+
120
+ impl GamepadButton {
121
+ pub fn new ( gamepad : Gamepad , button_type : GamepadButtonType ) -> Self {
122
+ Self {
123
+ gamepad,
124
+ button_type,
125
+ }
126
+ }
127
+ }
84
128
85
129
#[ derive( Debug , Copy , Clone , PartialEq , Eq , Hash ) ]
86
130
#[ cfg_attr( feature = "serialize" , derive( serde:: Serialize , serde:: Deserialize ) ) ]
@@ -97,7 +141,16 @@ pub enum GamepadAxisType {
97
141
98
142
#[ derive( Debug , Copy , Clone , PartialEq , Eq , Hash ) ]
99
143
#[ cfg_attr( feature = "serialize" , derive( serde:: Serialize , serde:: Deserialize ) ) ]
100
- pub struct GamepadAxis ( pub Gamepad , pub GamepadAxisType ) ;
144
+ pub struct GamepadAxis {
145
+ pub gamepad : Gamepad ,
146
+ pub axis_type : GamepadAxisType ,
147
+ }
148
+
149
+ impl GamepadAxis {
150
+ pub fn new ( gamepad : Gamepad , axis_type : GamepadAxisType ) -> Self {
151
+ Self { gamepad, axis_type }
152
+ }
153
+ }
101
154
102
155
#[ derive( Default , Debug ) ]
103
156
pub struct GamepadSettings {
@@ -251,14 +304,14 @@ pub fn gamepad_connection_system(
251
304
mut gamepad_event : EventReader < GamepadEvent > ,
252
305
) {
253
306
for event in gamepad_event. iter ( ) {
254
- match & event {
255
- GamepadEvent ( gamepad , GamepadEventType :: Connected ) => {
256
- gamepads. register ( * gamepad) ;
257
- info ! ( "{:?} Connected" , gamepad) ;
307
+ match event. event_type {
308
+ GamepadEventType :: Connected => {
309
+ gamepads. register ( event . gamepad ) ;
310
+ info ! ( "{:?} Connected" , event . gamepad) ;
258
311
}
259
- GamepadEvent ( gamepad , GamepadEventType :: Disconnected ) => {
260
- gamepads. deregister ( gamepad) ;
261
- info ! ( "{:?} Disconnected" , gamepad) ;
312
+ GamepadEventType :: Disconnected => {
313
+ gamepads. deregister ( & event . gamepad ) ;
314
+ info ! ( "{:?} Disconnected" , event . gamepad) ;
262
315
}
263
316
_ => ( ) ,
264
317
}
@@ -275,62 +328,61 @@ pub fn gamepad_event_system(
275
328
) {
276
329
button_input. clear ( ) ;
277
330
for event in raw_events. iter ( ) {
278
- let ( gamepad, event) = ( event. 0 , & event. 1 ) ;
279
- match event {
331
+ match event. event_type {
280
332
GamepadEventType :: Connected => {
281
- events. send ( GamepadEvent ( gamepad, event. clone ( ) ) ) ;
333
+ events. send ( GamepadEvent :: new ( event . gamepad , event. event_type . clone ( ) ) ) ;
282
334
for button_type in & ALL_BUTTON_TYPES {
283
- let gamepad_button = GamepadButton ( gamepad, * button_type) ;
335
+ let gamepad_button = GamepadButton :: new ( event . gamepad , * button_type) ;
284
336
button_input. reset ( gamepad_button) ;
285
337
button_axis. set ( gamepad_button, 0.0 ) ;
286
338
}
287
339
for axis_type in & ALL_AXIS_TYPES {
288
- axis. set ( GamepadAxis ( gamepad, * axis_type) , 0.0 ) ;
340
+ axis. set ( GamepadAxis :: new ( event . gamepad , * axis_type) , 0.0 ) ;
289
341
}
290
342
}
291
343
GamepadEventType :: Disconnected => {
292
- events. send ( GamepadEvent ( gamepad, event. clone ( ) ) ) ;
344
+ events. send ( GamepadEvent :: new ( event . gamepad , event. event_type . clone ( ) ) ) ;
293
345
for button_type in & ALL_BUTTON_TYPES {
294
- let gamepad_button = GamepadButton ( gamepad, * button_type) ;
346
+ let gamepad_button = GamepadButton :: new ( event . gamepad , * button_type) ;
295
347
button_input. reset ( gamepad_button) ;
296
348
button_axis. remove ( gamepad_button) ;
297
349
}
298
350
for axis_type in & ALL_AXIS_TYPES {
299
- axis. remove ( GamepadAxis ( gamepad, * axis_type) ) ;
351
+ axis. remove ( GamepadAxis :: new ( event . gamepad , * axis_type) ) ;
300
352
}
301
353
}
302
354
GamepadEventType :: AxisChanged ( axis_type, value) => {
303
- let gamepad_axis = GamepadAxis ( gamepad, * axis_type) ;
355
+ let gamepad_axis = GamepadAxis :: new ( event . gamepad , axis_type) ;
304
356
if let Some ( filtered_value) = settings
305
357
. get_axis_settings ( gamepad_axis)
306
- . filter ( * value, axis. get ( gamepad_axis) )
358
+ . filter ( value, axis. get ( gamepad_axis) )
307
359
{
308
360
axis. set ( gamepad_axis, filtered_value) ;
309
- events. send ( GamepadEvent (
310
- gamepad,
311
- GamepadEventType :: AxisChanged ( * axis_type, filtered_value) ,
361
+ events. send ( GamepadEvent :: new (
362
+ event . gamepad ,
363
+ GamepadEventType :: AxisChanged ( axis_type, filtered_value) ,
312
364
) ) ;
313
365
}
314
366
}
315
367
GamepadEventType :: ButtonChanged ( button_type, value) => {
316
- let gamepad_button = GamepadButton ( gamepad, * button_type) ;
368
+ let gamepad_button = GamepadButton :: new ( event . gamepad , button_type) ;
317
369
if let Some ( filtered_value) = settings
318
370
. get_button_axis_settings ( gamepad_button)
319
- . filter ( * value, button_axis. get ( gamepad_button) )
371
+ . filter ( value, button_axis. get ( gamepad_button) )
320
372
{
321
373
button_axis. set ( gamepad_button, filtered_value) ;
322
- events. send ( GamepadEvent (
323
- gamepad,
324
- GamepadEventType :: ButtonChanged ( * button_type, filtered_value) ,
374
+ events. send ( GamepadEvent :: new (
375
+ event . gamepad ,
376
+ GamepadEventType :: ButtonChanged ( button_type, filtered_value) ,
325
377
) ) ;
326
378
}
327
379
328
380
let button_property = settings. get_button_settings ( gamepad_button) ;
329
381
if button_input. pressed ( gamepad_button) {
330
- if button_property. is_released ( * value) {
382
+ if button_property. is_released ( value) {
331
383
button_input. release ( gamepad_button) ;
332
384
}
333
- } else if button_property. is_pressed ( * value) {
385
+ } else if button_property. is_pressed ( value) {
334
386
button_input. press ( gamepad_button) ;
335
387
}
336
388
}
0 commit comments