From cfe2fbd879c13e2887d7980d68a735bf48b4fe51 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Magalh=C3=A3es?= <joamag@gmail.com>
Date: Mon, 14 Nov 2022 17:58:52 +0000
Subject: [PATCH] feat: initial gamepad

---
 .../components/keyboard-gb/keyboard-gb.tsx    | 24 +++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/examples/web/react/components/keyboard-gb/keyboard-gb.tsx b/examples/web/react/components/keyboard-gb/keyboard-gb.tsx
index 32715fd7..1cd2a2b1 100644
--- a/examples/web/react/components/keyboard-gb/keyboard-gb.tsx
+++ b/examples/web/react/components/keyboard-gb/keyboard-gb.tsx
@@ -79,11 +79,35 @@ export const KeyboardGB: FC<KeyboardGBProps> = ({
                 return;
             }
         };
+        const onGamepadConnected = (event: GamepadEvent) => {
+            const gamepad = event.gamepad;
+            
+            console.log(
+                "Gamepad connected at index %d: %s. %d buttons, %d axes.",
+                event.gamepad.index,
+                event.gamepad.id,
+                event.gamepad.buttons.length,
+                event.gamepad.axes.length
+            );
+
+            const updateStatus = () => {
+                event.gamepad.buttons.forEach((button, index) => {
+                    if (button.pressed) {
+                        console.info(`${index} => ${button.pressed}`);
+                    }
+                });
+                requestAnimationFrame(updateStatus);
+            };
+
+            requestAnimationFrame(updateStatus);
+        };
         document.addEventListener("keydown", _onKeyDown);
         document.addEventListener("keyup", _onKeyUp);
+        window.addEventListener("gamepadconnected", onGamepadConnected);
         return () => {
             document.removeEventListener("keydown", _onKeyDown);
             document.removeEventListener("keyup", _onKeyUp);
+            window.removeEventListener("gamepadconnected", onGamepadConnected);
         };
     }, []);
     const renderKey = (
-- 
GitLab