JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
test_screen_shake.cpp File Reference

Tests unitaires de la secousse d'écran (LOT-53 TACHE-03, EX-REN-008). More...

#include <gtest/gtest.h>
#include "Core/Math/Vector2.h"
#include "HMI/Graphics/Camera2D.h"

Functions

 TEST (ScreenShakeTest, EtatParDefautAucunDecalage)
 Une secousse jamais déclenchée (état par défaut) n'a aucun décalage.
 TEST (ScreenShakeTest, DecroitLineairementJusquAZeroALaDureePrevue)
 Le décalage décroît linéairement de l'amplitude à zéro sur la durée prévue, et reste nul une fois la durée écoulée (jamais avant, jamais après).
 TEST (ScreenShakeTest, DecalageArrondiAuPixelEntier)
 Le décalage est arrondi au pixel écran entier (EX-ARCH-022), même quand l'amplitude et la fraction de durée écoulée produisent une valeur fractionnaire.
 TEST (ScreenShakeTest, AucunDecalageHorizontal)
 La secousse ne décale jamais l'axe horizontal (discrétion, cf.
 TEST (ScreenShakeTest, NeModifieNiLeCentreNiLeCadrageVisible)
 La secousse d'écran ne modifie jamais le centre ni le cadrage visible de la caméra : setShakeOffsetPixels n'affecte que la projection de rendu, jamais _center, donc ne peut structurellement pas provoquer de bascule de salle (pilotée par la position du personnage, pas par la caméra) ni fausser le culling.

Detailed Description

Tests unitaires de la secousse d'écran (LOT-53 TACHE-03, EX-REN-008).

Function Documentation

◆ TEST() [1/5]

TEST ( ScreenShakeTest ,
AucunDecalageHorizontal  )

La secousse ne décale jamais l'axe horizontal (discrétion, cf.

epic.md). Cas de test : Aucun décalage horizontal.
Categorie : Unitaire · Secousse d'écran
Criticite : Mineur
Etapes :
1. Déclencher une secousse.
2. Lire le décalage à plusieurs instants.
Resultat attendu : offset.x == 0 en toute circonstance.

◆ TEST() [2/5]

TEST ( ScreenShakeTest ,
DecalageArrondiAuPixelEntier  )

Le décalage est arrondi au pixel écran entier (EX-ARCH-022), même quand l'amplitude et la fraction de durée écoulée produisent une valeur fractionnaire.

Cas de test : Décalage arrondi au pixel entier.
Categorie : Unitaire · Secousse d'écran
Criticite : Majeur
Etapes :
1. Déclencher une secousse (amplitude 5, durée 0,3 s).
2. Avancer d'un tiers de la durée (décalage brut 3,33).
Resultat attendu : Le décalage lu est l'entier arrondi (3), pas la valeur brute.

◆ TEST() [3/5]

TEST ( ScreenShakeTest ,
DecroitLineairementJusquAZeroALaDureePrevue  )

Le décalage décroît linéairement de l'amplitude à zéro sur la durée prévue, et reste nul une fois la durée écoulée (jamais avant, jamais après).

Cas de test : Décroissance jusqu'à zéro dans la durée prévue.
Categorie : Unitaire · Secousse d'écran
Criticite : Critique
Etapes :
1. Déclencher une secousse (amplitude 4, durée 0,2 s).
2. Lire le décalage au déclenchement, à mi-durée, à la durée exacte, puis bien au-delà.
Resultat attendu : Amplitude pleine au déclenchement ; moitié à mi-durée ; nul à la durée exacte et au-delà (jamais négatif).

◆ TEST() [4/5]

TEST ( ScreenShakeTest ,
EtatParDefautAucunDecalage  )

Une secousse jamais déclenchée (état par défaut) n'a aucun décalage.

Cas de test : État par défaut : aucun décalage.
Categorie : Unitaire · Secousse d'écran
Criticite : Majeur
Etapes :
1. Construire un hmi::ScreenShakeState par défaut.
2. Lire son décalage.
Resultat attendu : Décalage nul sur les deux axes.

◆ TEST() [5/5]

TEST ( ScreenShakeTest ,
NeModifieNiLeCentreNiLeCadrageVisible  )

La secousse d'écran ne modifie jamais le centre ni le cadrage visible de la caméra : setShakeOffsetPixels n'affecte que la projection de rendu, jamais _center, donc ne peut structurellement pas provoquer de bascule de salle (pilotée par la position du personnage, pas par la caméra) ni fausser le culling.

Cas de test : La secousse ne modifie ni le centre ni le cadrage visible.
Categorie : Unitaire · Secousse d'écran
Criticite : Critique
Etapes :
1. Poser un centre/zoom sur une caméra, noter center()/visibleBounds().

  1. Appliquer un décalage de secousse non nul.
    Resultat attendu : center(), zoom() et visibleBounds() restent strictement inchangés.