Просмотр исходного кода

feat: 添加 Xbox 手柄 LB 和 RB 按键支持,增加翻页功能

mobeicanyue 1 месяц назад
Родитель
Сommit
df2817511a
1 измененных файлов с 29 добавлено и 2 удалено
  1. 29 2
      modules/web/src/utils/xboxGamepad.ts

+ 29 - 2
modules/web/src/utils/xboxGamepad.ts

@@ -17,6 +17,8 @@ interface GamepadConfig {
   BUTTON_INDEX: {
     A: number
     B: number
+    LB: number
+    RB: number
   }
 }
 
@@ -28,6 +30,8 @@ interface DPadState {
 
   a: boolean
   b: boolean
+  lb: boolean
+  rb: boolean
 }
 
 interface GamepadState {
@@ -52,6 +56,8 @@ function createGamepadState(): GamepadState {
       right: false,
       a: false,
       b: false,
+      lb: false,
+      rb: false,
     },
   }
 }
@@ -76,8 +82,9 @@ const CONFIG: GamepadConfig = {
   // Xbox 按键
   BUTTON_INDEX: {
     A: 0,
-
     B: 1,
+    LB: 4,
+    RB: 5,
   },
 }
 
@@ -255,6 +262,10 @@ function handleDPad(gp: Gamepad, gs: GamepadState): void {
     a: gp.buttons[buttons.A]?.pressed || false,
 
     b: gp.buttons[buttons.B]?.pressed || false,
+
+    lb: gp.buttons[buttons.LB]?.pressed || false,
+
+    rb: gp.buttons[buttons.RB]?.pressed || false,
   }
 
   // 十字 ↑ 顶部
@@ -291,6 +302,22 @@ function handleDPad(gp: Gamepad, gs: GamepadState): void {
     toggleCatalog()
   }
 
+  // LB 向上翻页
+
+  if (isPressedOnce(current.lb, gs.dpadPressed.lb)) {
+    log('🎮 LB 向上翻页')
+
+    scrollPage(-1)
+  }
+
+  // RB 向下翻页
+
+  if (isPressedOnce(current.rb, gs.dpadPressed.rb)) {
+    log('🎮 RB 向下翻页')
+
+    scrollPage(1)
+  }
+
   gs.dpadPressed = current
 }
 
@@ -360,4 +387,4 @@ export function initXboxGamepad(options?: XboxGamepadOptions): void {
 
     requestAnimationFrame(gamepadLoop)
   }
-}
+}