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

Tests unitaires de l'habillage du personnage : ancrage image/hitbox, repli entre clips et retournement horizontal (LOT-48). More...

#include <string>
#include <vector>
#include <gtest/gtest.h>
#include "Core/Ecs/Components/Sprite.h"
#include "Core/Ecs/Components/Transform.h"
#include "Core/Ecs/World.h"
#include "Core/Physics/PlayerSpawn.h"
#include "HMI/Graphics/ComposedScene.h"
#include "HMI/Graphics/PlayerSprite.h"
#include "HMI/Graphics/PlayerSpriteTag.h"
#include "HMI/Graphics/QuadRecorder.h"
#include "HMI/Graphics/RenderMode.h"

Functions

 TEST (PlayerSpriteTest, AncrageImageDeMemeTailleQueLaHitbox)
 Une image de la même taille que la hitbox produit un quad sans décalage.
 TEST (PlayerSpriteTest, ImagePlusGrandeCentreeEtAncreeParLeBas)
 Une image plus grande que la hitbox est centrée horizontalement et alignée par le bas : elle déborde symétriquement de chaque côté, jamais vers le bas.
 TEST (PlayerSpriteTest, ImagePlusGrandeNeDeplacePasLaHitbox)
 Une image plus grande que la hitbox ne déplace jamais celle-ci : le calcul du quad ne lit ni ne modifie la position simulée, seulement des tailles.
 TEST (PlayerSpriteTest, AncrageHorizontalSymetrique)
 L'ancrage est symétrique horizontalement : une image plus large que haute reste centrée, propriété nécessaire pour que le retournement (TACHE-03) n'ait besoin d'aucune correction de position.
 TEST (PlayerSpriteTest, ClipDeclareUtiliseTelQuel)
 Un clip déclaré est utilisé tel quel, sans repli.
 TEST (PlayerSpriteTest, ClipsLot48RepliSurLAtlasProcedural)
 Un clip absent retombe sur le plus proche déclaré (chaîne de repli documentée).
 TEST (PlayerSpriteTest, AucunClipDeclareRetombeSurIdle)
 Une chaîne de repli complète (aucun clip déclaré) retombe finalement sur "idle", jamais sur une chaîne vide ni une boucle infinie.
 TEST (PlayerSpriteTest, NomsProceduralsSontIdleRunJump)
 L'atlas procédural ne déclare que trois clips (idle/run/jump), seule source de vérité partagée avec hmi::PlayerClipKind.
 TEST (PlayerSpriteTest, ModePhysiqueIgnoreLeTag)
 En RenderMode::Physique, un personnage portant PlayerSpriteTag est dessiné par le chemin générique (Sprite::region + Transform::scale), sans effet du tag : non régression du mode diagnostic (LOT-48 TACHE-01).
 TEST (PlayerSpriteTest, ModeTextureAppliqueLeQuadDuTag)
 En RenderMode::Texture, le quad d'un personnage taggué vient du tag (taille et décalage), pas de Transform::scale.
 TEST (PlayerSpriteTest, ReplinProceduralLieLAtlasEnModeTexture)
 Sans spritesheet externe chargée (usesCharacterSheet == false), le tag lie l'atlas : repli procédural en RenderMode::Texture (LOT-48 AC#2).
 TEST (PlayerSpriteTest, RetournementEchangeUvSansDeplacerLeQuad)
 Le retournement horizontal échange les coordonnées de texture u0/u1, sans modifier la position ni la taille du quad (ancrage symétrique, LOT-48 TACHE-03).

Detailed Description

Tests unitaires de l'habillage du personnage : ancrage image/hitbox, repli entre clips et retournement horizontal (LOT-48).

Function Documentation

◆ TEST() [1/12]

TEST ( PlayerSpriteTest ,
AncrageHorizontalSymetrique  )

L'ancrage est symétrique horizontalement : une image plus large que haute reste centrée, propriété nécessaire pour que le retournement (TACHE-03) n'ait besoin d'aucune correction de position.

Cas de test : L'ancrage horizontal est symetrique (prealable au retournement).
Categorie : Unitaire · Player Sprite
Criticite : Majeur
Etapes :
1. Calculer le quad d'une image plus large que la hitbox.
Resultat attendu : Le debord a gauche egale le debord a droite.

◆ TEST() [2/12]

TEST ( PlayerSpriteTest ,
AncrageImageDeMemeTailleQueLaHitbox  )

Une image de la même taille que la hitbox produit un quad sans décalage.

Cas de test : Image de la taille de la hitbox : quad sans decalage.
Categorie : Unitaire · Player Sprite
Criticite : Majeur
Etapes :
1. Calculer le quad pour une image 16x16 px (1x1 unite) et une hitbox 1x1 unite.
Resultat attendu : La taille du quad vaut 1x1 unite (16 px = 1 unite), decalage nul (hitbox et image de meme taille : l'ancrage centre-bas coincide avec le coin haut-gauche).

◆ TEST() [3/12]

TEST ( PlayerSpriteTest ,
AucunClipDeclareRetombeSurIdle  )

Une chaîne de repli complète (aucun clip déclaré) retombe finalement sur "idle", jamais sur une chaîne vide ni une boucle infinie.

Cas de test : Aucun clip declare : repli final sur idle.
Categorie : Unitaire · Player Sprite
Criticite : Mineur
Etapes :
1. Resoudre "dash" dans un jeu totalement vide.
Resultat attendu : Le nom resolu est "idle".

◆ TEST() [4/12]

TEST ( PlayerSpriteTest ,
ClipDeclareUtiliseTelQuel  )

Un clip déclaré est utilisé tel quel, sans repli.

Cas de test : Un clip declare est utilise tel quel.
Categorie : Unitaire · Player Sprite
Criticite : Majeur
Etapes :
1. Resoudre "run" dans un jeu qui le declare.
Resultat attendu : Le nom resolu est "run".

◆ TEST() [5/12]

TEST ( PlayerSpriteTest ,
ClipsLot48RepliSurLAtlasProcedural  )

Un clip absent retombe sur le plus proche déclaré (chaîne de repli documentée).

Cas de test : Chute/atterrissage/glissade/dash retombent sur le clip le plus proche.
Categorie : Unitaire · Player Sprite
Criticite : Critique
Etapes :
1. Resoudre fall/land/wallslide/dash dans le jeu procedural (idle/run/jump seulement).
Resultat attendu : fall -> jump, land -> idle, wallslide -> jump, dash -> run.

◆ TEST() [6/12]

TEST ( PlayerSpriteTest ,
ImagePlusGrandeCentreeEtAncreeParLeBas  )

Une image plus grande que la hitbox est centrée horizontalement et alignée par le bas : elle déborde symétriquement de chaque côté, jamais vers le bas.

Cas de test : Image plus grande que la hitbox : centree horizontalement, alignee par le bas.
Categorie : Unitaire · Player Sprite
Criticite : Critique
Etapes :
1. Calculer le quad pour une image 32x32 px et la hitbox reelle du personnage (core::playerSize()).
Resultat attendu : Le decalage horizontal est negatif de la moitie du surplus de largeur ; le bas de l'image (offset.y + size.y) coincide avec le bas de la hitbox (hitboxSize.y).

◆ TEST() [7/12]

TEST ( PlayerSpriteTest ,
ImagePlusGrandeNeDeplacePasLaHitbox  )

Une image plus grande que la hitbox ne déplace jamais celle-ci : le calcul du quad ne lit ni ne modifie la position simulée, seulement des tailles.

Cas de test : Le calcul du quad ne modifie jamais la hitbox (fonction pure).
Categorie : Unitaire · Player Sprite
Criticite : Critique
Etapes :
1. Calculer le quad pour plusieurs tailles d'image, avec la meme hitbox.
Resultat attendu : hitboxSize n'est jamais lu autrement qu'en entree : deux tailles d'image differentes ne changent pas hitboxSize (verification par construction, cf. signature pure de la fonction).

◆ TEST() [8/12]

TEST ( PlayerSpriteTest ,
ModePhysiqueIgnoreLeTag  )

En RenderMode::Physique, un personnage portant PlayerSpriteTag est dessiné par le chemin générique (Sprite::region + Transform::scale), sans effet du tag : non régression du mode diagnostic (LOT-48 TACHE-01).

Cas de test : RenderMode::Physique ignore PlayerSpriteTag.
Categorie : Unitaire · Player Sprite
Criticite : Critique
Etapes :
1. Composer un personnage taggue en RenderMode::Physique.
Resultat attendu : Le quad soumis vient de la region du sprite et de l'echelle du transform (0,4x0,8 unite), pas du tag.

◆ TEST() [9/12]

TEST ( PlayerSpriteTest ,
ModeTextureAppliqueLeQuadDuTag  )

En RenderMode::Texture, le quad d'un personnage taggué vient du tag (taille et décalage), pas de Transform::scale.

Cas de test : RenderMode::Texture applique le quad du tag.
Categorie : Unitaire · Player Sprite
Criticite : Critique
Etapes :
1. Composer un personnage taggue (quad plus grand que la hitbox) en RenderMode::Texture.
Resultat attendu : Le quad soumis est decale/dimensionne selon le tag, a la position Transform + decalage.

◆ TEST() [10/12]

TEST ( PlayerSpriteTest ,
NomsProceduralsSontIdleRunJump  )

L'atlas procédural ne déclare que trois clips (idle/run/jump), seule source de vérité partagée avec hmi::PlayerClipKind.

Cas de test : L'atlas procedural ne declare que idle/run/jump.
Categorie : Unitaire · Player Sprite
Criticite : Mineur
Etapes :
1. Lire proceduralPlayerClipNames().
Resultat attendu : Exactement {"idle", "run", "jump"}.

◆ TEST() [11/12]

TEST ( PlayerSpriteTest ,
ReplinProceduralLieLAtlasEnModeTexture  )

Sans spritesheet externe chargée (usesCharacterSheet == false), le tag lie l'atlas : repli procédural en RenderMode::Texture (LOT-48 AC#2).

Cas de test : Sans spritesheet, RenderMode::Texture lie l'atlas.
Categorie : Unitaire · Player Sprite
Criticite : Majeur
Etapes :
1. Composer un personnage taggue avec usesCharacterSheet=false.
Resultat attendu : La texture liee est l'atlas, pas la spritesheet.

◆ TEST() [12/12]

TEST ( PlayerSpriteTest ,
RetournementEchangeUvSansDeplacerLeQuad  )

Le retournement horizontal échange les coordonnées de texture u0/u1, sans modifier la position ni la taille du quad (ancrage symétrique, LOT-48 TACHE-03).

Cas de test : Le retournement echange u0/u1 sans deplacer le quad.
Categorie : Unitaire · Player Sprite
Criticite : Critique
Etapes :
1. Composer le meme personnage, flipHorizontal=false puis true.
Resultat attendu : u0 et u1 sont echanges ; x/y/width/height identiques dans les deux cas.