input¶
This module allows you to read user input from the GBA’s keypad.
Example:
import natu/[video, irq, bios, input]
dispcnt.init()
irq.enable(iiVBlank)
while true:
VBlankIntrWait()
# Update key state (call this once per frame.)
keyPoll()
# Change backdrop color when the player presses "A".
if keyIsDown(kiA):
bgColorMem[0] = rgb5(15, 31, 20)
Types¶
- type KeyIndex = enum¶
Bit positions for
keyinputandkeycnt. Used with input functions such askeyIsDown.kiA– A buttonkiB– B buttonkiSelect– Select buttonkiStart– Start buttonkiRight– Right D-padkiLeft– Left D-padkiUp– Up D-padkiDown– Down D-padkiR– Right shoulder buttonkiL– Left shoulder button
- type KeyState = set[KeyIndex]¶
- type KeyInput = object¶
Field
Type
invertedStateKeyState
- type KeyIntrOp = enum¶
opOr– Raise interrupt if any of the specified keys are pressed.opAnd– Raise interrupt if all specified keys are pressed at the same time.
- type KeyCnt = object¶
Field
Type
Description
keysKeyState The set of keys that fire the keypad interrupt.
_uint16 irqbool Enables the keypad interrupt.
opKeyIntrOp The condition under which the interrupt will be raised (
opOrvsopAnd)
Globals¶
- const allKeys: KeyState = {kiA..kiL}¶
- var keyCurrState: KeyState¶
The set of keys that are currently down on this frame.
- var keyPrevState: KeyState¶
The set of keys that were down on the previous frame.
Basic Procs¶
- proc keyPoll()¶
Should be called once per frame to update the current key state.
- proc keysDown(): KeyState¶
Get all the keys which are currently down.
- proc keysUp(): KeyState¶
Get all the keys which are currently up.
- proc keysHit(): KeyState¶
Get all the keys which were just pressed on this frame.
- proc keysReleased(): KeyState¶
Get all the keys which were previously pressed but are no longer pressed.
- proc keyIsDown(k: KeyIndex): bool¶
True if the given key is currently down.
- proc keyIsUp(k: KeyIndex): bool¶
True if the given key is currently up.
- proc keyWasDown(k: KeyIndex): bool¶
True if the given key was previously down.
- proc keyWasUp(k: KeyIndex): bool¶
True if the given key was previously up.
- proc keyHit(k: KeyIndex): bool¶
True if the given key was just pressed on this frame.
- proc keyReleased(k: KeyIndex): bool¶
True if the given key was just released on this frame.
- proc anyKeyHit(s: KeyState): bool¶
True if any of the given keys were just pressed on this frame.
Repeated Keys¶
- proc keysRepeated(): KeyState¶
Get the keys that just repeated or were newly pressed.
- proc keyRepeated(k: KeyIndex): bool¶
Check if a key just repeated or was newly pressed.
- proc setKeyRepeatMask(mask: KeyState)¶
Set which keys will be considered for repeats.
- proc setKeyRepeatDelay(delay: uint8)¶
Set the initial delay from when a key is first pressed to when it starts repeating.
If keys are already repeating, this will delay them again.
- proc setKeyRepeatPeriod(period: uint8)¶
Set the interval between repeated keys.
I/O Registers¶
- let keyinput: KeyInput¶
Keypad status register (read only).
This can be used to obtain the current state (up or down) of all the buttons on the GBA. Note that the state is inverted.
It is generally preferable to call
keyPolland use the various input procedures (keyIsDownetc.) rather than reading this directly.
- proc state(keyinput: KeyInput): KeyState¶
Flip the
keyinputregister to obtain the set of keys which are currently pressed.