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

Simule et rend un seul niveau (déjà validé, en mémoire), indépendamment de toute infrastructure d'écran. More...

#include <GameSession.h>

Inheritance diagram for hmi::GameSession:
hmi::IGameModePasses

Public Member Functions

 GameSession (SpriteBatch &batch, const TextureAtlas &atlas, TextureCache &cache, int viewportWidth, int viewportHeight, core::Level level, const GameKeyBindings &gameBindings, const GamepadBindings &gamepadBindings, const BitmapFont &font, const Localization *localization=nullptr)
 Construit la session et charge la scène du niveau donné.
core::LevelOutcome update (const InputState &input, float fixedDelta)
 Simule le niveau d'un pas fixe (mécanismes, blocs, physique, animation, dangers).
core::LevelOutcome update (const core::PlayerInput &input, float fixedDelta)
 Simule le niveau d'un pas fixe à partir d'une intention déjà résolue, sans passer par hmi::InputState/toPlayerInput (LOT-ANNEXE-18, TACHE-01) : cœur de simulation partagé, utilisé aussi bien par le jeu réel (via update(const InputState&, float), qui ne fait plus que traduire puis déléguer ici) que par la lecture d'un rejeu (hmi::ReplayPlayback), sans aucune divergence possible entre les deux chemins.
void reload ()
 Recharge le niveau courant (personnage à l'entrée, mécanismes et budgets remis).
void render (int viewportWidth, int viewportHeight, RenderMode mode, float interpolationAlpha)
 Dessine la scène du niveau (rien si le chargement a échoué).
void setSkins (const SkinCatalog *skins, std::string skinSet={})
 Désigne le catalogue de skins et le jeu à utiliser en mode Texture (LOT-42).
bool loaded () const
const std::string & loadError () const
const std::vector< GameEvent > & lastStepEvents () const noexcept
 Événements de jeu détectés lors du dernier appel à update() (LOT-60 TACHE-03).
SceneStatistics renderStatistics () const noexcept
void setGameMode (std::unique_ptr< IGameMode > mode)
 Remplace le mode de jeu courant (EX-ARCH-002).
const IGameModegameMode () const noexcept

Private Member Functions

void snapshotPreviousPositions () override
 Fige la position courante de chaque entité mobile comme sa position « précédente », avant que le pas ne la modifie (interpolation de rendu, EX-ARCH-031).
void advanceParticles (float fixedDelta) override
 Avance les particules déjà émises (LOT-53), avant que ce pas n'en émette de nouvelles.
void advanceScreenShake (float fixedDelta) override
 Fait décroître la secousse d'écran courante (LOT-53).
void moveCharacter (const core::PlayerInput &input, float fixedDelta) override
 Déplace le personnage selon l'intention de ce pas.
void advanceAnimations (float fixedDelta) override
 Avance les animations d'entités et l'horloge des tuiles animées (EX-REN-012).
void updateCamera (float fixedDelta) override
 Recadre la caméra selon le mode de cadrage résolu du niveau (EX-LVL-006).
void updateMechanisms (const core::PlayerInput &input) override
 Résout les mécanismes à partir de la boîte du personnage et de son intention.
void detectEvents () override
 Relève les transitions du pas (personnage, mécanismes) en événements de jeu (LOT-60).
void updateMechanismVisuals (float fixedDelta) override
 Projette l'état logique des mécanismes sur leur apparence (LOT-47, EX-REN-006).
core::LevelOutcome evaluateOutcome () override
void onLevelLost () override
 Conséquences d'un échec : éclatement, secousse, puis rechargement du niveau.
core::Aabb playerBox ()
void loadLevel (core::Level level)
void spawnPlayer (core::GridPosition entry)
void applyMechanismVisual (core::Entity entity, bool active, MechanismVisualState &state, const SceneTextures &textures, float fixedDelta)
 Applique la correspondance état → clip à une entité-tuile de mécanisme : résout l'asset effectivement lié (via le point de résolution unique hmi::resolveTileAppearance, jamais dupliqué ici), avance son horloge propre et écrit l'image courante sur son TileSkinTag (LOT-47 TACHE-02).
void refreshMechanismDiagnosticTint (RenderMode mode)
 Modulation d'opacité de diagnostic, réservée au mode Physique (LOT-47 TACHE-03) : ce mode n'a pas d'assets animés et doit conserver un moyen de distinguer un mécanisme actif d'un mécanisme inactif.
std::vector< core::AabbcollectActiveDangerBoxes ()
void refreshPlayerSprite ()
void centerCameraOnRoom (core::GridPosition roomIndex)
void updateCurrentRoom ()
void centerCameraOnZone (const core::CameraZone &zone)
 Centre la caméra sur une zone dessinée à la main (mode PerRoom, _cameraFraming.zones non vide, EX-LVL-007) : symétrique à centerCameraOnRoom, pour le découpage manuel plutôt qu'automatique.
void updateCurrentCameraZone ()
 Équivalent de updateCurrentRoom quand _cameraFraming.zones est non vide : résout la zone active (hmi::activeCameraZoneIndex) plutôt que l'indice de grille de _roomGrid.
void centerCameraOnWholeLevel ()
 Centre la caméra sur le niveau entier (mode WholeLevel, LOT-64) : centre fixe, posé une fois au chargement – symétrique à centerCameraOnRoom, jamais recalculé au pas fixe.
void updateFollowCamera (float fixedDelta)
 Avance la caméra de suivi d'un pas fixe (mode Follow, LOT-64 TACHE-02) : lit la position simulée du personnage, sans jamais l'écrire (EX-ARCH-012).
void applyCameraFraming (int viewportWidth, int viewportHeight, float interpolationAlpha)
 Sélectionne le zoom et le centre effectifs de _camera selon le mode de cadrage résolu du niveau (core::CameraFramingMode, LOT-64) : seul point d'application du cadrage, appelé une fois par image depuis render().
void updateTileAnimations (float fixedDelta)
 Avance l'horloge d'animation partagée des tuiles animées (LOT-46 TACHE-05), au pas fixe : une entrée de _tileAnimations par asset animé du jeu de skins courant, en mode SkinMode::Single sans silhouette (bitmask16 et silhouette détourée excluent l'animation, signalé une fois par asset via _warnedExcludedAnimations).
void renderHud (int viewportWidth, int viewportHeight)
 Compose et soumet l'affichage tête haute (budgets, nom du tableau), en espace écran, sur sa propre projection (hmi::screenProjectionMatrix) — jamais affecté par le zoom de la caméra ni par son culling (LOT-52 TACHE-02/03).
Private Member Functions inherited from hmi::IGameModePasses
 IGameModePasses ()=default
virtual ~IGameModePasses ()=default
 IGameModePasses (const IGameModePasses &)=delete
IGameModePassesoperator= (const IGameModePasses &)=delete
 IGameModePasses (IGameModePasses &&)=delete
IGameModePassesoperator= (IGameModePasses &&)=delete

Private Attributes

const TextureAtlas_atlas
TextureCache_cache
const GameKeyBindings_gameBindings
const GamepadBindings_gamepadBindings
SpriteBatch_batch
const BitmapFont_font
const Localization_localization
core::World _world
Camera2D _camera
SpriteRenderer _renderer
ComposedScene _hudScene
 Scène composée du HUD, distincte de celle de _renderer (LOT-52 TACHE-02) : jamais de cadrage de culling actif dessus (ComposedScene::setVisibleBounds), le texte est en espace écran et n'a pas de position monde.
std::optional< core::Level_level
std::optional< core::MechanismController_mechanisms
std::vector< core::Entity_doorEntities
std::vector< core::Entity_switchEntities
 Entité-tuile du déclencheur (interrupteur/plaque de pression) de chaque mécanisme, même ordre que _doorEntities (LOT-47 : le déclencheur change aussi d'apparence, plus seulement la porte qu'il actionne).
core::AnimationSystem _animation
core::TopDownConfig _movementConfig
 Réglages du déplacement en vue de dessus (LOT-06) : valeurs par défaut, une par session.
core::ParticleSystem _particles
 Particules du personnage (dash, atterrissage, mort ; LOT-53 TACHE-02) : simulées au pas fixe, vidées à chaque (re)chargement (loadLevel) comme le reste de l'état de session.
ScreenShakeState _screenShake
 Secousse d'écran courante (LOT-53 TACHE-03) : déclenchée à un atterrissage lourd et à la mort, avancée au pas fixe, appliquée à la caméra de rendu uniquement (render()).
core::Entity _player {}
int _levelWidth = 0
int _levelHeight = 0
std::optional< RoomGrid_roomGrid
core::GridPosition _currentRoomIndex {}
std::optional< std::size_t > _currentZoneIndex
 Zone de caméra active courante (mode PerRoom avec zones dessinées à la main, EX-LVL-007) ; std::nullopt = aucune zone ne contient le personnage (repli niveau entier).
core::CameraFramingConfig _cameraFraming
 Cadrage de caméra résolu du niveau courant (LOT-64), copié une fois au chargement – n'affecte jamais la simulation (EX-ARCH-012), seulement applyCameraFraming/ updateFollowCamera.
FollowCameraState _followCameraState
 État de la caméra de suivi (mode Follow), avancé au pas fixe par updateFollowCamera.
core::Vector2 _previousFollowCenter {}
 Centre de la caméra de suivi au pas fixe PRÉCÉDENT, capturé par snapshotPreviousPositions – même patron que PreviousPosition pour les entités : render() interpole entre les deux pour rester synchrone avec le personnage (lui-même interpolé), sinon il tremblerait par rapport au décor (tache-02).
std::string _loadError
const SkinCatalog_tileSkins = nullptr
std::string _tileSkinSet
std::unordered_map< std::string, core::Animation_tileAnimations
 Horloge d'animation partagee, une entree par asset de tuile anime (nom de fichier -> etat).
std::set< std::string > _warnedExcludedAnimations
 Assets pour lesquels la combinaison (bitmask16 ou silhouette) + animation a deja ete signalee : evite de journaliser a chaque pas fixe (GraphicsLog proscrit un message par image/pas).
std::vector< MechanismVisualState_doorVisuals
std::vector< MechanismVisualState_switchVisuals
std::vector< MechanismVisualState_dangerSwitchedVisuals
std::vector< MechanismVisualState_dangerBlinkVisuals
std::vector< MechanismVisualState_dangerMoverVisuals
std::set< std::string > _warnedMissingMechanismClips
 Couples (asset, clip attendu) deja signales comme manquants : un seul message par combinaison pour toute la session, meme principe que _warnedExcludedAnimations (LOT-47 TACHE-02).
std::unique_ptr< IGameMode_mode
 Mode de jeu courant (LOT-05) : l'ordre des passes du pas fixe.
MechanismEventState _previousMechanismEventState
bool _gameEventsInitialized = false
std::vector< GameEvent_lastStepEvents

Detailed Description

Simule et rend un seul niveau (déjà validé, en mémoire), indépendamment de toute infrastructure d'écran.

Extraite de l'écran de jeu historique (LOT-34) pour être utilisée par l'éditeur Qt (viewport) : toute la logique de jeu (chargement de la scène ECS, apparition du personnage, physique, mécanismes, blocs, dangers, caméra par salle, animation, interpolation) vit ici, une seule fois.

update() avance d'un pas fixe et renvoie l'issue (core::LevelOutcome) ; sur un échec (danger/chute), le niveau est rechargé en interne (personnage à l'entrée, mécanismes/budgets remis) — l'appelant décide quoi faire d'une réussite (enchaîner, revenir au menu, etc.). render() dessine la scène via le SpriteRenderer (lecture seule de l'ECS, EX-ARCH-012), avec interpolation (EX-ARCH-031). Un échec de chargement est récupérable (EX-NFR-040) : la session reste dans un état neutre, loaded() est faux et loadError() renseigné.

Constructor & Destructor Documentation

◆ GameSession()

hmi::GameSession::GameSession ( SpriteBatch & batch,
const TextureAtlas & atlas,
TextureCache & cache,
int viewportWidth,
int viewportHeight,
core::Level level,
const GameKeyBindings & gameBindings,
const GamepadBindings & gamepadBindings,
const BitmapFont & font,
const Localization * localization = nullptr )

Construit la session et charge la scène du niveau donné.

Parameters
batchLot de sprites partagé (rendu).
atlasAtlas de tuiles fournissant les régions de sprites.
viewportWidthLargeur initiale de la surface de rendu, en pixels.
viewportHeightHauteur initiale de la surface de rendu, en pixels.
cacheCache de textures, propriétaire du damier de repli du mode Texture (référence conservée, doit survivre à la session, LOT-41).
levelNiveau déjà validé à jouer.
gameBindingsTouches clavier de jeu (référence conservée, doit survivre à la session).
gamepadBindingsBoutons manette de jeu (référence conservée, doit survivre à la session).
fontPolice bitmap de l'affichage tête haute (référence conservée, doit survivre à la session, LOT-52).
localizationCatalogue de traduction des libellés du HUD (EX-REN-033) ; nullptr désactive le HUD sans plantage (EX-NFR-040), état de démarrage légitime avant que le catalogue ne soit chargé.

Member Function Documentation

◆ advanceAnimations()

void hmi::GameSession::advanceAnimations ( float fixedDelta)
overrideprivatevirtual

Avance les animations d'entités et l'horloge des tuiles animées (EX-REN-012).

Implements hmi::IGameModePasses.

◆ advanceParticles()

void hmi::GameSession::advanceParticles ( float fixedDelta)
overrideprivatevirtual

Avance les particules déjà émises (LOT-53), avant que ce pas n'en émette de nouvelles.

Implements hmi::IGameModePasses.

◆ advanceScreenShake()

void hmi::GameSession::advanceScreenShake ( float fixedDelta)
overrideprivatevirtual

Fait décroître la secousse d'écran courante (LOT-53).

Implements hmi::IGameModePasses.

◆ applyCameraFraming()

void hmi::GameSession::applyCameraFraming ( int viewportWidth,
int viewportHeight,
float interpolationAlpha )
private

Sélectionne le zoom et le centre effectifs de _camera selon le mode de cadrage résolu du niveau (core::CameraFramingMode, LOT-64) : seul point d'application du cadrage, appelé une fois par image depuis render().

◆ applyMechanismVisual()

void hmi::GameSession::applyMechanismVisual ( core::Entity entity,
bool active,
MechanismVisualState & state,
const SceneTextures & textures,
float fixedDelta )
private

Applique la correspondance état → clip à une entité-tuile de mécanisme : résout l'asset effectivement lié (via le point de résolution unique hmi::resolveTileAppearance, jamais dupliqué ici), avance son horloge propre et écrit l'image courante sur son TileSkinTag (LOT-47 TACHE-02).

Sans effet (répli sur l'image statique existante) si l'entité n'est pas repérée, si son type n'est pas un mécanisme à état, ou si l'asset résolu n'est pas animé.

◆ centerCameraOnRoom()

void hmi::GameSession::centerCameraOnRoom ( core::GridPosition roomIndex)
private

◆ centerCameraOnWholeLevel()

void hmi::GameSession::centerCameraOnWholeLevel ( )
private

Centre la caméra sur le niveau entier (mode WholeLevel, LOT-64) : centre fixe, posé une fois au chargement – symétrique à centerCameraOnRoom, jamais recalculé au pas fixe.

◆ centerCameraOnZone()

void hmi::GameSession::centerCameraOnZone ( const core::CameraZone & zone)
private

Centre la caméra sur une zone dessinée à la main (mode PerRoom, _cameraFraming.zones non vide, EX-LVL-007) : symétrique à centerCameraOnRoom, pour le découpage manuel plutôt qu'automatique.

◆ collectActiveDangerBoxes()

std::vector< core::Aabb > hmi::GameSession::collectActiveDangerBoxes ( )
nodiscardprivate
Returns
Les boîtes mortelles à état du pas courant, en plus des tuiles Danger que core::evaluateOutcome lit directement dans la grille : aujourd'hui la seule porte qui se referme sur le personnage (EX-GP-021).

◆ detectEvents()

void hmi::GameSession::detectEvents ( )
overrideprivatevirtual

Relève les transitions du pas (personnage, mécanismes) en événements de jeu (LOT-60).

Implements hmi::IGameModePasses.

◆ evaluateOutcome()

core::LevelOutcome hmi::GameSession::evaluateOutcome ( )
nodiscardoverrideprivatevirtual
Returns
L'issue du niveau pour ce pas, sans rien y changer.

Implements hmi::IGameModePasses.

◆ gameMode()

const IGameMode & hmi::GameSession::gameMode ( ) const
inlinenodiscardnoexcept
Returns
Le mode de jeu courant, jamais nul.

◆ lastStepEvents()

const std::vector< GameEvent > & hmi::GameSession::lastStepEvents ( ) const
inlinenodiscardnoexcept

Événements de jeu détectés lors du dernier appel à update() (LOT-60 TACHE-03).

Transitions du personnage et des mécanismes, plus l'issue du pas (Died/ExitReached). Vide si aucune transition, ou lors du tout premier pas après un chargement (état initial, rien à signaler — même principe que MechanismVisualState::initialized). Présentation pure : ne modifie jamais la simulation (EX-ARCH-012), à consommer par l'appelant pour déclencher des sons (hmi::SoundTriggers) ou, plus tard, des particules (LOT-53).

◆ loaded()

bool hmi::GameSession::loaded ( ) const
inlinenodiscard
Returns
true si un niveau est chargé et simulable.

◆ loadError()

const std::string & hmi::GameSession::loadError ( ) const
inlinenodiscard
Returns
Message d'erreur si le chargement a échoué, chaîne vide sinon.

◆ loadLevel()

void hmi::GameSession::loadLevel ( core::Level level)
private

◆ moveCharacter()

void hmi::GameSession::moveCharacter ( const core::PlayerInput & input,
float fixedDelta )
overrideprivatevirtual

Déplace le personnage selon l'intention de ce pas.

Implements hmi::IGameModePasses.

◆ onLevelLost()

void hmi::GameSession::onLevelLost ( )
overrideprivatevirtual

Conséquences d'un échec : éclatement, secousse, puis rechargement du niveau.

Implements hmi::IGameModePasses.

◆ playerBox()

core::Aabb hmi::GameSession::playerBox ( )
nodiscardprivate
Returns
La boîte du personnage à l'instant présent, relue de l'ECS. Recalculée par chaque passe qui en a besoin plutôt que passée de l'une à l'autre : aucune passe située entre elles ne déplace le personnage, et un état partagé de plus entre passes rendrait leur ordre bien plus difficile à changer — ce que ce lot cherche précisément à rendre facile.

◆ refreshMechanismDiagnosticTint()

void hmi::GameSession::refreshMechanismDiagnosticTint ( RenderMode mode)
private

Modulation d'opacité de diagnostic, réservée au mode Physique (LOT-47 TACHE-03) : ce mode n'a pas d'assets animés et doit conserver un moyen de distinguer un mécanisme actif d'un mécanisme inactif.

Appelée à chaque render() (décision purement visuelle, dépendante du mode courant) ; force l'alpha à 1 en mode Texture, où l'état se voit désormais au clip.

◆ refreshPlayerSprite()

void hmi::GameSession::refreshPlayerSprite ( )
private

◆ reload()

void hmi::GameSession::reload ( )

Recharge le niveau courant (personnage à l'entrée, mécanismes et budgets remis).

◆ render()

void hmi::GameSession::render ( int viewportWidth,
int viewportHeight,
RenderMode mode,
float interpolationAlpha )

Dessine la scène du niveau (rien si le chargement a échoué).

mode choisit le rendu Physique ou Texture (EX-REN-046, LOT-41) : bascule purement visuelle, sans effet sur la simulation ni sur la scène ECS.

◆ renderHud()

void hmi::GameSession::renderHud ( int viewportWidth,
int viewportHeight )
private

Compose et soumet l'affichage tête haute (budgets, nom du tableau), en espace écran, sur sa propre projection (hmi::screenProjectionMatrix) — jamais affecté par le zoom de la caméra ni par son culling (LOT-52 TACHE-02/03).

Sans effet si _localization est nul.

◆ renderStatistics()

SceneStatistics hmi::GameSession::renderStatistics ( ) const
inlinenodiscardnoexcept
Returns
Les compteurs de primitives de la dernière image rendue (hmi::SpriteRenderer:: lastScene, EX-NFR-005) : composées, écartées, soumises, passes de dessin — consommé par le compteur de diagnostic (hmi::DiagnosticsHud, LOT-62 TACHE-02).

◆ setGameMode()

void hmi::GameSession::setGameMode ( std::unique_ptr< IGameMode > mode)

Remplace le mode de jeu courant (EX-ARCH-002).

Le mode sortant reçoit onUnload, l'entrant onLoad — dans cet ordre, pour qu'un mode puisse défaire ce qu'il avait posé avant que le suivant ne pose le sien. Un pointeur nul est refusé sans rien changer : une session sans mode n'aurait plus d'ordre de passes du tout (EX-NFR-040).

Parameters
modeNouveau mode (la session en prend possession).

◆ setSkins()

void hmi::GameSession::setSkins ( const SkinCatalog * skins,
std::string skinSet = {} )
inline

Désigne le catalogue de skins et le jeu à utiliser en mode Texture (LOT-42).

Le catalogue n'est pas copié : l'appelant en reste propriétaire et doit le maintenir en vie au moins aussi longtemps que la session.

Parameters
skinsCatalogue, ou nullptr pour retomber entièrement sur le damier.
skinSetNom du jeu courant ; vide pour le jeu par défaut du catalogue.

◆ snapshotPreviousPositions()

void hmi::GameSession::snapshotPreviousPositions ( )
overrideprivatevirtual

Fige la position courante de chaque entité mobile comme sa position « précédente », avant que le pas ne la modifie (interpolation de rendu, EX-ARCH-031).

Implements hmi::IGameModePasses.

◆ spawnPlayer()

void hmi::GameSession::spawnPlayer ( core::GridPosition entry)
private

◆ update() [1/2]

core::LevelOutcome hmi::GameSession::update ( const core::PlayerInput & input,
float fixedDelta )

Simule le niveau d'un pas fixe à partir d'une intention déjà résolue, sans passer par hmi::InputState/toPlayerInput (LOT-ANNEXE-18, TACHE-01) : cœur de simulation partagé, utilisé aussi bien par le jeu réel (via update(const InputState&, float), qui ne fait plus que traduire puis déléguer ici) que par la lecture d'un rejeu (hmi::ReplayPlayback), sans aucune divergence possible entre les deux chemins.

Parameters
inputIntention de jeu déjà résolue (entrée réelle traduite, ou rejeu enregistré).
fixedDeltaDurée du pas fixe, en secondes.
Returns
L'issue : Playing, Won (l'appelant décide), ou Lost (niveau déjà rechargé).

◆ update() [2/2]

core::LevelOutcome hmi::GameSession::update ( const InputState & input,
float fixedDelta )

Simule le niveau d'un pas fixe (mécanismes, blocs, physique, animation, dangers).

Parameters
inputÉtat des entrées de ce pas.
fixedDeltaDurée du pas fixe, en secondes.
Returns
L'issue : Playing, Won (l'appelant décide), ou Lost (niveau déjà rechargé).

◆ updateCamera()

void hmi::GameSession::updateCamera ( float fixedDelta)
overrideprivatevirtual

Recadre la caméra selon le mode de cadrage résolu du niveau (EX-LVL-006).

Implements hmi::IGameModePasses.

◆ updateCurrentCameraZone()

void hmi::GameSession::updateCurrentCameraZone ( )
private

Équivalent de updateCurrentRoom quand _cameraFraming.zones est non vide : résout la zone active (hmi::activeCameraZoneIndex) plutôt que l'indice de grille de _roomGrid.

Repli sur centerCameraOnWholeLevel si aucune zone ne contient le personnage (jamais un état indéfini).

◆ updateCurrentRoom()

void hmi::GameSession::updateCurrentRoom ( )
private

◆ updateFollowCamera()

void hmi::GameSession::updateFollowCamera ( float fixedDelta)
private

Avance la caméra de suivi d'un pas fixe (mode Follow, LOT-64 TACHE-02) : lit la position simulée du personnage, sans jamais l'écrire (EX-ARCH-012).

◆ updateMechanisms()

void hmi::GameSession::updateMechanisms ( const core::PlayerInput & input)
overrideprivatevirtual

Résout les mécanismes à partir de la boîte du personnage et de son intention.

Implements hmi::IGameModePasses.

◆ updateMechanismVisuals()

void hmi::GameSession::updateMechanismVisuals ( float fixedDelta)
overrideprivatevirtual

Projette l'état logique des mécanismes sur leur apparence (LOT-47, EX-REN-006).

Implements hmi::IGameModePasses.

◆ updateTileAnimations()

void hmi::GameSession::updateTileAnimations ( float fixedDelta)
private

Avance l'horloge d'animation partagée des tuiles animées (LOT-46 TACHE-05), au pas fixe : une entrée de _tileAnimations par asset animé du jeu de skins courant, en mode SkinMode::Single sans silhouette (bitmask16 et silhouette détourée excluent l'animation, signalé une fois par asset via _warnedExcludedAnimations).

Member Data Documentation

◆ _animation

core::AnimationSystem hmi::GameSession::_animation
private

◆ _atlas

const TextureAtlas& hmi::GameSession::_atlas
private

◆ _batch

SpriteBatch& hmi::GameSession::_batch
private

◆ _cache

TextureCache& hmi::GameSession::_cache
private

◆ _camera

Camera2D hmi::GameSession::_camera
private

◆ _cameraFraming

core::CameraFramingConfig hmi::GameSession::_cameraFraming
private

Cadrage de caméra résolu du niveau courant (LOT-64), copié une fois au chargement – n'affecte jamais la simulation (EX-ARCH-012), seulement applyCameraFraming/ updateFollowCamera.

◆ _currentRoomIndex

core::GridPosition hmi::GameSession::_currentRoomIndex {}
private

◆ _currentZoneIndex

std::optional<std::size_t> hmi::GameSession::_currentZoneIndex
private

Zone de caméra active courante (mode PerRoom avec zones dessinées à la main, EX-LVL-007) ; std::nullopt = aucune zone ne contient le personnage (repli niveau entier).

Seulement significatif quand _cameraFraming.zones est non vide – sinon _roomGrid/ _currentRoomIndex font foi (découpage automatique en grille, inchangé).

◆ _dangerBlinkVisuals

std::vector<MechanismVisualState> hmi::GameSession::_dangerBlinkVisuals
private

◆ _dangerMoverVisuals

std::vector<MechanismVisualState> hmi::GameSession::_dangerMoverVisuals
private

◆ _dangerSwitchedVisuals

std::vector<MechanismVisualState> hmi::GameSession::_dangerSwitchedVisuals
private

◆ _doorEntities

std::vector<core::Entity> hmi::GameSession::_doorEntities
private

◆ _doorVisuals

std::vector<MechanismVisualState> hmi::GameSession::_doorVisuals
private

◆ _followCameraState

FollowCameraState hmi::GameSession::_followCameraState
private

État de la caméra de suivi (mode Follow), avancé au pas fixe par updateFollowCamera.

◆ _font

const BitmapFont& hmi::GameSession::_font
private

◆ _gameBindings

const GameKeyBindings& hmi::GameSession::_gameBindings
private

◆ _gameEventsInitialized

bool hmi::GameSession::_gameEventsInitialized = false
private

◆ _gamepadBindings

const GamepadBindings& hmi::GameSession::_gamepadBindings
private

◆ _hudScene

ComposedScene hmi::GameSession::_hudScene
private

Scène composée du HUD, distincte de celle de _renderer (LOT-52 TACHE-02) : jamais de cadrage de culling actif dessus (ComposedScene::setVisibleBounds), le texte est en espace écran et n'a pas de position monde.

◆ _lastStepEvents

std::vector<GameEvent> hmi::GameSession::_lastStepEvents
private

◆ _level

std::optional<core::Level> hmi::GameSession::_level
private

◆ _levelHeight

int hmi::GameSession::_levelHeight = 0
private

◆ _levelWidth

int hmi::GameSession::_levelWidth = 0
private

◆ _loadError

std::string hmi::GameSession::_loadError
private

◆ _localization

const Localization* hmi::GameSession::_localization
private

◆ _mechanisms

std::optional<core::MechanismController> hmi::GameSession::_mechanisms
private

◆ _mode

std::unique_ptr<IGameMode> hmi::GameSession::_mode
private

Mode de jeu courant (LOT-05) : l'ordre des passes du pas fixe.

Jamais nul — la session démarre en exploration, et setGameMode refuse un pointeur nul.

◆ _movementConfig

core::TopDownConfig hmi::GameSession::_movementConfig
private

Réglages du déplacement en vue de dessus (LOT-06) : valeurs par défaut, une par session.

Un jour réglables par tableau, comme le cadrage de caméra l'est depuis le LOT-64.

◆ _particles

core::ParticleSystem hmi::GameSession::_particles
private

Particules du personnage (dash, atterrissage, mort ; LOT-53 TACHE-02) : simulées au pas fixe, vidées à chaque (re)chargement (loadLevel) comme le reste de l'état de session.

◆ _player

core::Entity hmi::GameSession::_player {}
private

◆ _previousFollowCenter

core::Vector2 hmi::GameSession::_previousFollowCenter {}
private

Centre de la caméra de suivi au pas fixe PRÉCÉDENT, capturé par snapshotPreviousPositions – même patron que PreviousPosition pour les entités : render() interpole entre les deux pour rester synchrone avec le personnage (lui-même interpolé), sinon il tremblerait par rapport au décor (tache-02).

◆ _previousMechanismEventState

MechanismEventState hmi::GameSession::_previousMechanismEventState
private

◆ _renderer

SpriteRenderer hmi::GameSession::_renderer
private

◆ _roomGrid

std::optional<RoomGrid> hmi::GameSession::_roomGrid
private

◆ _screenShake

ScreenShakeState hmi::GameSession::_screenShake
private

Secousse d'écran courante (LOT-53 TACHE-03) : déclenchée à un atterrissage lourd et à la mort, avancée au pas fixe, appliquée à la caméra de rendu uniquement (render()).

◆ _switchEntities

std::vector<core::Entity> hmi::GameSession::_switchEntities
private

Entité-tuile du déclencheur (interrupteur/plaque de pression) de chaque mécanisme, même ordre que _doorEntities (LOT-47 : le déclencheur change aussi d'apparence, plus seulement la porte qu'il actionne).

◆ _switchVisuals

std::vector<MechanismVisualState> hmi::GameSession::_switchVisuals
private

◆ _tileAnimations

std::unordered_map<std::string, core::Animation> hmi::GameSession::_tileAnimations
private

Horloge d'animation partagee, une entree par asset de tuile anime (nom de fichier -> etat).

Avancee une fois par asset et par pas fixe, jamais une fois par case (LOT-46 TACHE-05).

◆ _tileSkins

const SkinCatalog* hmi::GameSession::_tileSkins = nullptr
private

◆ _tileSkinSet

std::string hmi::GameSession::_tileSkinSet
private

◆ _warnedExcludedAnimations

std::set<std::string> hmi::GameSession::_warnedExcludedAnimations
private

Assets pour lesquels la combinaison (bitmask16 ou silhouette) + animation a deja ete signalee : evite de journaliser a chaque pas fixe (GraphicsLog proscrit un message par image/pas).

◆ _warnedMissingMechanismClips

std::set<std::string> hmi::GameSession::_warnedMissingMechanismClips
private

Couples (asset, clip attendu) deja signales comme manquants : un seul message par combinaison pour toute la session, meme principe que _warnedExcludedAnimations (LOT-47 TACHE-02).

◆ _world

core::World hmi::GameSession::_world
private

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