From d25604e311e3a98d87429cac6b778f18febd4996 Mon Sep 17 00:00:00 2001 From: Brenden Bunker Date: Fri, 11 Mar 2022 13:25:43 -0700 Subject: [PATCH 1/2] added typescript types --- index.d.ts | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 index.d.ts diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..023ea51 --- /dev/null +++ b/index.d.ts @@ -0,0 +1,58 @@ +declare module "gamepad.js" { + class GamepadListener { + constructor(options?: GamepadOptions); + start: () => void; + stop: () => void; + update: () => void; + discover: (gamepad: Gamepad, index: number) => void; + registerHandler: (index: number, gamepad: Gamepad) => void; + removeGamepad: (index: number) => void; + onAxis: (event: Event) => void; + on: GamepadEvent; + off: GamepadEvent; + } + + class GamepadHandler { + constructor(index: number, gamepad: Gamepad, options?: GamepadOptions); + update: (gamepad: Gamepad) => void; + updateStick: ( + gamepad: Gamepad, + stick: number, + axis: number, + value: number + ) => void; + updateButton: ( + gamepad: Gamepad, + button: GamepadButton, + index: number + ) => void; + } + + interface GamepadOptions { + analog: boolean; + precision: number; + deadZone: number; + button: { + analog: boolean; + }; + stick: { + analog: boolean; + precision: number; + deadZone: number; + }; + } + + type GamepadEvent = ( + event: + | "gamepad:connected" + | "gamepad:disconnected" + | "gamepad:axis" + | `gamepad:${number}:axis` + | `gamepad:${number}:axis:${number}` + | "gamepad:button" + | `gamepad:${number}:button` + | `gamepad:${number}:button:${number}` + | string, + handler: (e: Event) => void + ) => void; +} From 105f0b7b88fe82b0b75ef3d51b1a8971a1986be2 Mon Sep 17 00:00:00 2001 From: Brenden Bunker Date: Fri, 11 Mar 2022 14:33:43 -0700 Subject: [PATCH 2/2] corrected event types for on and off --- index.d.ts | 89 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 73 insertions(+), 16 deletions(-) diff --git a/index.d.ts b/index.d.ts index 023ea51..f29824a 100644 --- a/index.d.ts +++ b/index.d.ts @@ -7,9 +7,52 @@ declare module "gamepad.js" { discover: (gamepad: Gamepad, index: number) => void; registerHandler: (index: number, gamepad: Gamepad) => void; removeGamepad: (index: number) => void; - onAxis: (event: Event) => void; - on: GamepadEvent; - off: GamepadEvent; + onAxis: (event: GamepadAxisEvent) => void; + onButton: (event: GamepadButtonEvent) => void; + public on( + event: "gamepad:connected", + handler: (e: GamepadConnectEvent) => void + ): void; + public on( + event: "gamepad:disconnected", + handler: (e: GamepadDisconnectEvent) => void + ): void; + public on( + event: + | "gamepad:button" + | `gamepad:${number}:button` + | `gamepad:${number}:button:${number}`, + handler: (e: GamepadButtonEvent) => void + ): void; + public on( + event: + | "gamepad:axis" + | `gamepad:${number}:axis` + | `gamepad:${number}:axis:${number}`, + handler: (e: GamepadAxisEvent) => void + ): void; + public off( + event: "gamepad:connected", + handler: (e: GamepadConnectEvent) => void + ): void; + public off( + event: "gamepad:disconnected", + handler: (e: GamepadDisconnectEvent) => void + ): void; + public off( + event: + | "gamepad:button" + | `gamepad:${number}:button` + | `gamepad:${number}:button:${number}`, + handler: (e: GamepadButtonEvent) => void + ): void; + public off( + event: + | "gamepad:axis" + | `gamepad:${number}:axis` + | `gamepad:${number}:axis:${number}`, + handler: (e: GamepadAxisEvent) => void + ): void; } class GamepadHandler { @@ -42,17 +85,31 @@ declare module "gamepad.js" { }; } - type GamepadEvent = ( - event: - | "gamepad:connected" - | "gamepad:disconnected" - | "gamepad:axis" - | `gamepad:${number}:axis` - | `gamepad:${number}:axis:${number}` - | "gamepad:button" - | `gamepad:${number}:button` - | `gamepad:${number}:button:${number}` - | string, - handler: (e: Event) => void - ) => void; + interface GamepadAxisEvent { + detail: { + index: number; + value: number; + stick: number; + axis: number; + gamepad: Gamepad; + }; + } + + interface GamepadButtonEvent { + detail: { + index: number; + value: number; + pressed: boolean; + button: number; + gamepad: Gamepad; + }; + } + + interface GamepadConnectEvent { + detail: { index: number; gamepad: Gamepad }; + } + + interface GamepadDisconnectEvent { + detail: { index: number }; + } }