JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
hmi::InputState Class Reference

É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.

Detailed Description

É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 :

  1. beginFrame() recopie l'état courant vers l'état précédent ;
  2. la couche de capture (Window) applique les événements via onKeyDown/onKeyUp/… ;
  3. la logique lit keyPressed/keyReleased/keyDown et les équivalents souris.

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.

Constructor & Destructor Documentation

◆ InputState()

hmi::InputState::InputState ( )
default

Construit un état vide (aucune touche ni bouton enfoncé, souris à l'origine).

Member Function Documentation

◆ beginFrame()

void hmi::InputState::beginFrame ( )
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.

◆ gamepadButtonDown()

bool hmi::InputState::gamepadButtonDown ( GamepadButton button) const
nodiscardnoexcept
Returns
true si button (piste manette brute) est enfoncé à cette frame.

◆ gamepadButtonPressed()

bool hmi::InputState::gamepadButtonPressed ( GamepadButton button) const
nodiscardnoexcept
Returns
true si button (piste manette brute) vient d'être enfoncé cette frame.

◆ gamepadButtonReleased()

bool hmi::InputState::gamepadButtonReleased ( GamepadButton button) const
nodiscardnoexcept
Returns
true si button (piste manette brute) vient d'être relâché cette frame.

◆ gamepadConnected()

bool hmi::InputState::gamepadConnected ( ) const
nodiscardnoexcept
Returns
true si une manette était connectée à la dernière frame sondée.

◆ keyDown()

bool hmi::InputState::keyDown ( Key key) const
nodiscardnoexcept
Returns
true si key est enfoncée à cette frame (maintenue ou vient d'être pressée).

◆ keyPressed()

bool hmi::InputState::keyPressed ( Key key) const
nodiscardnoexcept
Returns
true si key vient d'être pressée cette frame (front montant).

◆ keyReleased()

bool hmi::InputState::keyReleased ( Key key) const
nodiscardnoexcept
Returns
true si key vient d'être relâchée cette frame (front descendant).

◆ mouseButtonDown()

bool hmi::InputState::mouseButtonDown ( MouseButton button) const
nodiscardnoexcept
Returns
true si button est enfoncé à cette frame.

◆ mouseButtonPressed()

bool hmi::InputState::mouseButtonPressed ( MouseButton button) const
nodiscardnoexcept
Returns
true si button vient d'être cliqué cette frame (front montant).

◆ mouseButtonReleased()

bool hmi::InputState::mouseButtonReleased ( MouseButton button) const
nodiscardnoexcept
Returns
true si button vient d'être relâché cette frame (front descendant).

◆ mouseX()

int hmi::InputState::mouseX ( ) const
nodiscardnoexcept
Returns
Abscisse de la souris, en pixels de la zone client.

◆ mouseY()

int hmi::InputState::mouseY ( ) const
nodiscardnoexcept
Returns
Ordonnée de la souris, en pixels de la zone client.

◆ onCharTyped()

void hmi::InputState::onCharTyped ( wchar_t character)

Enregistre un caractère tapé pour la frame courante (WM_CHAR).

Parameters
characterCaractère déjà traduit selon la disposition clavier active.

◆ onGamepadButtonDown()

void hmi::InputState::onGamepadButtonDown ( GamepadButton button)
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).

◆ onGamepadButtonUp()

void hmi::InputState::onGamepadButtonUp ( GamepadButton button)
noexcept

Marque button comme relâché dans l'état courant (voir onGamepadButtonDown).

◆ onGamepadKeyDown()

void hmi::InputState::onGamepadKeyDown ( Key key)
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.

◆ onGamepadKeyUp()

void hmi::InputState::onGamepadKeyUp ( Key key)
noexcept

Marque key comme relâchée dans l'état courant, source manette (voir onGamepadKeyDown).

◆ onKeyDown()

void hmi::InputState::onKeyDown ( Key key)
noexcept

Marque key comme enfoncée dans l'état courant (source clavier).

◆ onKeyUp()

void hmi::InputState::onKeyUp ( Key key)
noexcept

Marque key comme relâchée dans l'état courant (source clavier).

◆ onMouseButtonDown()

void hmi::InputState::onMouseButtonDown ( MouseButton button)
noexcept

Marque button comme enfoncé dans l'état courant.

◆ onMouseButtonUp()

void hmi::InputState::onMouseButtonUp ( MouseButton button)
noexcept

Marque button comme relâché dans l'état courant.

◆ onMouseMove()

void hmi::InputState::onMouseMove ( int x,
int y )
noexcept

Met à jour la position de la souris.

Parameters
xAbscisse en pixels de la zone client.
yOrdonnée en pixels de la zone client.

◆ onMouseWheel()

void hmi::InputState::onMouseWheel ( int delta)
noexcept

Accumule un incrément de molette pour la frame courante.

Parameters
deltaIncrément signé (positif = molette vers l'avant), en unités natives Win32 (WHEEL_DELTA = 120 par cran) ; l'appelant convertit selon son besoin.

◆ releaseAll()

void hmi::InputState::releaseAll ( )
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).

◆ setGamepadConnected()

void hmi::InputState::setGamepadConnected ( bool connected)
noexcept

Déclare l'état de connexion de la manette pour cette frame (EX-CTRL-002).

Parameters
connectedVrai si XInputGetState a réussi ce pas-ci (voir Window::pollGamepad).

◆ typedCharacters()

const std::vector< wchar_t > & hmi::InputState::typedCharacters ( ) const
nodiscardnoexcept

Caractères tapés depuis le dernier beginFrame(), dans leur ordre de saisie.

Returns
Une file vide si rien n'a été tapé depuis la frame précédente.

◆ wheelDelta()

int hmi::InputState::wheelDelta ( ) const
nodiscardnoexcept

Somme des incréments de molette accumulés depuis le dernier beginFrame().

Returns
Positif si la molette a tourné vers l'avant depuis la frame précédente, négatif vers l'arrière, zéro si elle n'a pas bougé.

Member Data Documentation

◆ _buttonsCurrent

std::array<bool, BUTTON_COUNT> hmi::InputState::_buttonsCurrent {}
private

◆ _buttonsPrevious

std::array<bool, BUTTON_COUNT> hmi::InputState::_buttonsPrevious {}
private

◆ _gamepadButtonsCurrent

std::array<bool, GAMEPAD_BUTTON_COUNT> hmi::InputState::_gamepadButtonsCurrent {}
private

Piste manette brute (GamepadButton), indépendante de la fusion Key ci-dessus.

◆ _gamepadButtonsPrevious

std::array<bool, GAMEPAD_BUTTON_COUNT> hmi::InputState::_gamepadButtonsPrevious {}
private

◆ _gamepadConnected

bool hmi::InputState::_gamepadConnected = false
private

◆ _gamepadCurrent

std::array<bool, KEY_COUNT> hmi::InputState::_gamepadCurrent {}
private

Source manette, distincte du clavier.

◆ _gamepadPrevious

std::array<bool, KEY_COUNT> hmi::InputState::_gamepadPrevious {}
private

◆ _keysCurrent

std::array<bool, KEY_COUNT> hmi::InputState::_keysCurrent {}
private

◆ _keysPrevious

std::array<bool, KEY_COUNT> hmi::InputState::_keysPrevious {}
private

◆ _mouseX

int hmi::InputState::_mouseX = 0
private

◆ _mouseY

int hmi::InputState::_mouseY = 0
private

◆ _typedCharacters

std::vector<wchar_t> hmi::InputState::_typedCharacters
private

Vidée à chaque beginFrame().

◆ _wheelDelta

int hmi::InputState::_wheelDelta = 0
private

Remis à zéro à chaque beginFrame().

◆ BUTTON_COUNT

std::size_t hmi::InputState::BUTTON_COUNT = static_cast<std::size_t>(MouseButton::Count)
staticconstexprprivate

Nombre de boutons de souris suivis.

◆ KEY_COUNT

std::size_t hmi::InputState::KEY_COUNT = 256
staticconstexprprivate

Nombre de codes de touches suivis (couvre l'ensemble des codes virtuels Win32).


The documentation for this class was generated from the following files:
  • /home/runner/work/JustAnotherDnDGame/JustAnotherDnDGame/Source/HMI/Input/InputState.h
  • /home/runner/work/JustAnotherDnDGame/JustAnotherDnDGame/Source/HMI/Input/InputState.cpp