|
JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
|
État des entrées d'une frame, avec détection des fronts (pressée / relâchée). More...
#include <InputState.h>
Public Member Functions | |
| InputState ()=default | |
| Construit un état vide (aucune touche ni bouton enfoncé, souris à l'origine). | |
| void | beginFrame () noexcept |
| Ouvre une nouvelle frame : recopie l'état courant vers l'état précédent. | |
| void | releaseAll () noexcept |
| Relâche toutes les entrées maintenues (clavier, manette, souris), sans front. | |
| void | onKeyDown (Key key) noexcept |
Marque key comme enfoncée dans l'état courant (source clavier). | |
| void | onKeyUp (Key key) noexcept |
Marque key comme relâchée dans l'état courant (source clavier). | |
| void | onGamepadKeyDown (Key key) noexcept |
Marque key comme enfoncée dans l'état courant, source manette. | |
| void | onGamepadKeyUp (Key key) noexcept |
Marque key comme relâchée dans l'état courant, source manette (voir onGamepadKeyDown). | |
| void | onGamepadButtonDown (GamepadButton button) noexcept |
Marque button comme enfoncé dans l'état courant (piste manette brute). | |
| void | onGamepadButtonUp (GamepadButton button) noexcept |
Marque button comme relâché dans l'état courant (voir onGamepadButtonDown). | |
| void | onMouseMove (int x, int y) noexcept |
| Met à jour la position de la souris. | |
| void | onMouseButtonDown (MouseButton button) noexcept |
Marque button comme enfoncé dans l'état courant. | |
| void | onMouseButtonUp (MouseButton button) noexcept |
Marque button comme relâché dans l'état courant. | |
| void | onMouseWheel (int delta) noexcept |
| Accumule un incrément de molette pour la frame courante. | |
| void | onCharTyped (wchar_t character) |
| Enregistre un caractère tapé pour la frame courante (WM_CHAR). | |
| void | setGamepadConnected (bool connected) noexcept |
| Déclare l'état de connexion de la manette pour cette frame (EX-CTRL-002). | |
| bool | gamepadConnected () const noexcept |
| bool | keyDown (Key key) const noexcept |
| bool | keyPressed (Key key) const noexcept |
| bool | keyReleased (Key key) const noexcept |
| bool | gamepadButtonDown (GamepadButton button) const noexcept |
| bool | gamepadButtonPressed (GamepadButton button) const noexcept |
| bool | gamepadButtonReleased (GamepadButton button) const noexcept |
| int | mouseX () const noexcept |
| int | mouseY () const noexcept |
| bool | mouseButtonDown (MouseButton button) const noexcept |
| bool | mouseButtonPressed (MouseButton button) const noexcept |
| bool | mouseButtonReleased (MouseButton button) const noexcept |
| int | wheelDelta () const noexcept |
| Somme des incréments de molette accumulés depuis le dernier beginFrame(). | |
| const std::vector< wchar_t > & | typedCharacters () const noexcept |
| Caractères tapés depuis le dernier beginFrame(), dans leur ordre de saisie. | |
Private Attributes | |
| std::array< bool, KEY_COUNT > | _keysCurrent {} |
| std::array< bool, KEY_COUNT > | _keysPrevious {} |
| std::array< bool, KEY_COUNT > | _gamepadCurrent {} |
| Source manette, distincte du clavier. | |
| std::array< bool, KEY_COUNT > | _gamepadPrevious {} |
| std::array< bool, GAMEPAD_BUTTON_COUNT > | _gamepadButtonsCurrent {} |
| Piste manette brute (GamepadButton), indépendante de la fusion Key ci-dessus. | |
| std::array< bool, GAMEPAD_BUTTON_COUNT > | _gamepadButtonsPrevious {} |
| std::array< bool, BUTTON_COUNT > | _buttonsCurrent {} |
| std::array< bool, BUTTON_COUNT > | _buttonsPrevious {} |
| int | _mouseX = 0 |
| int | _mouseY = 0 |
| int | _wheelDelta = 0 |
| Remis à zéro à chaque beginFrame(). | |
| std::vector< wchar_t > | _typedCharacters |
| Vidée à chaque beginFrame(). | |
| bool | _gamepadConnected = false |
Static Private Attributes | |
| static constexpr std::size_t | KEY_COUNT = 256 |
| Nombre de codes de touches suivis (couvre l'ensemble des codes virtuels Win32). | |
| static constexpr std::size_t | BUTTON_COUNT = static_cast<std::size_t>(MouseButton::Count) |
| Nombre de boutons de souris suivis. | |
État des entrées d'une frame, avec détection des fronts (pressée / relâchée).
L'objet distingue, pour chaque touche et chaque bouton, l'état courant (enfoncé ou non) et l'état de la frame précédente, ce qui permet de déduire les fronts : pressée (« vient d'être enfoncée », EX-CTRL-011) et relâchée. Le cycle d'une frame est :
Manette (EX-CTRL-002) : une seconde source, indépendante du clavier, alimentée par onGamepadKeyDown/onGamepadKeyUp — le même Key peut être enfoncé par le clavier, la manette, ou les deux à la fois. keyDown/keyPressed/keyReleased combinent les deux sources (OU logique) ; la manette ne s'écrit jamais dans les tableaux clavier, pour ne jamais effacer une touche clavier réellement maintenue quand la manette relâche le bouton correspondant (voir Window::pollGamepad, LOT-20). Cette fusion en lecture, plutôt qu'une table d'actions logiques séparée, satisfait déjà EX-CTRL-010 (action dissociée de la touche physique) : le Key est l'action logique, quelle que soit sa source.
L'InputState est indépendant de toute fenêtre (aucune dépendance <Windows.h>, ni <Xinput.h>) : les événements peuvent être injectés directement, ce qui le rend testable en isolation (EX-NFR-010) — y compris la fusion manette, sans manette réelle. L'échantillonnage une fois par frame, en amont de la logique, satisfait EX-CTRL-021.
|
default |
Construit un état vide (aucune touche ni bouton enfoncé, souris à l'origine).
|
noexcept |
Ouvre une nouvelle frame : recopie l'état courant vers l'état précédent.
À appeler une fois par frame, avant d'appliquer les événements de la frame. Les fronts (keyPressed, keyReleased, …) se calculent ensuite par comparaison courant/précédent.
|
nodiscardnoexcept |
button (piste manette brute) est enfoncé à cette frame.
|
nodiscardnoexcept |
button (piste manette brute) vient d'être enfoncé cette frame.
|
nodiscardnoexcept |
button (piste manette brute) vient d'être relâché cette frame.
|
nodiscardnoexcept |
|
nodiscardnoexcept |
key est enfoncée à cette frame (maintenue ou vient d'être pressée).
|
nodiscardnoexcept |
key vient d'être pressée cette frame (front montant).
|
nodiscardnoexcept |
key vient d'être relâchée cette frame (front descendant).
|
nodiscardnoexcept |
button est enfoncé à cette frame.
|
nodiscardnoexcept |
button vient d'être cliqué cette frame (front montant).
|
nodiscardnoexcept |
button vient d'être relâché cette frame (front descendant).
|
nodiscardnoexcept |
|
nodiscardnoexcept |
| void hmi::InputState::onCharTyped | ( | wchar_t | character | ) |
Enregistre un caractère tapé pour la frame courante (WM_CHAR).
| character | Caractère déjà traduit selon la disposition clavier active. |
|
noexcept |
Marque button comme enfoncé dans l'état courant (piste manette brute).
Indépendante de onGamepadKeyDown/Up : celle-ci fusionne la manette dans l'espace des touches clavier (Key, utilisée par la navigation de menu, jamais remappable) ; celle-ci expose l'état de chaque bouton physique (GamepadButton) tel quel, pour les actions de jeu remappables via GamepadBindings (EX-CTRL-002, LOT-30).
|
noexcept |
Marque button comme relâché dans l'état courant (voir onGamepadButtonDown).
|
noexcept |
Marque key comme enfoncée dans l'état courant, source manette.
Écrit dans un tableau distinct du clavier (voir en-tête) : n'affecte jamais onKeyDown/onKeyUp. keyDown/keyPressed/keyReleased combinent les deux sources.
|
noexcept |
Marque key comme relâchée dans l'état courant, source manette (voir onGamepadKeyDown).
|
noexcept |
Marque key comme enfoncée dans l'état courant (source clavier).
|
noexcept |
Marque key comme relâchée dans l'état courant (source clavier).
|
noexcept |
Marque button comme enfoncé dans l'état courant.
|
noexcept |
Marque button comme relâché dans l'état courant.
|
noexcept |
Met à jour la position de la souris.
| x | Abscisse en pixels de la zone client. |
| y | Ordonnée en pixels de la zone client. |
|
noexcept |
Accumule un incrément de molette pour la frame courante.
| delta | Incrément signé (positif = molette vers l'avant), en unités natives Win32 (WHEEL_DELTA = 120 par cran) ; l'appelant convertit selon son besoin. |
|
noexcept |
Relâche toutes les entrées maintenues (clavier, manette, souris), sans front.
Remet à zéro l'état courant et l'état précédent des touches/boutons, si bien qu'aucun front (pressée/relâchée) n'est produit. À appeler quand la fenêtre perd le focus (WM_KILLFOCUS) : sans cela, une touche maintenue au moment d'un Alt+Tab ne reçoit jamais son WM_KEYUP et resterait « collée » (le personnage continuerait d'avancer au retour).
|
noexcept |
Déclare l'état de connexion de la manette pour cette frame (EX-CTRL-002).
| connected | Vrai si XInputGetState a réussi ce pas-ci (voir Window::pollGamepad). |
|
nodiscardnoexcept |
Caractères tapés depuis le dernier beginFrame(), dans leur ordre de saisie.
|
nodiscardnoexcept |
Somme des incréments de molette accumulés depuis le dernier beginFrame().
|
private |
|
private |
|
private |
Piste manette brute (GamepadButton), indépendante de la fusion Key ci-dessus.
|
private |
|
private |
|
private |
Source manette, distincte du clavier.
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
Vidée à chaque beginFrame().
|
private |
Remis à zéro à chaque beginFrame().
|
staticconstexprprivate |
Nombre de boutons de souris suivis.
|
staticconstexprprivate |
Nombre de codes de touches suivis (couvre l'ensemble des codes virtuels Win32).