Skip to content

Composables ​

Tous les composables doivent être appelés dans un contexte moteur actif (defineSystem(), engine.run(), ou un hook de cycle de vie de plugin). Tous lèvent GwenPluginNotFoundError si @gwenjs/input n'est pas enregistré.

Vue d'ensemble ​

ComposableRetourneDescription
useInput()InputServiceLe service d'entrée global.
useAction(ref, playerIndex?)ActionState<T>État par frame d'une action pour un joueur.
usePlayer(index?)PlayerInputGestionnaire d'entrée par joueur via son index.
useKeyboard()KeyboardDeviceÉtat brut du clavier.
useMouse()MouseDeviceÉtat brut de la souris (position, delta, boutons, molette).
useGamepad(slot?)GamepadDeviceÉtat brut des manettes.
useTouch()TouchDevicePoints de contact et état des contrôles virtuels.
useGyroscope()GyroDeviceOrientation et vitesse de rotation de l'appareil.
usePointer()PointerStatePointeur unifié souris + touch.
useInputRecorder()InputRecorderEnregistrer des sessions d'entrée.
useInputPlayback()InputPlaybackRejouer des sessions enregistrées.
forPlayers(count, factory)T[]Créer un élément par slot joueur.

useInput ​

ts
function useInput(): InputService

Retourne l'InputService partagé. Utilisez-le quand vous avez besoin du service complet — tableau des joueurs, périphériques, recorder, playback ou profils d'accessibilité.

ts
const input = useInput()
const p2 = input.player(1)
const snapshot = input.recorder.export()

useAction ​

ts
function useAction<T extends ActionType>(
  ref: ActionRef<T>,
  playerIndex?: number
): ActionState<T>

Retourne l'état par frame d'une action pour un joueur donné. Le composable le plus fréquemment utilisé.

ParamètreTypeDéfautDescription
refActionRef<T>—La référence d'action.
playerIndexnumber0Index du slot joueur.
ts
const jump = useAction(Jump)       // ButtonActionState pour le joueur 0
const move = useAction(Move, 1)    // Axis2DActionState pour le joueur 1

usePlayer ​

ts
function usePlayer(index?: number): PlayerInput

Retourne le PlayerInput pour le slot donné. Raccourci pour useInput().player(index).

ParamètreTypeDéfautDescription
indexnumber0Slot joueur (base 0).
ts
const p2 = usePlayer(1)
p2.activateContext('vehicle')

useKeyboard ​

ts
function useKeyboard(): KeyboardDevice

Retourne le KeyboardDevice brut. Préférez useAction() pour la logique de jeu. Utilisez ceci pour un accès d'échappatoire aux états de touches bruts.

ts
const kb = useKeyboard()
if (kb.isJustPressed('Space')) { ... }

useMouse ​

ts
function useMouse(): MouseDevice

Retourne le MouseDevice brut. Préférez useAction() ou usePointer() pour la logique de jeu.

ts
const mouse = useMouse()
console.log(mouse.position.x, mouse.position.y)
console.log(mouse.delta.x, mouse.delta.y)

useGamepad ​

ts
function useGamepad(slot?: number): GamepadDevice

Retourne le GamepadDevice. Toutes les manettes partagent actuellement une instance ; passez l'index de la manette à chaque méthode.

ParamètreTypeDéfautDescription
slotnumber0Réservé pour l'isolation future par slot.
ts
const gp = useGamepad()
if (gp.isButtonJustPressed(0, 0)) { ... }  // pad 0, bouton 0

useTouch ​

ts
function useTouch(): TouchDevice

Retourne le TouchDevice pour lire les points de contact et l'état des contrôles virtuels.

ts
const touch = useTouch()
if (touch.isTouching()) {
  for (const point of touch.points.values()) {
    console.log(point.position, point.phase)
  }
}

useGyroscope ​

ts
function useGyroscope(): GyroDevice

Retourne le GyroDevice. Vérifiez gyro.isAvailable avant de lire les valeurs d'orientation.

ts
const gyro = useGyroscope()
if (gyro.isAvailable) {
  console.log(gyro.orientation.roll, gyro.orientation.pitch)
}

usePointer ​

ts
function usePointer(): PointerState

État de pointeur unifié — abstrait souris et premier touch en une seule interface. Le touch a la priorité sur la souris quand un point de contact est actif.

Retourne PointerState :

ChampTypeDescription
position{ x: number; y: number }Position du pointeur relative au canvas.
delta{ x: number; y: number }Déplacement cette frame.
isPressedbooleantrue tant que le bouton / touch est maintenu.
isJustPressedbooleantrue sur le premier frame d'un appui.
isJustReleasedbooleantrue sur le premier frame après le relâchement.
type'mouse' | 'touch'Quel périphérique est actuellement actif.
ts
const pointer = usePointer()
if (pointer.isJustPressed) {
  handleTap(pointer.position)
}

useInputRecorder ​

ts
function useInputRecorder(): InputRecorder

Retourne l'InputRecorder du plugin actif. Raccourci pour useInput().recorder.

ts
const recorder = useInputRecorder()
recorder.start()
// … jouer le scénario …
recorder.stop()
const rec = recorder.export()

useInputPlayback ​

ts
function useInputPlayback(): InputPlayback

Retourne l'InputPlayback du plugin actif. Raccourci pour useInput().playback.

ts
const playback = useInputPlayback()
playback.load(myRecording)
playback.play()

forPlayers ​

ts
function forPlayers<T>(count: number, factory: (playerIndex: number) => T): T[]

Crée un élément par joueur en appelant factory(playerIndex) pour chaque index dans [0, count). Utile pour enregistrer des systèmes paramétrés sans duplication.

ParamètreTypeDescription
countnumberNombre de joueurs. Doit correspondre à InputPlugin({ players: N }).
factory(playerIndex: number) => TAppelée une fois par slot joueur.
ts
import { forPlayers } from '@gwenjs/input'

export default defineConfig({
  systems: [
    ...forPlayers(2, (i) => movementSystem(i)),
    ...forPlayers(2, (i) => cameraSystem(i)),
  ],
})