Gamepad
This service is rc and may change in the future.
A two axis directional gamepad with optional buttons.
import { Gamepad } from "@devicescript/core"
const gamepad = new Gamepad()
Registers
axes
An array representing the controls with axes present on the device (e.g. analog thumb sticks),
as [x, y]. Each entry in the array is a floating point value in the range -1.0 – 1.0, representing the axis position from the lowest value (-1.0) to the highest value (1.0).
- type:
ClientRegister<{ x: number; y: number }>(packing formati1.15 i1.15)
import { Gamepad } from "@devicescript/core"
const gamepad = new Gamepad()
// ...
gamepad.axes.subscribe(async ({ x, y }) => {
console.log({ x, y })
})
button
A client register for the requested button or combination of buttons. The value is true if the button is pressed, false otherwise.
- type:
ClientRegister<GamepadButtons>
import { Gamepad, GamepadButtons } from "@devicescript/core"
const gamepad = new Gamepad()
// ...
gamepad.button(GamepadButtons.Down).subscribe(async pressed => {
console.log({ pressed })
})
reading
If the gamepad is analog, the directional buttons should be "simulated", based on gamepad position
(Left is { x = -1, y = 0 }, Up is { x = 0, y = -1}).
If the gamepad is digital, then each direction will read as either -1, 0, or 1 (in fixed representation).
The primary button on the gamepad is A.
type:
Register<any[]>(packing formatu32 i1.15 i1.15)track incoming values
import { Gamepad } from "@devicescript/core"
const gamepad = new Gamepad()
// ...
gamepad.reading.subscribe(async (value) => {
...
})
write and read will block until a server is bound to the client.
variant
The type of physical gamepad.
type:
Register<number>(packing formatu8)optional: this register may not be implemented
constant: the register value will not change (until the next reset)
read only
import { Gamepad } from "@devicescript/core"
const gamepad = new Gamepad()
// ...
const value = await gamepad.variant.read()
write and read will block until a server is bound to the client.
buttonsAvailable
Indicates a bitmask of the buttons that are mounted on the gamepad.
If the Left/Up/Right/Down buttons are marked as available here, the gamepad is digital.
Even when marked as not available, they will still be simulated based on the analog gamepad.
type:
Register<number>(packing formatu32)constant: the register value will not change (until the next reset)
read only
import { Gamepad } from "@devicescript/core"
const gamepad = new Gamepad()
// ...
const value = await gamepad.buttonsAvailable.read()
write and read will block until a server is bound to the client.
Events
change
Emitted whenever the state of buttons changes.
gamepad.change.subscribe(() => {
})