|
JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
|
Classes | |
| class | AudioEngine |
| Lecture d'échantillons courts à faible latence, avec volume global et repli muet. More... | |
| class | SoundCatalog |
| Catalogue des sons : nom d'événement → fichier (relatif à Source/Elements/Audio/). More... | |
| struct | SoundCatalogResult |
| Résultat d'une lecture de catalogue : soit un SoundCatalog, soit une erreur décrite. More... | |
| class | AssetFileOperations |
| Opérations sur les fichiers d'un dossier d'assets, sans dépendance Qt/GPU. More... | |
| struct | AssetReference |
| Une référence nommée à un asset : dans quel jeu de skins, pour quel type de tuile. More... | |
| class | AssetThumbnailView |
| Grille de vignettes d'un dossier d'assets, avec recherche, sélection et gestion des fichiers (importer/renommer/dupliquer/supprimer). More... | |
| class | EditContextTarget |
| Interface pure implémentée par le contexte d'édition actif. More... | |
| struct | LevelStatusInfo |
| État affiché pour un niveau en cours d'édition (barre d'état, EX-EDIT-013/EX-EDIT-012). More... | |
| struct | PlaneEditStatusInfo |
| Ce qu'un plan pictural ajoute à la barre d'état, quand le canevas en peint un (EX-EDIT-046, EX-NFR-043, LOT-69 TACHE-08). More... | |
| struct | PixelEditStatusInfo |
| État affiché pour un asset en cours d'édition dans l'atelier pixel art (barre d'état, LOT-54 TACHE-04, EX-IHM-060). More... | |
| struct | EditorStatusContext |
| Contexte d'édition dont la barre d'état décide l'affichage. More... | |
| struct | EditorStatusLines |
| Lignes à afficher pour la barre d'état de l'éditeur, à un instant donné. More... | |
| struct | FileOperationResult |
| Succès (avec le chemin résultant) ou échec (avec un message lisible). More... | |
| class | LevelBrowserPanel |
| Panneau de gestion des niveaux : liste filtrable + créer/renommer/dupliquer/supprimer. More... | |
| class | LevelFileOperations |
| Opérations sur les fichiers de niveaux d'un dossier, sans dépendance Qt/GPU. More... | |
| struct | LinkSegment |
| Segment reliant le centre d'un déclencheur au centre de sa cible, en unités monde. More... | |
| struct | ArrowHead |
| Les deux ailes de la pointe d'une flèche, à son extrémité. More... | |
| struct | LinkRow |
| Une ligne du panneau « Liens » (ou une entrée à dessiner dans le viewport). More... | |
| struct | PendingLink |
| Case en attente d'appariement (premier clic de l'outil « Lien »), avec son type courant. More... | |
| struct | LinkGestureDecision |
| Décision résultant de resolveLinkClick : action à appliquer et paramètres associés. More... | |
| class | LinkPanel |
| Vue tabulaire des liaisons (Mechanism) du brouillon courant (EX-IHM-031). More... | |
| struct | MechanismAnimationRow |
| Une ligne de la section « Animations » : une famille de mécanisme, l'asset qui lui sert d'apparence par défaut, et le diagnostic de clips manquants pour cet asset. More... | |
| struct | PaletteThumbnail |
| Vignette à afficher pour un type de tuile : d'où la lire, et quelle région y prendre. More... | |
| class | PalettePanel |
| Palette de tuiles en arbre (QTreeView) : catégories → sous-groupes → tuiles. More... | |
| struct | PanelFocusEntry |
Une entrée de la table : l'outil tool met en avant le panneau panel. More... | |
| struct | PixelPanelFocusEntry |
Une entrée de la table équivalente pour les outils du canevas pixel art (LOT-54 TACHE-04) : l'outil tool met en avant le panneau panel. More... | |
| class | PixelCanvas |
| Widget affichant l'image en cours d'édition et transformant les gestes de souris en appels aux opérations pures de hmi::PixelOperations (TACHE-02). More... | |
| struct | PixelCanvasView |
| État de la vue du canevas : zoom entier et décalage de défilement, en pixels image. More... | |
| struct | PixelScreenRect |
| Rectangle écran (pixels logiques, relatifs au coin haut-gauche du widget) d'un pixel image. More... | |
| struct | PixelCanvasRealSize |
| Taille en pixels réels de l'image entière affichée (largeur/hauteur image × zoom, à l'échelle d'affichage réelle). More... | |
| struct | PixelHistoryEntry |
| Une entrée d'historique : la région affectée, son contenu avant et après l'opération. More... | |
| class | PixelHistory |
| Pile d'annulation/rétablissement nommée d'un canevas pixel art. More... | |
| class | PixelHistoryPanel |
| Liste ordonnée des opérations nommées de l'historique du canevas pixel art actif. More... | |
| struct | PixelRegion |
| Rectangle de pixels modifié par une opération (bornes incluses). More... | |
| struct | PixelClipboard |
| Contenu copié depuis un tampon (presse-papiers de l'atelier, LOT-54 TACHE-06). More... | |
| struct | PixelPaletteEntry |
| Une entrée nommée de la palette de projet. More... | |
| class | PixelPalette |
| Palette de couleurs nommées du projet, lue/écrite dans Assets/palettes.json. More... | |
| struct | PixelPaletteExtractionEntry |
| Une couleur extraite, avec son nombre d'occurrences dans l'image. More... | |
| class | PixelPalettePanel |
| Liste éditable de la palette de projet (hmi::PixelPalette), avec le réglage « contraindre à la palette ». More... | |
| struct | PlanePixelSize |
| Dimensions, en pixels, du PNG d'un plan. More... | |
| struct | PlaneLayer |
| Un plan à aplatir sous (ou sur) celui qu'on peint. More... | |
| class | PlanesPanel |
| Liste ordonnée des plans d'un niveau, avec leurs réglages. More... | |
| struct | SkinRow |
| Une ligne du panneau : un type de tuile et l'apparence qui lui est assignée, s'il y en a une. More... | |
| struct | SkinSection |
| Un groupe de lignes, correspondant à une catégorie de la palette. More... | |
| struct | TextureAssignDecision |
| Décision résultant de resolveTextureAssignClick. More... | |
| class | TexturePanel |
| Panneau d'habillage, organisé en sections extensibles (EX-EDIT-042, EX-EDIT-024). More... | |
| struct | TileEntry |
| Une tuile sélectionnable : son type et son libellé affiché. More... | |
| struct | TileSubgroup |
| Un sous-groupe : une famille de variantes (formes/tailles/orientations) sous une catégorie. More... | |
| struct | TileCategory |
| Une catégorie de premier niveau : ses tuiles directes + ses sous-groupes repliables. More... | |
| class | CombatMode |
| Le second mode de jeu : le combat se déroule sur la carte d'exploration, mais l'exploration, elle, ne tourne plus. More... | |
| class | FrameRateAverage |
| Moyenne glissante de la cadence de rendu, sur une fenêtre courte. More... | |
| struct | DiagnosticsMeasurements |
| Valeurs mesurées pour une image de diagnostic (LOT-62 TACHE-02). More... | |
| class | ExplorationMode |
| Le mode par défaut : le personnage parcourt la carte, les mécanismes répondent, la caméra suit, l'issue du niveau est évaluée à chaque pas. More... | |
| struct | MechanismEventState |
| État « porte ouverte » de chaque mécanisme, même index que core::MechanismController::mechanisms(). More... | |
| class | GameSession |
| Simule et rend un seul niveau (déjà validé, en mémoire), indépendamment de toute infrastructure d'écran. More... | |
| class | GameViewport |
| Widget de rendu (QRhiWidget) où la scène est dessinée, composé avec le reste de l'interface. More... | |
| class | GameViewportItem |
| Surface QRhi du jeu, composée avec le reste de l'interface QML. More... | |
| class | IGameModePasses |
| Les passes d'un pas fixe, telles que l'orchestrateur les offre à un mode de jeu. More... | |
| class | IGameMode |
| Un mode de jeu : l'ordre dans lequel les passes d'un pas fixe s'enchaînent. More... | |
| struct | AnimationDescription |
| Description d'animation d'un asset : disposition de sa spritesheet et ses clips. More... | |
| struct | AnimationDescriptionResult |
| Résultat d'une lecture de description : soit une AnimationDescription, soit une erreur décrite. More... | |
| class | AnimationCatalog |
| Lecture, validation et traduction en région de texture du format nom-asset.anim.json. More... | |
| struct | AssetDimensionContract |
| Dimensions attendues d'une famille d'assets. More... | |
| struct | AssetValidation |
| Verdict de validation d'un asset, avec son message exploitable. More... | |
| class | AssetPaths |
| Résout des noms d'assets logiques vers des chemins de fichiers, dans un dossier donné. More... | |
| struct | BackgroundFit |
| Recadrage UV d'un fond, calculé pour préserver son ratio d'aspect (LOT-44). More... | |
| struct | BackgroundTexture |
| Texture de fond déjà résolue, prête à être composée. More... | |
| class | BitmapFont |
| Police bitmap chargée depuis Assets/Fonts/, avec repli procédural (EX-NFR-040). More... | |
| class | CacheRegistry |
| Mémoïsation par clé logique : charge au premier accès, retient aussi un échec, et s'invalide par clé ou entièrement. More... | |
| struct | ScreenShakeState |
| État déterministe d'une secousse d'écran en cours de décroissance vers zéro. More... | |
| class | Camera2D |
| Caméra 2D orthographique : projette le monde vers l'écran pour le rendu. More... | |
| struct | ComposedQuad |
| Une primitive prête à soumettre, avec tout ce qui détermine quand la dessiner. More... | |
| struct | SceneStatistics |
| Compteurs d'une image composée, pour l'observabilité du volume soumis (EX-NFR-005). More... | |
| class | ComposedScene |
| Liste ordonnée des primitives d'une image, indépendante de Direct3D. More... | |
| struct | LinkOverlayState |
| État d'affichage des liens de mécanismes (LOT-37), fourni par le viewport à chaque rendu. More... | |
| class | DraftRenderer |
| Dessine la grille d'un core::LevelDraft en cours d'édition. More... | |
| struct | FollowCameraState |
| État déterministe de la caméra de suivi, avancé une fois par pas fixe. More... | |
| class | LayerVisibility |
| Jeu de visibilités par calque, pour le mode d'inspection « définition des textures » (LOT-51). More... | |
| struct | MechanismVisualState |
| État de présentation d'un mécanisme animé, par instance (LOT-47 TACHE-02). More... | |
| class | PlaneVisibility |
| Jeu de visibilités des plans picturaux d'un niveau, adressé par rang. More... | |
| struct | PlaneTexture |
| Texture d'un plan déjà résolue, prête à être composée. More... | |
| struct | PlaneParallax |
| Cadrage courant et échelle, pour le décalage de parallaxe des plans (EX-DEC-043). More... | |
| struct | PlayerSpriteQuad |
| Position et taille du quad d'affichage du personnage, en unités monde, relatives au coin haut-gauche de sa hitbox (Transform::position). More... | |
| struct | PlayerSpriteTag |
| Apparence du personnage en RenderMode::Texture, résolue chaque image (GameSession::refreshPlayerSprite) — même patron que hmi::TileSkinTag pour les tuiles : le composant restitue côté présentation ce que core::Sprite/core::Transform (partagés avec la physique) ne peuvent pas porter sans coupler simulation et rendu. More... | |
| struct | PreviousPosition |
| Position d'une entité au pas de simulation précédent, pour l'interpolation de rendu (EX-ARCH-031). More... | |
| struct | ProceduralAtlasImage |
| Pixels d'un atlas généré en mémoire, au format R8G8B8A8_UNORM (ordre mémoire R,G,B,A). More... | |
| struct | GlyphMetrics |
| Position, taille et avance horizontale d'un glyphe dans l'atlas de police, en pixels. More... | |
| struct | FontMetrics |
| Métriques d'une police bitmap : région et avance de chaque point de code couvert. More... | |
| struct | TextExtent |
| Dimensions mesurées d'un texte, en pixels (à l'échelle demandée). More... | |
| struct | ProceduralFontImage |
| Pixels d'un atlas de police généré en mémoire, au format R8G8B8A8_UNORM (ordre mémoire R,G,B,A), ligne par ligne (haut en bas). More... | |
| struct | ProceduralFont |
| Atlas de police procédural complet : ses pixels et les métriques qui les décrivent. More... | |
| struct | FontMetricsResult |
| Résultat d'une lecture de métriques : soit des FontMetrics, soit une erreur décrite. More... | |
| struct | SpriteQuad |
| Un quad texturé à dessiner : rectangle en unités monde, région de texture (coordonnées normalisées) et teinte. More... | |
| struct | LineQuad |
| Un segment épais à dessiner : deux extrémités en unités monde, une épaisseur (perpendiculaire au segment, unités monde) et une teinte. More... | |
| class | QuadRecorder |
| Capture la liste des primitives d'une image et répond aux questions qu'un test se pose. More... | |
| struct | RenderLayerTag |
| Composant de présentation fixant le calque de dessin d'une entité. More... | |
| struct | RhiContext |
| Le QRhi courant et le lot de téléversements de l'image en cours. More... | |
| struct | RoomBounds |
| Rectangle (en cases) d'une salle, borné aux dimensions réelles du niveau. More... | |
| class | RoomGrid |
| Partitionne une grille de niveau en un tableau de salles de taille fixe, façon Celeste (LOT-32). More... | |
| class | SceneResources |
| Lot de sprites, atlas, police bitmap, registre de textures et catalogue de skins — créés ensemble, libérés ensemble, dans le bon ordre. More... | |
| struct | SkinEntry |
| Apparence assignée à un type de tuile : le fichier à utiliser et son découpage. More... | |
| class | SkinCatalog |
| Catalogue des jeux de skins : (jeu, type de tuile) → { asset, mode }. More... | |
| struct | SkinCatalogResult |
| Résultat d'une lecture de catalogue : soit un SkinCatalog, soit une erreur décrite. More... | |
| class | SpriteBatch |
| Dessine des quads texturés au travers de QRhi, avec transparence et échantillonnage nearest (pixel art). More... | |
| class | SpriteRenderer |
| Pont ECS → écran : dessine chaque entité affichable, triée par calque puis par texture. More... | |
| struct | TextAnchor |
| Point d'ancrage d'un texte : quel coin/bord de sa boîte englobante coïncide avec la position passée à hmi::composeText — centrer un texte sans devoir le mesurer soi-même. More... | |
| class | TextureAtlas |
| Texture d'atlas et table de régions, chargée depuis un fichier image avec repli procédural (EX-REN-041/EX-REN-042). More... | |
| class | TextureCache |
| Charge, valide et met en cache des textures GPU désignées par leur nom de fichier logique. More... | |
| struct | DecodedImage |
| Pixels RGBA décodés d'un fichier image, alpha non prémultiplié (cohérent avec le mélange du pipeline de SpriteBatch, SrcAlpha/OneMinusSrcAlpha), au format RGBA8. More... | |
| struct | LoadedTexture |
| Texture GPU chargée (RAII). More... | |
| struct | TileAppearance |
| Apparence résolue d'une primitive : quelle texture lier, et quelle région y échantillonner. More... | |
| struct | SkinTexture |
| Skin déjà chargé, prêt à être lié par la composition. More... | |
| struct | SceneTextures |
| Textures liables par la composition d'une scène, et de quoi choisir laquelle lier. More... | |
| struct | AutotileCell |
| Position d'une case dans la planche de raccords, en cases (origine haut-gauche). More... | |
| struct | TileSkinTag |
| Type de tuile et voisinage solide d'une entité affichée, pour la résolution de son skin. More... | |
| class | EditorKeyBindings |
| Association action d'éditeur -> touche, avec persistance JSON (EX-CTRL-012, LOT-29). More... | |
| class | GameKeyBindings |
| Association action de jeu -> touche, avec persistance JSON (EX-CTRL-012, LOT-29). More... | |
| class | GamepadBindings |
| Association action de jeu (GameAction, partagée avec GameKeyBindings) -> bouton manette, avec persistance JSON (LOT-30). More... | |
| class | GamepadPoller |
| Sonde la manette (XInput, joueur 0) et fusionne son état dans un InputState. More... | |
| class | InputState |
| État des entrées d'une frame, avec détection des fronts (pressée / relâchée). More... | |
| struct | EditorActionSpec |
| Description d'une action, indépendante de Qt : de quoi construire un QAction complet (icône, libellé, raccourci, caractère cochable) sans dupliquer sa définition ailleurs. More... | |
| struct | KeyBindingIconEntry |
| Correspondance entre une action d'éditeur remappable (hmi::EditorAction, EditorKeyBindings.h) et l'identifiant d'action du catalogue qui la rend effective (LOT-57 TACHE-04, EX-IHM-062). More... | |
| struct | DesignColor |
| Couleur RVBA pure (indépendante de Qt), convertible en chaîne CSS pour la feuille de style et directement décomposable pour construire une QColor/QPalette. More... | |
| struct | ColorTokens |
| Rôles de couleur, communs aux deux portées d'habillage. More... | |
| struct | SpacingTokens |
| Échelle d'espacement, en pixels logiques. More... | |
| struct | TypographyLevel |
| Un niveau de l'échelle typographique : taille en points et graisse (QFont::Weight, 1-1000). More... | |
| struct | TypographyTokens |
| Échelle typographique, par rôle — jamais de taille ponctuelle en dehors de cette échelle. More... | |
| struct | SizeTokens |
| Tailles d'icônes, de vignettes et de contrôles usuels, en pixels logiques (avant mise à l'échelle d'affichage, LOT-56 TACHE-05). More... | |
| struct | DesignTokens |
| Jeu complet de jetons de design d'une portée (identité invariante ou châssis variable). More... | |
| struct | IdentityBaseScale |
| Grandeurs de la portée identité, exprimées en pixels à l'échelle 1 (LOT-68, EX-IHM-070). More... | |
| class | EditorActions |
| Construit et possède les QAction du catalogue (HMI/Interface/ActionCatalog.h) : chaque outil et chaque commande principale n'existe qu'une fois, placée simultanément dans la barre d'outils, un menu et un menu contextuel sans duplication. More... | |
| class | EditorKeybindingsWidget |
| Widget de remappage des touches d'éditeur (EditorKeyBindings), destiné à l'onglet « Éditeur » de la page Options. More... | |
| struct | WorkspaceDressing |
| Ce qu'un espace affiche, hors panneaux (voir workspacesForPanel). More... | |
| struct | FontFamilyResolution |
| Résultat de la résolution : la police embarquée si elle a pu être enregistrée auprès de Qt, sinon aucun nom de famille – jamais un second nom codé en dur. More... | |
| class | GamepadBindingsWidget |
| Widget de remappage des boutons manette (GamepadBindings), onglet « Commande manette » de la page Options. More... | |
| struct | IconPoint |
| Un point en espace normalisé [0,1] x [0,1] (origine en haut à gauche). More... | |
| struct | IconStroke |
| Un trait de l'icône : polyligne ouverte, ou polygone fermé (éventuellement rempli), d'une seule couleur. More... | |
| struct | IconGeometry |
| Géométrie complète d'une icône : liste ordonnée de traits. More... | |
| class | KeybindingsWidget |
| Widget de remappage des touches de jeu (GameKeyBindings), destiné à l'onglet « Commande clavier » de la page Options. More... | |
| class | MainWindow |
| Fenêtre principale de l'application Qt : poste de travail d'éditeur à panneaux dockables autour du viewport Direct3D 11. More... | |
| struct | StyleSheetSubstitutionResult |
| Résultat d'une substitution : succès et texte produit, ou échec et message d'erreur — jamais un résultat produit silencieusement avec un trou (marqueur inconnu non substitué). More... | |
| class | Localization |
| Catalogue de traduction (i18n) : associe des clés stables à des chaînes selon la langue active, avec repli sur la langue par défaut. More... | |
| class | CharacterSheetModel |
| Vue-modèle de la fiche : ce que le jeu sait dire d'un personnage. More... | |
| struct | CharacterSheetContext |
| Traduit une fiche de personnage en valeurs affichables, indexées par l'identifiant que l'ossature de l'écran déclare (hmi::RpgField::valueId). More... | |
| struct | DemonstrationCharacter |
| Ce qu'un chargement du personnage de démonstration produit, prêt à être publié au QML. More... | |
| class | InventoryModel |
| Vue-modèle de l'inventaire : les seize emplacements, la bourse, la charge et le sac. More... | |
| struct | InventoryContext |
| Traduit un inventaire en valeurs affichables, indexées par l'identifiant que la table de la planche 2 déclare (hmi::PlateField::valueId). More... | |
| struct | KeyHint |
| Une paire touche → action, déjà traduite par l'appelant (EX-REN-033). More... | |
| struct | BackdropQuad |
| Un pavé plein, en pixels, relatif au coin haut-gauche de la surface décorée. More... | |
| class | OptionsModel |
| Vue-modèle des options : lit et persiste les réglages, et publie leur changement. More... | |
| class | PendingData |
| Le point unique vers lequel pointe tout ce qui n'a pas encore de source. More... | |
| struct | RpgField |
| Une ligne « libellé → valeur » d'un bloc Fields. More... | |
| struct | RpgContentBlock |
| Un bloc de l'ossature d'un écran. More... | |
| struct | RpgScreenLayout |
| Ossature d'un écran : deux colonnes de blocs. More... | |
| struct | RpgScreenDescriptor |
| Comment un écran est rendu (LOT-38). More... | |
| struct | ScreenDressing |
| Habillage de fenêtre associé à un écran : ce que chaque showXxx() répétait à la main (bascule du QStackedWidget, docks, barre de menu, barres d'outils, navigation manette). More... | |
| struct | ScreenState |
| État complet de la machine. More... | |
| class | ScreenRouter |
| Pilote la machine à états des écrans, et publie l'écran courant. More... | |
| struct | SheetRow |
| Une ligne : ce qu'elle désigne, comment on l'appelle, ce qu'elle vaut. More... | |
| class | SheetRowModel |
| Liste de lignes libellé/valeur, pour un Repeater ou une ListView. More... | |
Typedefs | |
| using | TextureHandle = void* |
| Identité opaque d'une texture liée, du point de vue de la composition. | |
| using | EditorWorkspaceMask = unsigned |
| Ensemble d'espaces, un bit par valeur de hmi::EditorWorkspace. | |
Enumerations | |
| enum class | SoundCatalogError { None , FileNotFound , ParseError , UnsupportedVersion , MalformedStructure } |
| Catégorie d'échec de lecture d'un sounds.json (même patron que hmi::SkinCatalogError/hmi::AnimationCatalogError). More... | |
| enum class | EditorTool { Paint , Rectangle , Selection , Link , TextureAssign , CameraZone } |
| Outil actif dans la grille de l'éditeur, changé via Tab ou la barre d'outils (hmi::EditorActions). More... | |
| enum class | LinkKind { Mechanism } |
| Nature d'une liaison affichée (couleur/libellé distincts dans le panneau et le rendu). More... | |
| enum class | LinkGestureAction { Ignore , SetPending , ReplacePending , Link , Unlink } |
| Action à appliquer sur le brouillon/l'état d'édition suite à un clic de l'outil « Lien ». More... | |
| enum class | PaletteThumbnailSource { Atlas , Skin , MissingTexture } |
| D'où provient la vignette affichée par la palette pour un type de tuile. More... | |
| enum class | PanelId { Palette , Levels , Links , Textures , Planes , PixelCanvas , PixelHistory , PixelPalette } |
| Panneau dockable de l'éditeur. More... | |
| enum class | PixelOperationKind { Brush , Eraser , Fill , Move , FlipHorizontal , FlipVertical , RotateClockwise , RotateCounterClockwise , Paste } |
| Type d'une opération d'historique — détermine sa clé de traduction (EX-REN-033). More... | |
| enum class | PixelTool { Brush , Eraser , Fill , Eyedropper , Selection } |
| Outil actif du canevas pixel art — détermine ce que produisent les gestes de souris (hmi::PixelCanvas) et forme un groupe exclusif distinct de hmi::EditorTool (hmi::EditorActions, TACHE-04). More... | |
| enum class | TextureAssignAction { Ignore , Assign , Remove } |
| Action à appliquer sur le brouillon suite à un clic de l'outil « Texture par instance ». More... | |
| enum class | GameEvent { Jumped , Landed , Dashed , WallContactEnter , SwitchToggled , DoorOpened , DoorClosed , PressurePlatePressed , PressurePlateReleased , BlockPushed , Died , ExitReached , MenuNavigate , MenuConfirm , MenuBack , PauseOpened } |
| Événement discret survenu sur un pas de simulation ou une action d'interface. More... | |
| enum class | AnimationCatalogError { None , FileNotFound , ParseError , UnsupportedVersion , MalformedStructure , IncoherentFrameSize } |
| Catégorie d'échec de lecture d'une description d'animation (même esprit que hmi::SkinCatalogError/core::LevelValidationError). More... | |
| enum class | AssetFamily { Atlas , TileSkin , AutotileSheet , Background , Object , CharacterSheet , Font } |
| Famille d'un asset graphique, qui détermine les dimensions attendues du fichier image. More... | |
| enum class | QuadKind { Sprite , Line } |
| Nature d'une primitive composée : rectangle aligné aux axes, ou segment épais orienté. More... | |
| enum class | PlayerClipKind { Idle , Run , Jump } |
| Identité des trois clips historiques du personnage, côté présentation seulement. More... | |
| enum class | FontMetricsError { None , FileNotFound , ParseError , UnsupportedVersion , MalformedStructure } |
| Catégorie d'échec de lecture d'un fichier de métriques (même esprit que hmi::AnimationCatalogError). More... | |
| enum class | RenderLayer : std::int32_t { Background = 0 , Plane , Shadow , Tile , Object , Player , Foreground , UI , EditorOverlay } |
| Calques de dessin, du plus arrière au plus avant (EX-REN-014, EX-DEC-002). More... | |
| enum class | RenderMode { Physique , Texture } |
| Mode de rendu de la scène : lecture directe des collisions, ou habillage. More... | |
| enum class | SkinMode { Single , Bitmask16 } |
| Manière dont l'asset d'un type de tuile est découpé à l'affichage (EX-EDIT-025). More... | |
| enum class | SkinCatalogError { None , FileNotFound , ParseError , UnsupportedVersion , MalformedStructure } |
| Catégorie d'échec de lecture d'un skins.json (même esprit que core::LevelValidationError). More... | |
| enum class | TextHorizontalAnchor { Left , Center , Right } |
| Ancrage horizontal d'un texte composé (hmi::composeText). More... | |
| enum class | TextVerticalAnchor { Top , Middle , Bottom } |
| Ancrage vertical d'un texte composé (hmi::composeText). More... | |
| enum class | AppearanceSource { Atlas , MissingTexture , Skin , Override } |
| Texture d'où provient l'apparence résolue. More... | |
| enum | NeighborBits : std::uint8_t { NEIGHBOR_UP = 1u << 0 , NEIGHBOR_RIGHT = 1u << 1 , NEIGHBOR_DOWN = 1u << 2 , NEIGHBOR_LEFT = 1u << 3 } |
| Bits du masque de voisinage, un par voisin orthogonal solide. More... | |
| enum class | EditorAction { Save , Undo , Redo , Copy , Paste , Playtest , ToggleGrid , ToggleHelp , Rename , TextureAssignTool } |
| Action d'éditeur logique, remappable indépendamment de la touche physique. More... | |
| enum class | GameAction { MoveLeft , MoveRight , AimUp , AimDown , Jump , Dash , Interact } |
| Action de jeu logique, remappable indépendamment de la touche physique qui la déclenche. More... | |
| enum class | GamepadButton { Up , Down , Left , Right , A , B , X , Y , LeftShoulder , RightShoulder } |
| Bouton (ou direction) manette remappable à une action de jeu (EX-CTRL-002, LOT-30). More... | |
| enum class | Key : std::uint16_t { Backspace = 0x08 , Tab = 0x09 , Enter = 0x0D , Shift = 0x10 , Control = 0x11 , Escape = 0x1B , Space = 0x20 , Left = 0x25 , Up = 0x26 , Right = 0x27 , Down = 0x28 , D0 = 0x30 , A = 0x41 , C = 0x43 , D = 0x44 , E = 0x45 , P = 0x50 , Q = 0x51 , R = 0x52 , S = 0x53 , T = 0x54 , V = 0x56 , W = 0x57 , Y = 0x59 , Z = 0x5A , F1 = 0x70 , F2 = 0x71 , F10 = 0x79 } |
| Touche du clavier, identifiée par son code virtuel Win32. More... | |
| enum class | MouseButton : std::uint8_t { Left = 0 , Right = 1 , Middle = 2 , Count = 3 } |
| Bouton de la souris suivi par l'InputState. More... | |
| enum class | EditorActionGroup { None , LevelTools , PixelTools , PixelCommands } |
| Groupe d'exclusivité d'une action : les outils d'édition forment un groupe exclusif (un seul actif à la fois) ; les commandes n'appartiennent à aucun groupe. More... | |
| enum class | ActionSurface { ToolBarAndMenu , MenuOnly } |
| Surface d'une action (LOT-68, EX-IHM-074). More... | |
| enum class | FontRole { Ui , Identity } |
| Famille de police d'une portée (LOT-68, EX-IHM-070). More... | |
| enum class | EditorWorkspace { Level , Planes , PixelArt } |
| Espace de travail actif. Ils s'excluent : aucun état intermédiaire n'existe. More... | |
| enum class | IconId { ToolPaint , ToolRectangle , ToolSelection , ToolLink , ToolTextureAssign , ToolCameraZone , Save , Playtest , Undo , Redo , ToggleGrid , ResetCamera , ToggleRenderMode , Copy , Paste , Rename , ShortcutsOverview , PixelBrush , PixelEraser , PixelFill , PixelEyedropper , PixelOpen , PixelCreate , PixelSave , PixelSaveAs , PixelSelectionTool , PixelFlipHorizontal , PixelFlipVertical , PixelRotateClockwise , PixelRotateCounterClockwise } |
| Identifiant d'une icône : un par outil d'édition et par commande principale. More... | |
| enum class | IconColorRole { Foreground , Accent } |
| Rôle de couleur d'un trait, résolu depuis les jetons de design au moment du rendu (recoloration automatique avec le thème, y compris après une bascule TACHE-06). More... | |
| enum class | EditorThemeSetting { System , Light , Dark } |
| Réglage choisi par l'utilisateur (menu Affichage de l'éditeur, persisté entre sessions). More... | |
| enum class | EditorThemeMode { Light , Dark } |
| Thème effectivement appliqué au châssis d'édition. More... | |
| enum class | BackdropRole { SkyHigh , SkyMid , SkyLow , Star , StarDim , Moon , MoonCrater , Silhouette , Hill , Ground , GroundEdge , Veil } |
| Rôle de couleur d'un pavé du décor, résolu depuis les jetons au moment du rendu. More... | |
| enum class | RpgScreenId { CharacterSheet , Inventory , QuestJournal , WorldMap , Dialogue , Merchant , GuildBoard , CombatHud , TeamSheet } |
| Les huit écrans du RPG. More... | |
| enum class | RpgSuperposition { PausesGame , WhileWalking } |
| Règle de superposition d'un écran (EX-IHM-091) : ce qui met le jeu en pause et ce qui se consulte en marchant. More... | |
| enum class | RpgBlockKind { Fields , Grid , List , Prose , Portrait , Track , ActionBar } |
| Genres de blocs que le châssis sait peindre. More... | |
| enum class | ScreenId { Menu , Editor , Game , Options , Pause , Credits , RpgScreen } |
| Écran actuellement affiché par la fenêtre principale. More... | |
| enum class | ScreenEvent { OpenMenu , OpenEditor , OpenGame , OpenOptions , CloseOptions , OpenPause , ResumePause , QuitPauseToMenu , OpenCredits , CloseCredits , OpenRpgScreen , CloseRpgScreen } |
| Événement pouvant déclencher une transition d'écran. More... | |
| enum class | Ability |
| Une des six caractéristiques d'un personnage ou d'une créature (EX-DND-010). More... | |
Functions | |
| std::optional< std::string > | soundForEvent (GameEvent event) |
| Associe un hmi::GameEvent à un identifiant de hmi::SoundCatalog. | |
| std::string | serializeSessionLog (const std::vector< core::MemoryLogSink::Entry > &entries) |
| Assemble les messages de log en un texte (une ligne par message). | |
| bool | saveSessionLog (const std::vector< core::MemoryLogSink::Entry > &entries, const std::filesystem::path &path) |
| Enregistre les messages de log de la session dans un fichier. | |
| std::vector< std::string > | listAssetFiles (const std::filesystem::path &directory, const std::string &filterText={}) |
| Liste les fichiers image d'un dossier, filtrés par un texte de recherche. | |
| std::vector< AssetReference > | findSkinCatalogReferences (const SkinCatalog &catalog, const std::string &fileName) |
| Repère toutes les entrées de skins.json qui citent un fichier donné. | |
| std::string | describeReferences (const std::vector< AssetReference > &references) |
| Message d'avertissement listant des références, une par jeu de skins. | |
| EditorStatusLines | editorStatusLines (const EditorStatusContext &context, const Localization &localization) |
Décide le contenu de la barre d'état de l'éditeur pour context. | |
| bool | isValidLevelName (const std::string &name) |
Indique si name peut servir de nom de niveau (donc de nom de fichier Windows). | |
| std::string | trimLevelName (const std::string &name) |
Retire les espaces de bord de name (le nom réellement utilisé une fois confirmé). | |
| LinkSegment | linkSegment (core::GridPosition trigger, core::GridPosition target, int fanIndex=0, int fanCount=1) noexcept |
Calcule le segment reliant le centre de la case trigger au centre de la case target, avec un éventuel décalage perpendiculaire anti-superposition de l'extrémité cible. | |
| ArrowHead | arrowHead (core::Vector2 from, core::Vector2 to) noexcept |
Calcule les deux ailes de la pointe d'une flèche allant de from vers to. | |
| std::vector< LinkRow > | buildLinkRows (const core::LevelDraft &draft) |
| Construit la liste des liaisons d'un brouillon, dans un ordre déterministe. | |
| constexpr bool | isTriggerTile (core::TileType type) noexcept |
| constexpr bool | isLinkTargetTile (core::TileType type) noexcept |
| LinkGestureDecision | resolveLinkClick (std::optional< PendingLink > pending, core::GridPosition clickedCell, core::TileType clickedTileType, bool alreadyLinked) noexcept |
Résout le clic de l'outil « Lien » sur clickedCell selon l'attente courante. | |
| std::vector< MechanismAnimationRow > | buildMechanismAnimationRows (const SkinCatalog &catalog, std::string_view setName, const std::filesystem::path &skinsDirectory) |
| Construit les lignes de la section « Animations », diagnostic de clips manquants compris. | |
| PaletteThumbnail | paletteThumbnail (RenderMode mode, core::TileType type, const core::AtlasRegion &physicalRegion, const SkinCatalog *catalog, std::string_view setName) |
| Choisit la vignette à afficher pour un type de tuile dans la palette. | |
| const std::array< PanelFocusEntry, PANEL_FOCUS_CATALOG_COUNT > & | panelFocusCatalog () |
| std::optional< PanelId > | panelForTool (EditorTool tool) |
| const std::array< PixelPanelFocusEntry, PIXEL_PANEL_FOCUS_CATALOG_COUNT > & | pixelPanelFocusCatalog () |
| std::optional< PanelId > | panelForPixelTool (PixelTool tool) |
| std::vector< std::pair< int, int > > | validAssetSizes (AssetFamily family) |
| Tailles proposées à la création d'un asset de la famille donnée. | |
| bool | isBitmask16Candidate (const DecodedImage &image, int tileSize) noexcept |
true si image a exactement les dimensions d'une planche à raccords bitmask16. | |
| std::optional< AutotileCell > | bitmaskCellAtPixel (const DecodedImage &image, int tileSize, int x, int y) noexcept |
| Case de la planche sous un pixel donné. | |
| DecodedImage | buildAutotileAssemblyPreview (const DecodedImage &sheet, int tileSize) |
| Construit l'aperçu d'assemblage 3×3 démonstratif à partir de la planche en cours. | |
| PixelScreenRect | imagePixelScreenRect (const PixelCanvasView &view, int x, int y) noexcept |
| Rectangle écran du pixel image (x, y), au zoom et décalage de vue donnés. | |
| std::optional< std::pair< int, int > > | screenToImagePixel (const PixelCanvasView &view, int imageWidth, int imageHeight, double screenX, double screenY) noexcept |
| Pixel image sous une position écran donnée. | |
| PixelCanvasRealSize | pixelCanvasRealSize (int imageWidth, int imageHeight, int zoom, double scaleFactor) noexcept |
| Taille en pixels réels du canevas entier à un facteur d'échelle d'affichage donné. | |
| PixelCanvasRealSize | pixelCanvasRealSize (int imageWidth, int imageHeight, const PixelCanvasView &view, double scaleFactor) noexcept |
| Taille en pixels réels du canevas entier, à l'échelle rationnelle d'une vue. | |
| constexpr int | clampPixelCanvasZoom (int zoom) noexcept |
| Zoom borné à [PIXEL_CANVAS_MIN_ZOOM, PIXEL_CANVAS_MAX_ZOOM]. | |
| constexpr int | pixelCanvasZoomIn (int zoom) noexcept |
| Zoom suivant (plus grand), borné — toujours entier. | |
| constexpr int | pixelCanvasZoomOut (int zoom) noexcept |
| Zoom précédent (plus petit), borné — toujours entier. | |
| constexpr bool | pixelCanvasGridVisible (int zoom) noexcept |
| true si la grille de pixels doit être dessinée à ce zoom (PIXEL_CANVAS_GRID_VISIBLE_MIN_ZOOM). | |
| constexpr bool | isValidPixelCanvasDenominator (int denominator) noexcept |
| constexpr double | pixelCanvasScale (const PixelCanvasView &view) noexcept |
| Échelle effective d'une vue : numérateur / dénominateur. | |
| constexpr PixelCanvasView | pixelCanvasZoomIn (const PixelCanvasView &view) noexcept |
| Vue agrandie d'un cran, en remontant l'échelle rationnelle. | |
| constexpr PixelCanvasView | pixelCanvasZoomOut (const PixelCanvasView &view) noexcept |
| Vue réduite d'un cran, en descendant l'échelle rationnelle — sous le 1:1 si besoin. | |
| constexpr bool | pixelCanvasGridVisible (const PixelCanvasView &view) noexcept |
| true si la grille de pixels doit être dessinée pour cette vue : jamais sous le 1:1, où elle couvrirait plus de surface que les pixels qu'elle sépare. | |
| std::string_view | pixelOperationTranslationKey (PixelOperationKind kind) noexcept |
| Clé de traduction décrivant une opération. | |
| PixelRegion | setPixel (DecodedImage &image, int x, int y, std::uint32_t color) |
| Pose un pixel d'une couleur donnée. | |
| PixelRegion | erasePixel (DecodedImage &image, int x, int y) |
| Efface un pixel (alpha nul), sans changer sa couleur RVB. | |
| PixelRegion | drawLine (DecodedImage &image, int x0, int y0, int x1, int y1, std::uint32_t color) |
| Trace une ligne pleine entre deux positions (algorithme de Bresenham). | |
| PixelRegion | eraseLine (DecodedImage &image, int x0, int y0, int x1, int y1) |
| Efface une ligne pleine entre deux positions (même tracé que drawLine, alpha nul plutôt qu'une couleur posée). | |
| PixelRegion | floodFill (DecodedImage &image, int x, int y, std::uint32_t color) |
| Remplit, de proche en proche, la zone connexe (4-connexité) de même couleur que le pixel de départ. | |
| std::optional< std::uint32_t > | pickColor (const DecodedImage &image, int x, int y) noexcept |
| Couleur du pixel à une position donnée (outil pipette). | |
| std::vector< std::uint32_t > | readRegion (const DecodedImage &image, const PixelRegion ®ion) |
| Copie les pixels d'une région, ligne par ligne — capture le « avant » ou l'« après » d'une entrée d'historique (hmi::PixelHistory). | |
| void | writeRegion (DecodedImage &image, const PixelRegion ®ion, const std::vector< std::uint32_t > &data) |
| Écrit des pixels dans une région — inverse de readRegion, utilisé par hmi::PixelHistory pour restaurer un instantané annulé/rétabli. | |
| PixelRegion | flipHorizontal (DecodedImage &image, const PixelRegion ®ion) |
| Retourne une région horizontalement (miroir gauche-droite), en place. | |
| PixelRegion | flipVertical (DecodedImage &image, const PixelRegion ®ion) |
| Retourne une région verticalement (miroir haut-bas), en place. | |
| PixelRegion | rotateClockwise (DecodedImage &image, const PixelRegion ®ion) |
| Pivote le contenu d'une région d'un quart de tour, sens horaire. | |
| PixelRegion | rotateCounterClockwise (DecodedImage &image, const PixelRegion ®ion) |
| Pivote le contenu d'une région d'un quart de tour, sens antihoraire (trois quarts de tour horaires, pour ne pas dupliquer la logique de rotation). | |
| PixelRegion | moveRegion (DecodedImage &image, const PixelRegion ®ion, int dx, int dy) |
| Déplace le contenu d'une région d'un décalage donné. | |
| PixelClipboard | copyRegion (const DecodedImage &image, const PixelRegion ®ion) |
Copie les pixels d'une région dans un presse-papiers autonome (ne référence plus image). | |
| PixelRegion | pasteClipboard (DecodedImage &image, const PixelClipboard &clipboard, int x, int y) |
| Colle un presse-papiers dans l'image, coin haut-gauche à (x, y). | |
| constexpr bool | pixelInBounds (int width, int height, int x, int y) noexcept |
| constexpr PixelRegion | unionPixelRegion (const PixelRegion &a, const PixelRegion &b) noexcept |
| Union de deux régions (la plus petite région couvrant les deux). | |
| std::vector< PixelPaletteExtractionEntry > | extractPalette (const DecodedImage &image) |
| Couleurs effectivement présentes dans une image, dans un ordre déterministe. | |
| std::uint32_t | nearestPaletteColor (std::uint32_t color, const std::vector< std::uint32_t > &palette) noexcept |
Couleur de palette la plus proche de color (mode « contraindre à la palette »). | |
| PlanePixelSize | planePixelSize (int widthUnits, int heightUnits, int pixelsPerUnit) noexcept |
| Dimensions, en pixels, du PNG d'un plan. | |
| std::string | sanitizePlaneBaseName (const std::string &name) |
| Réduit un nom libre à ce qu'un nom de fichier de plan accepte. | |
| std::string | uniquePlaneFileName (const std::string &levelName, const std::vector< std::string > &existing) |
| Compose un nom de fichier de plan unique pour un niveau donné. | |
| std::uint32_t | alphaOver (std::uint32_t below, std::uint32_t above) noexcept |
| Compose un pixel au-dessus d'un autre (alpha-over, alpha non prémultiplié). | |
| DecodedImage | resamplePlane (const DecodedImage &image, int fromPixelsPerUnit, int toPixelsPerUnit) |
| Rééchantillonne une image d'une densité à une autre, par ratio entier. | |
| DecodedImage | buildTileOnionSkin (const core::LevelDraft &draft, int pixelsPerUnit) |
| Construit la pelure d'oignon des tuiles : une couleur plate par type, aux dimensions d'un plan de la densité donnée. | |
| DecodedImage | flattenPlanes (const std::vector< PlaneLayer > &layers, int pixelsPerUnit, int widthUnits, int heightUnits) |
| Aplatit des plans en une seule image, par alpha-over dans l'ordre donné. | |
| std::vector< SkinSection > | buildSkinRows (const SkinCatalog &catalog, std::string_view setName) |
| Construit les lignes du panneau pour un jeu de skins donné. | |
| std::vector< std::string > | listSkinAssets (const std::filesystem::path &skinsDirectory) |
| Liste les fichiers de skins disponibles, par balayage d'un dossier. | |
| void | applySkinAssignment (SkinCatalog &catalog, std::string_view setName, core::TileType type, const std::string &asset, SkinMode mode) |
| Applique une assignation à un catalogue, ou la retire. | |
| std::string | taxonomyLabelKey (const std::string &label) |
| Clé de traduction d'un libellé de la taxonomie. | |
| std::string | localizedTaxonomyLabel (const Localization *loc, const std::string &label) |
| Libellé de taxonomie traduit dans la langue active. | |
| TextureAssignDecision | resolveTextureAssignClick (core::GridPosition clickedCell, core::TileType clickedTileType, const std::optional< std::string > &existingOverride, const std::optional< std::string > &selectedAsset, bool rightClick) noexcept |
Résout le clic de l'outil « Texture par instance » sur clickedCell. | |
| int | thumbnailPixelSize (int logicalSize, double scaleFactor) noexcept |
| Taille en pixels réels pour une taille logique et un facteur d'échelle d'affichage donnés. | |
| std::vector< TileCategory > | tileTaxonomy () |
| Taxonomie complète des types de tuiles peignables, en catégories/sous-groupes. | |
| std::vector< std::string > | composeDiagnosticsHudLines (const DiagnosticsMeasurements &measurements, const Localization &localization) |
| Compose les lignes du compteur de diagnostic à partir de valeurs déjà mesurées. | |
| std::vector< GameEvent > | detectMechanismEvents (const MechanismEventState &previous, const MechanismEventState ¤t, const std::vector< bool > &isContinuous) |
| Détecte les transitions des mécanismes entre deux pas de simulation consécutifs. | |
| std::optional< GameEvent > | detectOutcomeEvent (core::LevelOutcome outcome) |
| Traduit l'issue d'un pas de simulation en événement. | |
| std::vector< std::string > | gameHudLines (const std::string &levelName, const Localization &localization, bool overlappingKey=false) |
| Lignes à afficher pour l'affichage tête haute d'un pas de simulation donné. | |
| const char * | assetFamilyName (AssetFamily family) noexcept |
| Nom lisible d'une famille d'assets, utilisé dans les messages de journalisation. | |
| AssetDimensionContract | assetDimensionContract (AssetFamily family) noexcept |
| Contrat de dimensions d'une famille d'assets. | |
| std::string | describeContract (const AssetDimensionContract &contract) |
| Description en français des dimensions attendues (« 16×16 px », « multiple de 16 px… »). | |
| AssetValidation | validateAsset (AssetFamily family, const std::string &fileName, int width, int height) |
| Valide les dimensions d'un asset décodé contre le contrat de sa famille (EX-REN-007). | |
| BackgroundFit | computeBackgroundFit (float imageWidth, float imageHeight, float targetWidth, float targetHeight) noexcept |
| Calcule le recadrage UV d'une image pour couvrir un rectangle cible sans déformation. | |
| void | composeBackground (ComposedScene &scene, const BackgroundTexture &background, int levelWidth, int levelHeight, RenderMode mode) |
| Compose le fond du niveau sur RenderLayer::Background, s'il y a lieu. | |
| void | triggerScreenShake (ScreenShakeState &state, float amplitudePixels, float duration) noexcept |
| Déclenche (ou relance) une secousse d'écran. | |
| void | advanceScreenShake (ScreenShakeState &state, float fixedDelta) noexcept |
| Avance une secousse d'écran d'un pas fixe. | |
| core::Vector2 | screenShakeOffset (const ScreenShakeState &state) noexcept |
| Décalage courant d'une secousse d'écran, en pixels entiers (EX-ARCH-022). | |
| std::optional< std::size_t > | activeCameraZoneIndex (const std::vector< core::CameraZone > &zones, core::GridPosition position) noexcept |
Indice de la zone active de zones à position. | |
| std::int32_t | depthSortOrder (float footWorldY) noexcept |
| Ordre de profondeur d'une primitive, à partir du pied de son quad. | |
| std::string | formatSceneStatistics (const SceneStatistics &statistics) |
| Résumé des compteurs d'une image, pour la journalisation de diagnostic (EX-NFR-005). | |
| core::Rect | spriteQuadBounds (const SpriteQuad &quad) noexcept |
| Boîte englobante d'un rectangle texturé, en unités monde. | |
| core::Rect | lineQuadBounds (const LineQuad &quad) noexcept |
| Boîte englobante d'un segment épais, en unités monde. | |
| void | composeWorldSprites (ComposedScene &scene, core::World &world, RenderMode mode, const SceneTextures &textures, float interpolationAlpha, const LayerVisibility &visibility=LayerVisibility{}) |
| Compose les entités affichables d'un monde ECS en primitives. | |
| FollowCameraState | advanceFollowCamera (const FollowCameraState &previous, core::Vector2 characterPosition, core::Vector2 facing, const core::Rect &levelBounds, core::Vector2 viewHalfExtent, float fixedDelta) noexcept |
| Avance la caméra de suivi d'un pas fixe. | |
| bool | isStatefulMechanism (core::TileType type) noexcept |
| Indique si un type de tuile est un mécanisme à état, dont l'apparence dépend d'une donnée lue en lecture seule dans Core (EX-ARCH-012). | |
| std::optional< std::string > | mechanismTargetClip (core::TileType type, bool active) noexcept |
| Nom du clip d'état cible d'un mécanisme, d'après son type et son état logique courant. | |
| std::optional< std::string > | mechanismTransitionClip (core::TileType type, bool wasActive, bool isActive) noexcept |
| Nom du clip de transition joué une fois lors d'un changement d'état (LOT-47 TACHE-02), s'il y a lieu. | |
| std::vector< std::string > | mechanismExpectedClips (core::TileType type) |
| Noms de clip attendus par la correspondance pour un type de mécanisme, dans l'ordre du tableau ci-dessus (utilisé par le diagnostic du panneau « Textures », LOT-47 TACHE-04). | |
| core::AtlasRegion | advanceMechanismVisual (MechanismVisualState &state, const AnimationDescription &description, core::TileType type, bool active, const std::string &assetKey, float fixedDelta, std::set< std::string > &warnedMissingClips) |
| Fait progresser l'animation d'une instance de mécanisme d'un pas fixe : détecte un changement d'état, choisit le clip approprié (transition ou état cible, avec repli sur clip manquant), avance l'image courante, et renvoie la région à afficher (LOT-47 TACHE-02). | |
| float | mechanismDiagnosticAlpha (RenderMode mode, bool active, float activeAlpha, float inactiveAlpha) noexcept |
| Alpha de diagnostic, réservé au mode Physique (LOT-47 TACHE-03). | |
| ProceduralAtlasImage | buildMissingTextureImage (int size=MISSING_TEXTURE_SIZE) |
| Génère, en mémoire, la texture de repli « asset manquant » : un damier magenta/noir. | |
| std::string | missingTextureWarning (const std::string &fileName) |
| Message d'avertissement émis lorsqu'un asset attendu est introuvable ou refusé. | |
| core::Vector2 | parallaxRenderPosition (core::Vector2 modelPosition, core::Vector2 factor, const core::Rect &cameraBounds) noexcept |
| Calcule la position de rendu d'un contenu, décalée par sa parallaxe. | |
| core::Vector2 | parallaxModelPosition (core::Vector2 renderPosition, core::Vector2 factor, const core::Rect &cameraBounds) noexcept |
| Inverse de parallaxRenderPosition : retrouve la position modèle équivalente à un point exprimé en espace de rendu (LOT-50 TACHE-02). | |
| core::Vector2 | clampPlaneOffset (core::Vector2 offset, const core::Rect &planeBounds, const core::Rect &cameraBounds) noexcept |
| Borne le décalage d'un plan pour qu'il couvre toujours le cadrage. | |
| core::Vector2 | roundToScreenPixel (core::Vector2 worldPosition, float pixelsPerWorldUnit) noexcept |
| Arrondit une position monde au pixel écran le plus proche, pour un zoom pixel art net. | |
| constexpr bool | planeParallaxActive (core::CameraFramingMode mode, bool levelFlag) noexcept |
| Décide si la parallaxe des plans s'applique, selon le mode de cadrage et le drapeau du niveau (EX-DEC-043, EX-REN-016). | |
| void | composeParticles (ComposedScene &scene, core::World &world, RenderMode mode, const SceneTextures &textures) |
| Compose un quad par particule vivante, teinté selon la durée de vie restante et le calque de son effet. | |
| RenderLayer | planeRenderLayer (core::PlaneDepth depth) noexcept |
| Projette la profondeur d'un plan sur le calque de rendu correspondant. | |
| void | composePlanes (ComposedScene &scene, const std::vector< core::Plane > &planes, const std::vector< PlaneTexture > &textures, int levelWidth, int levelHeight, RenderMode mode, const PlaneVisibility &visibility=PlaneVisibility{}, const PlaneParallax ¶llax=PlaneParallax{}) |
| Compose les plans picturaux d'un niveau, dans l'ordre déclaré. | |
| std::size_t | planeTextureMemoryBytes (const core::Plane &plane, int levelWidth, int levelHeight) noexcept |
| Mémoire de texture qu'un plan exige du format, en octets (EX-NFR-043). | |
| std::size_t | planesTextureMemoryBytes (const std::vector< core::Plane > &planes, int levelWidth, int levelHeight) noexcept |
| Somme de hmi::planeTextureMemoryBytes sur tous les plans d'un niveau. | |
| std::vector< PlaneTexture > | resolvePlaneTextures (TextureCache &cache, const std::filesystem::path &directory, const std::vector< core::Plane > &planes) |
| Résout les images des plans d'un niveau (accès disque/GPU), dans l'ordre de la liste. | |
| PlayerSpriteQuad | computePlayerSpriteQuad (core::Vector2 imageSizePixels, core::Vector2 hitboxSize) |
| Calcule le quad d'affichage du personnage à partir de la taille de l'image et de la hitbox, par ancrage centre-bas (LOT-48 TACHE-01). | |
| const std::vector< std::string > & | proceduralPlayerClipNames () |
| Noms des clips que l'atlas procédural sait dessiner (Idle/Run/Jump, LOT-18) : seule source de vérité, partagée avec hmi::PlayerClipKind — traitée comme une « spritesheet » n'en déclarant que trois par hmi::resolveDeclaredPlayerClip. | |
| std::string | resolveDeclaredPlayerClip (const std::vector< std::string > &declaredNames, std::string_view requested) |
| Résout un nom de clip demandé vers le plus proche déclaré dans un jeu partiel (LOT-48 TACHE-01/TACHE-02). | |
| int | flatPlayerFrameIndex (PlayerClipKind clip, int frameIndex) |
| Index à plat (0-based) d'une image dans la grille sous les tuiles : Idle (0..PLAYER_IDLE_FRAME_COUNT-1), puis Run, puis Jump. | |
| ProceduralAtlasImage | buildProceduralAtlasImage () |
| Génère, en mémoire, l'atlas procédural historique (grille de tuiles + images du personnage), de façon déterministe. | |
| char32_t | nextUtf8CodePoint (std::string_view text, std::size_t &index) noexcept |
| Décode le point de code UTF-8 suivant d'une chaîne. | |
| TextExtent | measureText (const FontMetrics &metrics, std::string_view text, float scale=1.0f) noexcept |
| Largeur et hauteur qu'occuperait text avec metrics, à l'échelle scale. | |
| ProceduralFont | buildProceduralFont () |
| Génère, en mémoire, une police bitmap minimale et déterministe (repli sans asset). | |
| FontMetricsResult | loadFontMetricsFromString (std::string_view json) |
| Lit des métriques de police depuis une chaîne JSON. | |
| FontMetricsResult | loadFontMetricsFromFile (const std::filesystem::path &path) |
| Lit des métriques de police depuis un fichier. | |
| AssetValidation | validateFontMetricsAgainstTexture (const FontMetrics &metrics, const std::string &fileName, int textureWidth, int textureHeight) |
| Valide la cohérence entre des métriques et les dimensions décodées du PNG associé. | |
| constexpr bool | sortsByDepth (RenderLayer layer) noexcept |
| Le calque appartient-il à la bande de profondeur ? | |
| constexpr std::int32_t | renderBand (RenderLayer layer) noexcept |
| Bande de tri d'un calque : Object et Player en partagent une seule. | |
| constexpr const char * | renderLayerName (RenderLayer layer) noexcept |
| Nom lisible d'un calque, pour la journalisation et les messages d'échec de test. | |
| const char * | renderModeName (RenderMode mode) noexcept |
| Nom persisté d'un mode de rendu (valeur écrite dans les préférences). | |
| RenderMode | renderModeFromName (const std::string &name) noexcept |
| Mode de rendu correspondant à un nom persisté. | |
| void | composeShadows (ComposedScene &scene, core::World &world, RenderMode mode, const SceneTextures &textures, float interpolationAlpha, const core::TileMap *doorCollision=nullptr) |
| Compose une ombre décalée pour chaque tuile physique visible, sur RenderLayer::Shadow. | |
| const char * | skinModeName (SkinMode mode) noexcept |
| Nom persisté d'un mode de skin (valeur écrite dans skins.json). | |
| std::optional< SkinMode > | skinModeFromName (std::string_view name) noexcept |
| Mode de skin correspondant à un nom lu dans un fichier. | |
| void | submitComposedScene (SpriteBatch &batch, const DirectX::XMFLOAT4X4 &projection, const ComposedScene &scene) |
| Soumet une scène composée au pipeline de dessin, une passe par groupe de texture. | |
| SceneTextures | sceneTextures (const TextureAtlas &atlas, TextureCache &cache, const SkinCatalog *skins=nullptr, const std::string &skinSet={}, const std::vector< core::TileTextureOverride > &textureOverrides={}, const std::unordered_map< std::string, core::Animation > &tileAnimations={}) |
| Textures liables par la composition d'une scène : atlas, damier de repli et skins. | |
| BackgroundTexture | resolveBackgroundTexture (const std::optional< std::string > &background, TextureCache &cache) |
| Résout la texture de fond d'un niveau (accès TextureCache/GPU, LOT-44). | |
| void | advanceTileAnimations (const SkinCatalog *skins, const std::string &skinSet, TextureCache &cache, float deltaSeconds, std::unordered_map< std::string, core::Animation > &tileAnimations, std::set< std::string > &warnedExclusions) |
| Avance l'horloge d'animation partagée des tuiles animées d'un jeu de skins courant (LOT-46 TACHE-05). | |
| DirectX::XMFLOAT4X4 | screenProjectionMatrix (int viewportWidth, int viewportHeight) noexcept |
| Construit la projection écran → clip du calque UI, indépendante de Camera2D. | |
| void | composeText (ComposedScene &scene, const FontMetrics &metrics, TextureHandle texture, int textureWidth, int textureHeight, std::string_view text, float x, float y, float scale, const core::Color &tint, TextAnchor anchor={}, std::int32_t sortOrder=0) |
| Compose une chaîne en quads sur le calque UI, ancrée à une position écran. | |
| void | composeText (ComposedScene &scene, const BitmapFont &font, std::string_view text, float x, float y, float scale, const core::Color &tint, TextAnchor anchor={}, std::int32_t sortOrder=0) |
| Raccourci de hmi::composeText prenant directement une hmi::BitmapFont. | |
| const LoadedTexture * | resolveOrPlaceholder (TextureCache &cache, const std::string &fileName, AssetFamily family) |
| Obtient la texture d'un asset, ou le repli en damier magenta à défaut. | |
| std::optional< DecodedImage > | decodeImageFile (const std::filesystem::path &path) |
| Décode un fichier image (PNG au minimum) en pixels RGBA. | |
| bool | encodeImageFile (const std::filesystem::path &path, const DecodedImage &image) |
| Écrit un fichier PNG depuis des pixels RGBA déjà en mémoire — symétrique de decodeImageFile. | |
| std::optional< LoadedTexture > | createTexture (const RhiContext &context, int width, int height, const std::vector< std::uint32_t > &pixels) |
| Crée une texture GPU à partir de pixels RGBA déjà décodés. | |
| std::optional< LoadedTexture > | loadTextureFromFile (const RhiContext &context, const std::filesystem::path &path) |
| Décode un fichier image puis crée la texture GPU correspondante. | |
| std::optional< TileAppearance > | resolveTileAppearance (RenderMode mode, const core::AtlasRegion &physicalRegion, const TileSkinTag *tag, const SceneTextures &textures, bool skinVisible=true, bool overrideVisible=true) noexcept |
| Résout l'apparence d'une entité affichée selon le mode de rendu courant. | |
| bool | animationExcludedForTile (SkinMode mode, core::TileType type) noexcept |
| Indique si la combinaison (mode de skin, type de tuile) exclut l'animation (LOT-46 TACHE-05). | |
| std::uint8_t | solidNeighborMask (const core::TileMap &tiles, int column, int row) noexcept |
| Calcule le masque de voisinage solide d'une case de la grille. | |
| AutotileCell | autotileCell (std::uint8_t mask) noexcept |
| Case de la planche 4×4 correspondant à un masque de voisinage. | |
| AutotileCell | autotileRepresentativeCell () noexcept |
| Case représentative d'une planche : l'intérieur plein (quatre voisins solides). | |
| std::string_view | autotileConfigurationLabelKey (std::uint8_t mask) noexcept |
| Clé de traduction décrivant la configuration de voisinage d'un masque, pour l'atelier pixel art (LOT-54 TACHE-08, EX-REN-033). | |
| std::array< std::uint8_t, 9 > | autotileAssemblyMasks () noexcept |
| Masques des neuf cases d'un assemblage 3×3 démonstratif (LOT-54 TACHE-08). | |
| bool | hasSilhouette (core::TileType type) noexcept |
Indique si type a une silhouette, c'est-à-dire une matière qui n'occupe pas toute la case et qu'il faut détourer à l'affichage. | |
| bool | isInsideSilhouette (core::TileType type, int localX, int localY, int tileSize) noexcept |
Indique si le pixel (localX, localY) d'une case appartient à la matière de type. | |
| void | applySilhouetteMask (core::TileType type, int width, int height, std::vector< std::uint32_t > &pixels) |
| Applique la silhouette d'un type à une image carrée, en rendant transparent l'extérieur. | |
| core::AtlasRegion | regionForTile (core::TileType type) |
| Région d'atlas (couleur procédurale) associée à un type de tuile. | |
| std::optional< std::string > | textureOverrideAt (const std::vector< core::TileTextureOverride > &overrides, core::GridPosition position) |
| Cherche la surcharge de texture assignée à une case précise (EX-EDIT-043, LOT-45). | |
| std::string | gamepadButtonDisplayName (GamepadButton button) |
| Nom lisible d'un bouton manette, pour l'affichage dans l'écran de remappage. | |
| std::optional< GamepadButton > | capturedGamepadButton (const InputState &input) |
| Cherche le premier bouton manette pressé cette frame, pour la capture d'un remappage. | |
| constexpr bool | gamepadProbeDue (bool wasConnected, std::chrono::steady_clock::duration sinceLastProbe) noexcept |
| Faut-il re-sonder XInput maintenant ? | |
| std::string | keyDisplayName (Key key) |
| Nom lisible d'une touche, pour l'affichage dans les écrans de remappage (LOT-29) et le panneau d'aide de l'éditeur (EX-EDIT-015). | |
| std::optional< Key > | capturedKey (const InputState &input) |
| Cherche la première touche pressée cette frame, pour la capture d'un remappage. | |
| core::PlayerInput | toPlayerInput (const InputState &input, const GameKeyBindings &gameKeyBindings, const GamepadBindings &gamepadBindings) |
| Traduit l'état d'entrée en core::PlayerInput, dissocié des touches/boutons physiques (EX-CTRL-010, EX-CTRL-012). | |
| std::optional< hmi::Key > | qtKeyToHmiKey (int qtKey) |
| Traduit un code Qt::Key en hmi::Key. | |
| int | hmiKeyToQtKey (hmi::Key key) |
| Traduit un hmi::Key en code Qt::Key, inverse de qtKeyToHmiKey (LOT-57 TACHE-04). | |
| const std::array< EditorActionSpec, EDITOR_ACTION_CATALOG_COUNT > & | editorActionCatalog () |
| const EditorActionSpec & | editorActionSpec (IconId id) |
| std::optional< EditorTool > | editorActionTool (IconId id) |
| IconId | editorActionForTool (EditorTool tool) |
| std::optional< PixelTool > | editorActionPixelTool (IconId id) |
| IconId | editorActionForPixelTool (PixelTool tool) |
| const std::array< KeyBindingIconEntry, KEY_BINDING_ICON_COUNT > & | keyBindingIconCatalog () |
| IconId | iconForKeyBindingAction (EditorAction action) |
| std::optional< EditorAction > | keyBindingActionForIcon (IconId id) |
| void | applyApplicationStyle () |
| Choisit explicitement le style Qt de l'application (non natif, condition pour que la palette et la feuille de style s'appliquent à l'ensemble des contrôles). | |
| QPalette | buildApplicationPalette (const DesignTokens &tokens) |
| Construit une QPalette complète — groupes actif, inactif et désactivé — à partir d'un jeu de jetons. | |
| std::string | resolvedFontFamily (FontRole role) |
Nom de famille effectivement enregistré pour la police de corps de role, ou une chaîne vide si l'enregistrement a échoué (l'appelant emploie alors une famille générique). | |
| void | applyStyleSheet (const DesignTokens &editorTokens) |
Charge le modèle de feuille de style du châssis d'édition (:/resources/theme-editor.qss), le substitue avec editorTokens et l'applique à l'application. | |
| void | applyFont () |
| Enregistre les polices embarquées auprès de Qt et applique la famille du châssis d'édition comme police par défaut de l'application (Assets/Fonts/) : | |
| EditorThemeSetting | editorThemeSetting () |
| void | setEditorThemeSetting (EditorThemeSetting setting) |
Persiste setting (QSettings), relu au démarrage suivant. | |
| bool | systemPrefersDarkTheme () |
| const DesignTokens & | currentEditorTokens () |
| void | applyEditorTheme () |
| Applique le thème complet du châssis d'édition (portée variable) : police, palette puis feuille de style, tous dérivés des jetons actuellement effectifs (currentEditorTokens()). | |
| void | reapplyEditorTheme () |
| Réapplique la palette et la feuille de style (mais pas la police, inchangée par le thème) depuis currentEditorTokens() — bascule à chaud (LOT-56 TACHE-06), sans reconstruire les widgets. | |
| DesignColor | mixColor (DesignColor from, DesignColor to, float ratio) noexcept |
| const IdentityBaseScale & | identityBaseScale () noexcept |
| const char * | genericCssFamily (FontRole role) noexcept |
| const DesignTokens & | identityTokens () noexcept |
| Jetons de l'identité du jeu (menu principal, écran Options, jeu) : invariants, ne suivent jamais aucun réglage d'affichage (EX-IHM-050). | |
| const DesignTokens & | editorDarkTokens () noexcept |
| Jetons du châssis d'édition en thème sombre (défaut) : variables, editorLightTokens() (LOT-56 TACHE-06) en fournit un second jeu. | |
| const DesignTokens & | editorLightTokens () noexcept |
| Jetons du châssis d'édition en thème clair (LOT-56 TACHE-06) : mêmes rôles, mêmes échelles que editorDarkTokens() — seules les couleurs diffèrent, et pas par simple inversion (les écarts de luminosité entre bordures/lignes alternées/fond diffèrent en clair et en sombre). | |
| DesignColor | viewportClearColor (bool editorMode, const DesignTokens &activeEditorTokens) noexcept |
| Couleur d'effacement du viewport (GameViewport), dérivée des jetons plutôt que d'une valeur littérale locale : fond de la portée variable en édition (suivant le thème actif de l'éditeur, LOT-56 TACHE-06), fond de la portée invariante en jeu et en essai — la seule surface qui appartient tour à tour aux deux portées. | |
| std::string | toCssColor (DesignColor color) |
| Conversion pure : couleur -> chaîne CSS hexadécimale "#rrggbb" (minuscules, sans alpha — les feuilles de style Qt n'acceptent l'alpha que via rgba()). | |
| std::string | toCssRgba (DesignColor color) |
| Conversion pure : couleur -> chaîne CSS "rgba(r, g, b, a)", composantes entières 0-255 (les feuilles de style Qt expriment l'alpha sur la même échelle que les autres composantes). | |
| double | relativeLuminance (DesignColor color) noexcept |
| Luminance relative WCAG d'une couleur (0 = noir, 1 = blanc), pour le calcul de contraste. | |
| double | contrastRatio (DesignColor a, DesignColor b) noexcept |
| Rapport de contraste WCAG entre deux couleurs (1 = aucun contraste, 21 = noir sur blanc). | |
| std::unordered_map< std::string, std::string > | buildStyleSheetValues (const DesignTokens &editorTokens, int identityScale=1) |
| Table de substitution marqueur -> valeur pour le modèle de feuille de style (LOT-56 TACHE-02), à partir d'un jeu de jetons du châssis d'édition (portée variable) ; les marqueurs de préfixe "identity." sont toujours résolus depuis identityTokens() (portée invariante). | |
| WorkspaceDressing | dressingForWorkspace (EditorWorkspace workspace) noexcept |
| EditorWorkspaceMask | workspacesForPanel (PanelId panel) noexcept |
Espaces dans lesquels panel est affiché. | |
| EditorWorkspace | workspaceForTool (EditorTool) noexcept |
| EditorWorkspace | workspaceForPixelTool (PixelTool) noexcept |
| constexpr EditorWorkspaceMask | workspaceBit (EditorWorkspace workspace) noexcept |
| constexpr bool | workspaceMaskContains (EditorWorkspaceMask mask, EditorWorkspace workspace) noexcept |
| FontFamilyResolution | resolveFontFamily (bool fontRegistered, const std::string &embeddedFamilyName) |
| Choisit la famille de police à employer pour le corps de l'IHM. | |
| IconGeometry | iconGeometry (IconId id) |
| Décrit la géométrie d'une icône, en espace normalisé. | |
| StyleSheetSubstitutionResult | substituteStyleSheetTemplate (const std::string &templateText, const std::unordered_map< std::string, std::string > &values) |
Remplace chaque marqueur dollar-accolade de templateText par sa valeur dans values. | |
| QIcon | themeIcon (IconId id, int pixelSize, const DesignTokens &tokens) |
| Peint une icône à la taille demandée, recolorée depuis les jetons. | |
| EditorThemeMode | resolveEffectiveEditorTheme (EditorThemeSetting setting, bool systemPrefersDark) noexcept |
| Résout le thème effectif à appliquer. | |
| std::filesystem::path | executableDirectory () |
| Dossier contenant l'exécutable en cours, pour localiser les ressources copiées à côté (niveaux, catalogues de traduction, logs). | |
| std::map< std::string, std::string > | characterSheetValues (const CharacterSheetContext &context) |
| DemonstrationCharacter | loadDemonstrationValues () |
| Charge le personnage de démonstration livré en donnée, et calcule ses deux tables. | |
| int | identityScaleFor (int windowLogicalHeight) noexcept |
| Facteur d'agrandissement des écrans du jeu pour une hauteur de fenêtre donnée. | |
| int | identityScaleForDisplay (int windowLogicalHeight, int availableLogicalHeight) noexcept |
| Facteur d'agrandissement borné par la zone d'affichage réellement disponible (EX-IHM-081). | |
| void | splitPurse (int copper, int &gold, int &silver, int &rest) |
| Répartit une somme en pièces de cuivre entre or, argent et cuivre. | |
| std::map< std::string, std::string > | inventoryValues (const InventoryContext &context) |
| std::string | keyHintText (const std::vector< KeyHint > &hints, const DesignTokens &tokens, int scale) |
| Compose la ligne de rappels en texte enrichi. | |
| std::vector< BackdropQuad > | menuBackdropQuads (int width, int height, int scale) |
| Pavés du décor, dans l'ordre de dessin (les derniers recouvrent les premiers). | |
| std::span< const RpgScreenDescriptor > | rpgScreens () noexcept |
| const RpgScreenDescriptor & | rpgScreenDescriptor (RpgScreenId screen) noexcept |
| RpgScreenId | nextRpgScreen (RpgScreenId screen) noexcept |
| RpgScreenId | previousRpgScreen (RpgScreenId screen) noexcept |
| bool | pausesGame (RpgScreenId screen) noexcept |
| std::string | ruleLabel (std::string_view key, const std::string &language) |
| Nom lisible d'un terme de règle — caractéristique, emplacement d'équipement, condition. | |
| std::string | activeLanguage () |
| ScreenDressing | dressingFor (ScreenId screen) noexcept |
| std::optional< ScreenState > | resolveTransition (const ScreenState ¤t, ScreenEvent event) noexcept |
| Résout une transition d'écran à partir de l'état courant et d'un événement. | |
| TEST (MechanismTransitionsTest, PremierCalculRejointEtatCibleSansTransition) | |
| Le tout premier calcul rejoint directement l'état cible, sans jouer de transition : une porte déjà ouverte au chargement du niveau doit apparaître ouverte, pas s'ouvrir sous les yeux du joueur comme si un interrupteur venait d'être actionné. | |
| TEST (MechanismTransitionsTest, ChangementDetatDeclencheLaTransitionUneSeuleFois) | |
| Un changement d'état déclenche la transition une seule fois : les pas suivants la font progresser jusqu'à l'état cible au lieu de la relancer depuis sa première image. | |
| TEST (MechanismTransitionsTest, ClipDeTransitionAbsentBasculeDirectementSansAvertissement) | |
| Un asset qui ne fournit que les deux états, sans clips de transition, bascule directement et en silence : n'animer que les états est un choix d'artiste légitime, pas une erreur à signaler. | |
| TEST (MechanismTransitionsTest, ClipDEtatAbsentReplieEtJournaliseUneSeuleFois) | |
| Un clip d'état manquant, lui, se replie et se journalise — mais une seule fois par couple (asset, clip manquant), pas par instance : un niveau posant cinquante portes du même asset incomplet produirait sinon cinquante fois le même message. | |
| TEST (MechanismTransitionsTest, AucunChangementNeReinitialisePasLimageEnCours) | |
| À état inchangé, un appel supplémentaire ne remet pas l'image courante à zéro : c'est l'invariant qui rend le calcul appelable à chaque frame de rendu sans figer l'animation. | |
| TEST (MechanismTransitionsTest, SeuleLaPorteTransitionneLesAutresBasculentDirectement) | |
| Seule la porte a des clips de transition ; un interrupteur bascule directement entre ses deux états, silencieusement. | |
Variables | |
| constexpr std::size_t | EDITOR_TOOL_COUNT = 6 |
| Nombre d'outils d'édition, déclaré au plus près de l'énumération qu'il compte. | |
| constexpr core::TileType | MECHANISM_ANIMATION_TYPES [] |
| Les familles de mécanismes à état dont l'apparence est pilotée par un clip (LOT-47), dans l'ordre où elles sont proposées par la section « Animations ». | |
| constexpr std::size_t | PANEL_COUNT = 8 |
| Nombre de panneaux, declare au plus pres de l'enumeration qu'il compte. | |
| constexpr int | PANEL_FOCUS_CATALOG_COUNT = 2 |
| Nombre d'entrées de la table (tous les outils n'ont pas de panneau dédié). | |
| constexpr int | PIXEL_PANEL_FOCUS_CATALOG_COUNT = 5 |
| Nombre d'entrées de la table des outils de canevas (les cinq outils du canevas mettent tous en avant le même panneau : on édite toujours en le voyant). | |
| constexpr int | PIXEL_CANVAS_MIN_ZOOM = 1 |
| Zoom minimal (1 pixel image = 1 pixel écran) et maximal admis par les commandes de zoom du canevas — toujours entier, pour que les pixels restent carrés (EX-ARCH-022). | |
| constexpr int | PIXEL_CANVAS_MAX_ZOOM = 32 |
| constexpr int | PIXEL_CANVAS_GRID_VISIBLE_MIN_ZOOM = 4 |
| Facteur de zoom à partir duquel la grille de pixels est dessinée : en-deçà, elle ne ferait que du bruit visuel sur des pixels trop petits pour la distinguer du contenu. | |
| constexpr int | PIXEL_CANVAS_MAX_DENOMINATOR = 8 |
| Dénominateur de zoom maximal : au-delà, un pixel image occuperait moins d'un huitième de pixel écran, et le repère cesserait d'être lisible. | |
| const std::string | PLANE_FILE_EXTENSION = ".png" |
| Extension des fichiers de plan. Un plan est une image, toujours écrite en PNG. | |
| constexpr float | DIAGNOSTICS_FPS_WINDOW_SECONDS = 0.5f |
| Fenêtre de la moyenne glissante de cadence, en secondes : assez courte pour rester réactive à une vraie dégradation, assez longue pour lisser le bruit d'une image à l'autre. | |
| constexpr int | GAME_EVENT_COUNT = static_cast<int>(GameEvent::PauseOpened) + 1 |
| Nombre de valeurs de GameEvent — pour les tests d'exhaustivité (parcours de l'énumération). | |
| const std::string | FONTS_SUBDIRECTORY = "Fonts/" |
| Sous-dossier des assets de police, relatif au dossier d'assets (LOT-52). | |
| constexpr float | LANDING_SHAKE_AMPLITUDE_PIXELS = 2.0f |
| Amplitude conservatrice de la secousse d'écran à un atterrissage lourd (LOT-53 TACHE-03) : discrète, un jeu de plateforme précis devient injouable si l'écran bouge trop. | |
| constexpr float | DEATH_SHAKE_AMPLITUDE_PIXELS = 3.0f |
| Amplitude de la secousse à la mort du personnage : légèrement plus marquée que l'atterrissage. | |
| constexpr float | SCREEN_SHAKE_DURATION = 0.2f |
| Durée de toute secousse d'écran, en secondes – brève par construction. | |
| constexpr float | DEPTH_SUBDIVISIONS_PER_UNIT = 16.0f |
| Sous-divisions de profondeur par unité monde, pour la quantification du tri par Y. | |
| constexpr float | FOLLOW_DEAD_ZONE_HALF_WIDTH_UNITS = 1.5f |
| Demi-taille de la zone morte, en unités monde : le personnage se déplace librement dans ce carré centré sur le point suivi sans faire bouger la caméra – ce qui supprime le tremblement permanent d'une caméra qui collerait exactement au personnage. | |
| constexpr float | FOLLOW_DEAD_ZONE_HALF_HEIGHT_UNITS = 1.5f |
| constexpr float | FOLLOW_ANTICIPATION_DISTANCE_UNITS = 2.5f |
| Distance d'anticipation dans le sens du déplacement, en unités monde. | |
| constexpr float | FOLLOW_SMOOTHING_TIME_CONSTANT_SECONDS = 0.15f |
| Temps de réponse (lissage exponentiel) du centre retenu vers sa cible, en secondes. | |
| constexpr float | FOLLOW_ANTICIPATION_TIME_CONSTANT_SECONDS = 0.25f |
| Temps de réponse de l'inversion de l'anticipation au changement de sens, en secondes – plus lent que le lissage principal, pour que l'inversion se voie comme un mouvement, pas un saut. | |
| constexpr std::size_t | RENDER_LAYER_COUNT |
| Nombre de valeurs de hmi::RenderLayer — dimensionne un tableau indexé par la valeur plutôt que par une liste de champs écrite à la main (voir hmi::LayerVisibility). | |
| constexpr const char * | MECHANISM_CLIP_DOOR_CLOSED = "closed" |
| Noms de clip conventionnels, documentés dans Source/Elements/Assets/README.md — c'est le contrat qu'un auteur d'asset doit respecter pour que son animation soit reconnue. | |
| constexpr const char * | MECHANISM_CLIP_DOOR_OPENING = "opening" |
| constexpr const char * | MECHANISM_CLIP_DOOR_OPEN = "open" |
| constexpr const char * | MECHANISM_CLIP_DOOR_CLOSING = "closing" |
| constexpr const char * | MECHANISM_CLIP_SWITCH_INACTIVE = "inactive" |
| constexpr const char * | MECHANISM_CLIP_SWITCH_ACTIVE = "active" |
| constexpr const char * | MECHANISM_CLIP_PLATE_RELEASED = "released" |
| constexpr const char * | MECHANISM_CLIP_PLATE_PRESSED = "pressed" |
| constexpr const char * | MECHANISM_CLIP_KEY_PRESENT = "present" |
| constexpr const char * | MECHANISM_CLIP_KEY_COLLECTED = "collected" |
| constexpr const char * | MECHANISM_CLIP_LOCKED_DOOR_CLOSED = "closed" |
| constexpr const char * | MECHANISM_CLIP_LOCKED_DOOR_OPEN = "open" |
| constexpr int | MISSING_TEXTURE_SIZE = 16 |
| Côté, en pixels, du damier de repli généré par défaut (une case, EX-ARCH-021). | |
| constexpr int | MISSING_TEXTURE_CHECKER_SIZE = 4 |
| Côté, en pixels, d'un carreau du damier : quatre carreaux par côté, motif lisible même réduit. | |
| constexpr float | PARALLAX_FACTOR_NONE = 1.0f |
| Facteur neutre : le contenu est solidaire du niveau et ne subit aucun décalage. | |
| constexpr float | PARTICLE_QUAD_SIZE = 0.12f |
| Côté du carré teinté d'une particule, en unités monde (LOT-53 TACHE-03 : « un simple carré teinté suffit pour un premier jet », pas d'asset dédié). | |
| const std::string | PLANES_SUBDIRECTORY = "Plans/" |
| Sous-dossier des images de plans, relatif au dossier des niveaux — un plan est une donnée de niveau, pas un asset réutilisable : il ne vit pas sous Assets/. | |
| constexpr std::size_t | PLANE_TEXTURE_BYTES_PER_PIXEL = 4 |
| Octets par texel d'une texture de plan : R8G8B8A8_UNORM, comme toute texture du projet. | |
| const std::string | PLAYER_SUBDIRECTORY = "Player/" |
| Sous-dossier de la spritesheet du personnage, relatif au dossier d'assets (LOT-48). | |
| const std::string | PLAYER_SHEET_FILE_NAME = "player.png" |
| Nom logique de la spritesheet du personnage (LOT-48). | |
| constexpr int | PLAYER_IDLE_FRAME_COUNT = 2 |
| Nombre d'images du clip Idle. | |
| constexpr int | PLAYER_RUN_FRAME_COUNT = 4 |
| Nombre d'images du clip Run. | |
| constexpr int | PLAYER_JUMP_FRAME_COUNT = 1 |
| Nombre d'images du clip Jump (pose unique, jamais animée). | |
| constexpr int | FONT_METRICS_FORMAT_VERSION = 1 |
| Version du format de métriques écrite dans le fichier, et plus élevée qui soit lue (hmi::loadFontMetricsFromString). | |
| constexpr RenderLayer | DEFAULT_RENDER_LAYER = RenderLayer::Tile |
| Calque appliqué à une entité dépourvue de hmi::RenderLayerTag. | |
| constexpr RenderMode | DEFAULT_RENDER_MODE = RenderMode::Texture |
| Mode appliqué au premier lancement et à défaut de préférence exploitable. | |
| constexpr float | SHADOW_OFFSET_X = 1.0f / 16.0f |
| Décalage de l'ombre par rapport à sa tuile, en unités monde (1 pixel à 16 px/unité). | |
| constexpr float | SHADOW_OFFSET_Y = 1.0f / 16.0f |
| constexpr float | SHADOW_OPACITY = 0.4f |
| Opacité de l'ombre (constante, cf. décisions de cadrage du LOT-55 : pas de réglage designer). | |
| const std::string | SKINS_SUBDIRECTORY = "Skins/" |
| Sous-dossier des skins de tuiles, relatif au dossier d'assets (LOT-42). | |
| const std::string | BACKGROUNDS_SUBDIRECTORY = "Backgrounds/" |
| Sous-dossier des fonds de niveau, relatif au dossier d'assets (LOT-44). | |
| const std::string | OBJECTS_SUBDIRECTORY = "Objects/" |
| Sous-dossier des textures d'objets interactifs, relatif au dossier d'assets (LOT-45). | |
| constexpr int | AUTOTILE_SHEET_SIDE = 4 |
| Nombre de cases par côté de la planche de raccords (4×4 = seize configurations). | |
| constexpr int | AUTOTILE_CONFIGURATION_COUNT = AUTOTILE_SHEET_SIDE * AUTOTILE_SHEET_SIDE |
| Nombre de configurations de voisinage distinctes. | |
| constexpr std::array< core::TileType, 0 > | SILHOUETTE_TILE_TYPES {} |
| Types de tuile dont la matière n'occupe pas toute la case, et qui doivent donc être détourées à l'affichage plutôt que dessinées en carré plein. | |
| constexpr int | SILHOUETTE_TILE_TYPE_COUNT = static_cast<int>(SILHOUETTE_TILE_TYPES.size()) |
| Nombre de types de tuile à silhouette (voir SILHOUETTE_TILE_TYPES). | |
| constexpr int | EDITOR_ACTION_COUNT = 10 |
| Nombre d'actions d'éditeur remappables (EditorAction). | |
| constexpr int | GAME_ACTION_COUNT = 7 |
| Nombre d'actions de jeu remappables (GameAction). | |
| constexpr int | GAMEPAD_BUTTON_COUNT = 10 |
| Nombre de boutons manette remappables (GamepadButton). | |
| constexpr std::chrono::milliseconds | GAMEPAD_DISCONNECTED_PROBE_PERIOD {2000} |
| Délai minimal entre deux sondages XInput d'un slot resté déconnecté (anti-saccade). | |
| constexpr int | EDITOR_ACTION_CATALOG_COUNT = 30 |
| Nombre total d'actions du catalogue (six outils de niveau, cinq outils de canevas pixel art, onze commandes principales, quatre commandes de fichier de l'atelier, quatre commandes de région de l'atelier). | |
| constexpr int | TOOLBAR_COMMAND_BUDGET = 5 |
| Nombre d'actions hors sélection d'outil admises dans une barre d'outils (LOT-68). | |
| constexpr int | KEY_BINDING_ICON_COUNT = 9 |
| Nombre d'actions d'éditeur remappables ayant une commande effective (EDITOR_ACTION_COUNT moins TextureAssignTool). | |
| constexpr std::size_t | EDITOR_WORKSPACE_COUNT = 3 |
| Nombre d'espaces, déclaré au plus près de l'énumération qu'il compte. | |
| constexpr int | IDENTITY_BASE_HEIGHT = 360 |
| Hauteur, en pixels logiques, de la maquette à l'échelle 1. | |
| constexpr int | IDENTITY_MAX_SCALE = 3 |
| Plus grand facteur admis. | |
| constexpr float | BACKDROP_VEIL_WIDTH_RATIO = 0.55f |
| Part de la largeur couverte par le voile de lisibilité, sous le titre et les entrées de menu. | |
| constexpr int | BACKDROP_VEIL_STEPS = 6 |
| Nombre de bandes du voile. | |
| constexpr std::size_t | RPG_SCREEN_COUNT = 9 |
| Nombre d'écrans du catalogue. | |
| using hmi::EditorWorkspaceMask = unsigned |
Ensemble d'espaces, un bit par valeur de hmi::EditorWorkspace.
| using hmi::TextureHandle = void* |
Identité opaque d'une texture liée, du point de vue de la composition.
La composition du rendu ne fait que comparer et regrouper des textures ; elle n'a jamais besoin d'en connaître le type Direct3D. Ce typage volontairement opaque permet de la garder libre de toute dépendance GPU (et donc testable sans carte, EX-NFR-004) : côté soumission, hmi::SpriteBatch reconvertit la valeur en QRhiTexture*, seule couche qui en connaisse le type réel. Une valeur nulle désigne « aucune texture liée ».
|
strong |
Une des six caractéristiques d'un personnage ou d'une créature (EX-DND-010).
Ensemble fermé : six valeurs, fixées par les règles. Les noms textuels sont ceux du lexique (LOT-30) et de common.schema.json, et scripts/check_rpg_data.py vérifie que les trois listes coïncident.
|
strong |
Surface d'une action (LOT-68, EX-IHM-074).
EX-IHM-055 posait qu'une commande placée à plusieurs endroits reste une seule définition ; il restait à arbitrer lesquelles méritent une place permanente à l'écran.
La barre d'outils ne porte que ce qui se déclenche au fil du geste : sélection d'outil, enregistrement, annulation, essai. Tout le reste vit au menu — atteignable, découvrable (EX-EDIT-015), mais sans occuper l'écran en permanence. C'est la même QAction dans les deux cas : le champ décide de sa présentation, jamais de son existence.
| Enumerator | |
|---|---|
| ToolBarAndMenu | Barre d'outils et menu : usage continu. |
| MenuOnly | Menu seul (plus son raccourci) : usage ponctuel. |
|
strong |
Catégorie d'échec de lecture d'une description d'animation (même esprit que hmi::SkinCatalogError/core::LevelValidationError).
| Enumerator | |
|---|---|
| None | Pas d'erreur. |
| FileNotFound | Fichier absent. Cas légitime (image fixe), pas une anomalie. |
| ParseError | JSON malformé, ou racine qui n'est pas un objet. |
| UnsupportedVersion | Numéro de version supérieur à AnimationCatalog::FORMAT_VERSION. |
| MalformedStructure | Structure inattendue (clip sans « frames », next inexistant…). |
| IncoherentFrameSize | Taille d'image déclarée incohérente avec les dimensions du PNG. |
|
strong |
Texture d'où provient l'apparence résolue.
| Enumerator | |
|---|---|
| Atlas | Atlas du jeu : couleur plate par type de tuile, images du personnage, aides d'édition. |
| MissingTexture | Damier magenta de repli : texture attendue mais pas encore disponible (EX-NFR-040). |
| Skin | Skin assigné au type de tuile, désigné par hmi::TileAppearance::skinIndex (LOT-42). |
| Override | Texture assignée par instance à la case, désignée par hmi::TileAppearance::skinIndex (index dans hmi::SceneTextures::objects) — prioritaire sur Skin (EX-EDIT-043, LOT-45). |
|
strong |
Famille d'un asset graphique, qui détermine les dimensions attendues du fichier image.
Chaque famille correspond à un usage du programme d'habillage (LOT-40 → LOT-55) : ce n'est pas une classification esthétique mais le contrat que le fichier doit respecter pour être découpable par le rendu.
|
strong |
Rôle de couleur d'un pavé du décor, résolu depuis les jetons au moment du rendu.
|
strong |
Action d'éditeur logique, remappable indépendamment de la touche physique.
Sous-ensemble significatif des raccourcis de l'éditeur (hmi::GameViewport, mode édition), pas exhaustif (décision de cadrage LOT-29) : navigation de menu, redimensionnement par flèches, Ctrl+R, "0", Tab, Maj+clic restent câblés en dur. Le modificateur Ctrl de Save/Undo/Redo/Copy/Paste reste lui-même câblé en dur ; seule la touche-lettre associée est ici remappable.
| Enumerator | |
|---|---|
| Save | |
| Undo | |
| Redo | |
| Copy | |
| Paste | |
| Playtest | |
| ToggleGrid | |
| ToggleHelp | |
| Rename | |
| TextureAssignTool | Sélectionne l'outil « Texture par instance » (LOT-45, EX-EDIT-043). |
|
strong |
Groupe d'exclusivité d'une action : les outils d'édition forment un groupe exclusif (un seul actif à la fois) ; les commandes n'appartiennent à aucun groupe.
PixelTools (LOT-54 TACHE-04) est un second groupe exclusif, distinct de LevelTools : les outils du canevas pixel art et ceux du niveau ne s'excluent jamais entre eux, seulement au sein de leur propre groupe. PixelCommands (LOT-54 TACHE-05) n'est pas exclusif (comme None) mais reste tagué séparément : ces commandes vivent dans la barre d'outils du canevas, jamais dans celle du niveau.
| Enumerator | |
|---|---|
| None | |
| LevelTools | |
| PixelTools | |
| PixelCommands | |
|
strong |
|
strong |
|
strong |
Outil actif dans la grille de l'éditeur, changé via Tab ou la barre d'outils (hmi::EditorActions).
Paint peint case par case au clic/glisser (comportement LOT-14, inchangé). Rectangle peint un rectangle entier au relâchement d'un glisser. Selection définit une zone (glisser) dont le contenu peut être copié (Ctrl+C) puis collé ailleurs (Ctrl+V), sans peindre directement. Link (LOT-37, EX-IHM-030) lie/délie un mécanisme : cliquer un déclencheur (interrupteur/ plaque) passe en attente de cible, cliquer une cible (porte/danger commuté) crée la liaison ; refaire la même paire la supprime (bascule) — voir hmi::resolveLinkClick. Échap annule une attente en cours (revient à aucune case sélectionnée), sans toucher au brouillon. TextureAssign (LOT-45, EX-EDIT-043) assigne une texture par instance à une case : clic gauche assigne/remplace l'asset sélectionné dans la bibliothèque, reclic du même asset ou clic droit retire l'assignation — voir hmi::resolveTextureAssignClick. CameraZone (LOT-64, EX-LVL-007, EX-EDIT-029) dessine une zone de caméra du mode par salle : un glisser (comme Rectangle) définit un rectangle de cases, ajouté à core::CameraFramingConfig::zones au relâchement (core::LevelDraft::addCameraZone) ; les zones existantes se retirent depuis le tableau de la section « Cadrage » du panneau Textures, pas depuis le canevas.
| Enumerator | |
|---|---|
| Paint | |
| Rectangle | |
| Selection | |
| Link | |
| TextureAssign | |
| CameraZone | |
|
strong |
|
strong |
Catégorie d'échec de lecture d'un fichier de métriques (même esprit que hmi::AnimationCatalogError).
| Enumerator | |
|---|---|
| None | Pas d'erreur. |
| FileNotFound | Fichier absent. Cas attendu (repli procédural), pas une anomalie. |
| ParseError | JSON malformé, ou racine qui n'est pas un objet. |
| UnsupportedVersion | Numéro de version supérieur à FONT_METRICS_FORMAT_VERSION. |
| MalformedStructure | Structure inattendue (glyphe sans région, point de code invalide…). |
|
strong |
Famille de police d'une portée (LOT-68, EX-IHM-070).
La distinction est un rôle, pas un nom de police : Identity reste Identity le jour où la police pixel embarquée change.
| Enumerator | |
|---|---|
| Ui | Châssis d'édition : police de travail, lisible en petit et en tableau dense. |
| Identity | Écrans du jeu : police bitmap, rendue sans lissage à échelle entière. |
|
strong |
Action de jeu logique, remappable indépendamment de la touche physique qui la déclenche.
Miroir des sept lectures de PlayerInputMapper.cpp. Chaque action a une touche unique et pleinement remappable — aucun alias fixe : un alias câblé en dur sur une touche donnée entrerait en collision dès qu'une autre action est remappée sur cette même touche, les deux se déclenchant à la fois (silencieusement annulé pour une paire opposée comme Gauche/Droite, voir PlayerInputMapper.cpp).
| Enumerator | |
|---|---|
| MoveLeft | |
| MoveRight | |
| AimUp | |
| AimDown | |
| Jump | |
| Dash | |
| Interact | |
|
strong |
Événement discret survenu sur un pas de simulation ou une action d'interface.
Unifie les transitions de jeu (personnage, mécanismes) et d'interface (menus, écrans du LOT-59) sous une seule énumération : c'est ce qui permet à hmi::SoundTriggers de leur associer un son par une table exhaustive unique, et à LOT-53 de réutiliser la même énumération pour ses particules sans dupliquer la détection.
|
strong |
Bouton (ou direction) manette remappable à une action de jeu (EX-CTRL-002, LOT-30).
Up/Down/Left/Right fusionnent le D-pad et le stick gauche en une seule notion logique par direction — le joueur ne perçoit pas la différence entre les deux, et Window::pollGamepad les a toujours traités comme équivalents. Start/Back, les clics de stick et les gâchettes analogiques ne sont pas représentés : conventions globales ou hors périmètre (voir l'épic du lot).
| Enumerator | |
|---|---|
| Up | |
| Down | |
| Left | |
| Right | |
| A | |
| B | |
| X | |
| Y | |
| LeftShoulder | |
| RightShoulder | |
|
strong |
|
strong |
Identifiant d'une icône : un par outil d'édition et par commande principale.
|
strong |
Touche du clavier, identifiée par son code virtuel Win32.
Les valeurs coïncident volontairement avec les codes VK_* de Win32, ce qui permet à la couche de capture (Window) de convertir directement un WPARAM en Key par un simple static_cast, sans table de correspondance. Seules les touches utiles au menu et à la navigation sont nommées ici ; l'InputState stocke néanmoins n'importe quel code, si bien qu'ajouter une touche revient à ajouter un énumérateur (aucune autre modification).
| Enumerator | |
|---|---|
| Backspace | |
| Tab | |
| Enter | |
| Shift | |
| Control | |
| Escape | |
| Space | |
| Left | |
| Up | |
| Right | |
| Down | |
| D0 | |
| A | |
| C | |
| D | |
| E | |
| P | |
| Q | |
| R | |
| S | |
| T | |
| V | |
| W | |
| Y | |
| Z | |
| F1 | |
| F2 | |
| F10 | |
|
strong |
Action à appliquer sur le brouillon/l'état d'édition suite à un clic de l'outil « Lien ».
|
strong |
|
strong |
Bouton de la souris suivi par l'InputState.
Count n'est pas un bouton : c'est la sentinelle donnant le nombre de boutons suivis (dimension des tableaux d'état).
| Enumerator | |
|---|---|
| Left | |
| Right | |
| Middle | |
| Count | |
| enum hmi::NeighborBits : std::uint8_t |
Bits du masque de voisinage, un par voisin orthogonal solide.
Quatre voisins et non huit : seize configurations couvrent bords et coins concaves, et demandent à l'auteur une planche de seize cases plutôt que quarante-sept — proportionné à un jeu dont les assets sont dessinés à la main. Le champ mode de hmi::SkinEntry permettra d'ajouter un bitmask47 sans refonte si ce rendu s'avère insuffisant.
| Enumerator | |
|---|---|
| NEIGHBOR_UP | Voisin du dessus solide. |
| NEIGHBOR_RIGHT | Voisin de droite solide. |
| NEIGHBOR_DOWN | Voisin du dessous solide. |
| NEIGHBOR_LEFT | Voisin de gauche solide. |
|
strong |
|
strong |
Panneau dockable de l'éditeur.
Couvre les neuf docks depuis le LOT-69 : la mise en avant automatique (EX-IHM-061) n'en concerne toujours qu'une partie, mais la répartition par espace de travail (EX-IHM-073) les concerne tous, et une énumération partielle laisserait des panneaux sans espace.
| Enumerator | |
|---|---|
| Palette | |
| Levels | |
| Links | |
| Textures | |
| Planes | |
| PixelCanvas | |
| PixelHistory | |
| PixelPalette | |
|
strong |
Type d'une opération d'historique — détermine sa clé de traduction (EX-REN-033).
Ce nom sert deux fois : dans le libellé de l'action « Annuler … » (TACHE-04) et dans le panneau d'historique visuel. D'autres membres rejoignent cette énumération aux tâches suivantes (déplacement de région, symétries, rotations, coller — TACHE-06).
| Enumerator | |
|---|---|
| Brush | |
| Eraser | |
| Fill | |
| Move | |
| FlipHorizontal | |
| FlipVertical | |
| RotateClockwise | |
| RotateCounterClockwise | |
| Paste | |
|
strong |
Outil actif du canevas pixel art — détermine ce que produisent les gestes de souris (hmi::PixelCanvas) et forme un groupe exclusif distinct de hmi::EditorTool (hmi::EditorActions, TACHE-04).
| Enumerator | |
|---|---|
| Brush | |
| Eraser | |
| Fill | |
| Eyedropper | |
| Selection | Sélection rectangulaire (LOT-54 TACHE-06) : glisser hors d'une sélection existante en définit une nouvelle ; glisser à l'intérieur la déplace (hmi::moveRegion). |
|
strong |
Identité des trois clips historiques du personnage, côté présentation seulement.
Distinct de core::AnimationClip (donnée générique, LOT-46) : l'atlas procédural reste le repli et la référence visuelle du personnage (LOT-39), peint « en dur » à partir de trois poses connues à la compilation — Core n'a, depuis LOT-46, plus aucune connaissance de ces trois clips en particulier (EX-ARCH-012). L'ordre des valeurs est celui de core::playerClipSet() (Core/Ecs/Systems/AnimationSystem.h, PLAYER_CLIP_IDLE/_RUN/ _JUMP) : c'est HMI (GameSession::refreshPlayerSprite) qui fait le pont entre l'index de clip résolu par Core et cette énumération.
| Enumerator | |
|---|---|
| Idle | |
| Run | |
| Jump | |
|
strong |
Nature d'une primitive composée : rectangle aligné aux axes, ou segment épais orienté.
| Enumerator | |
|---|---|
| Sprite | hmi::SpriteQuad : rectangle aligné sur les axes. |
| Line | hmi::LineQuad : segment épais, orienté librement. |
|
strong |
Calques de dessin, du plus arrière au plus avant (EX-REN-014, EX-DEC-002).
L'ordre de déclaration est l'ordre de dessin : une valeur déclarée plus bas est dessinée par-dessus les précédentes. C'est le seul ordonnancement de calques du projet — aucun lot ne doit en inventer un concurrent, sous peine de rendre l'ordre visuel dépendant de qui dessine en dernier (EX-REN-014).
Toutes les valeurs sont réservées dès LOT-40, même celles qu'aucun code n'utilise encore (Background en LOT-44, Plane/Foreground en LOT-49, Shadow en LOT-55, Object en LOT-45, UI en LOT-52) : c'est précisément cette anticipation qui évite qu'un lot suivant réinvente son propre empilement. Seules Tile, Player et EditorOverlay sont utilisées à ce jour, et elles reproduisent exactement l'ordre d'avant le lot (tuiles sous personnage, aides d'édition au-dessus de tout).
Foreground est au-dessus de Player par construction : c'est le contrat de lecture « ce qui passe devant le personnage n'est pas physique » (EX-DEC-042).
Le nombre de plans picturaux d'un niveau est libre (LOT-69), mais aucun n'ajoute de valeur ici : les plans occupent Plane ou Foreground selon leur profondeur, et leur rang dans la liste du niveau les ordonne à l'intérieur du calque. Donner une valeur d'énumération à chaque plan figerait dans le rendu ce que le format déclare variable, et ferait enfler RENDER_LAYER_COUNT, donc hmi::LayerVisibility.
Notion de présentation (HMI) : Core l'ignore et continue de ne connaître que core::Sprite::layer, entier de tri fin à l'intérieur d'un calque (EX-NFR-011).
|
strong |
Mode de rendu de la scène : lecture directe des collisions, ou habillage.
Deux valeurs, jamais trois : la superposition et le contrôle fin par calque relèvent de LOT-51 et sont délibérément une autre notion. La bascule est purement visuelle — elle ne touche ni la simulation, ni la scène ECS, seulement la résolution de l'apparence (hmi::resolveTileAppearance).
|
strong |
Genres de blocs que le châssis sait peindre.
Volontairement peu nombreux : sept formes suffisent aux huit écrans, et un genre ajouté pour un seul écran est le premier pas vers huit écrans écrits à la main.
|
strong |
Les huit écrans du RPG.
L'ordre est celui du cycle de navigation (nextRpgScreen/previousRpgScreen) et celui de la table de rpgScreens().
|
strong |
Règle de superposition d'un écran (EX-IHM-091) : ce qui met le jeu en pause et ce qui se consulte en marchant.
Portée par la description de l'écran, jamais par le code qui l'ouvre : une règle décidée à l'ouverture se contredit d'un point d'appel à l'autre, et personne ne peut la relire d'un coup d'œil.
|
strong |
Événement pouvant déclencher une transition d'écran.
Un seul événement OpenOptions/ CloseOptions sert Menu et Pause : c'est ScreenState::optionsReturnTo (pas l'événement) qui porte la différence, cf. plus bas.
| Enumerator | |
|---|---|
| OpenMenu | |
| OpenEditor | |
| OpenGame | |
| OpenOptions | |
| CloseOptions | |
| OpenPause | |
| ResumePause | |
| QuitPauseToMenu | |
| OpenCredits | |
| CloseCredits | |
| OpenRpgScreen | Ouvre un écran du RPG. Un seul événement pour les huit, et depuis trois écrans (Menu, Game, Pause) : c'est ScreenState::rpgReturnTo qui porte la différence, comme optionsReturnTo le fait pour Options. |
| CloseRpgScreen | |
|
strong |
Écran actuellement affiché par la fenêtre principale.
|
strong |
Catégorie d'échec de lecture d'un skins.json (même esprit que core::LevelValidationError).
Complète le message technique d'un code programmatique, pour qu'un appelant puisse réagir sans analyser le texte du message — une comparaison de sous-chaînes se casserait à la première reformulation.
| Enumerator | |
|---|---|
| None | Pas d'erreur. |
| FileNotFound | Fichier absent. Cas légitime, pas une anomalie (voir ci-dessous). |
| ParseError | JSON malformé, ou racine qui n'est pas un objet. |
| UnsupportedVersion | Numéro de version supérieur à SkinCatalog::FORMAT_VERSION. |
| MalformedStructure | Structure inattendue (« jeux » absent, entrée sans « asset »…). |
|
strong |
Manière dont l'asset d'un type de tuile est découpé à l'affichage (EX-EDIT-025).
Le mode est porté par type, jamais par jeu : un même jeu contient des types à raccords (les solides) et des types à image unique (dangers, mécanismes). Un mode global forcerait des exceptions dans le code de rendu.
| Enumerator | |
|---|---|
| Single | Image unique, utilisée telle quelle. Seul mode qui ait un sens pour un type dont le voisinage n'en a pas : dangers, interrupteurs, portes, blocs, pentes et arrondis. |
| Bitmask16 | Planche de 4×4 cases, dont celle affichée est choisie selon les quatre voisins solides (hmi::autotileCell). Dé-répétition et bords distincts de l'intérieur. |
|
strong |
Catégorie d'échec de lecture d'un sounds.json (même patron que hmi::SkinCatalogError/hmi::AnimationCatalogError).
| Enumerator | |
|---|---|
| None | Pas d'erreur. |
| FileNotFound | Fichier absent. Cas légitime (catalogue vide), pas une anomalie. |
| ParseError | JSON malformé, ou racine qui n'est pas un objet. |
| UnsupportedVersion | Numéro de version supérieur à SoundCatalog::FORMAT_VERSION. |
| MalformedStructure | Structure inattendue (« sons » absent, entrée invalide…). |
|
strong |
Ancrage horizontal d'un texte composé (hmi::composeText).
| Enumerator | |
|---|---|
| Left | |
| Center | |
| Right | |
|
strong |
Action à appliquer sur le brouillon suite à un clic de l'outil « Texture par instance ».
|
strong |
Ancrage vertical d'un texte composé (hmi::composeText).
| Enumerator | |
|---|---|
| Top | |
| Middle | |
| Bottom | |
|
nodiscardnoexcept |
Indice de la zone active de zones à position.
Fonction pure, testable sans GPU (EX-NFR-004), même patron que hmi::RoomGrid pour le découpage automatique. La première zone de la liste qui contient position est retenue : l'ordre porte donc la priorité en cas de chevauchement — pas de règle de résolution supplémentaire à inventer.
| zones | Zones de caméra du niveau (core::CameraFramingConfig::zones). |
| position | Position (case) dont on cherche la zone de caméra active. |
zones de la première zone contenant position ; std::nullopt si aucune zone ne la contient (repli sur le cadrage niveau entier, côté appelant).
|
nodiscard |
|
nodiscardnoexcept |
Avance la caméra de suivi d'un pas fixe.
Fonction pure : mêmes entrées, même résultat (EX-NFR-002, testable sans GPU). N'affecte jamais la simulation (EX-ARCH-012) – elle ne fait que lire une position déjà simulée.
| previous | État du pas précédent (FollowCameraState{} par défaut au premier appel après un chargement de niveau). |
| characterPosition | Position simulée du personnage (centre de sa boîte), en unités monde. |
| facing | Direction de marche du personnage (core::Actor::facing), vecteur de norme au plus 1 ; le vecteur nul conserve la dernière anticipation (immobile, rien à réviser). |
| levelBounds | Rectangle du niveau, en unités monde (coin haut-gauche + dimensions). |
| viewHalfExtent | Demi-largeur/demi-hauteur de la zone visible par la caméra, en unités monde – détermine la marge de bornage aux limites du niveau. |
| fixedDelta | Durée du pas fixe, en secondes (EX-REN-021) – jamais un delta de rendu, sous peine de dépendre de la fréquence d'affichage. |
|
nodiscard |
Fait progresser l'animation d'une instance de mécanisme d'un pas fixe : détecte un changement d'état, choisit le clip approprié (transition ou état cible, avec repli sur clip manquant), avance l'image courante, et renvoie la région à afficher (LOT-47 TACHE-02).
Logique pure (core::Animation/core::ClipSet/hmi::AnimationDescription uniquement, aucun GPU/Qt/ECS), testable en isolation. Ne redéclenche jamais de transition tant que l'état logique ne change pas — comparaison au pas précédent, portée par state. Au tout premier appel pour une instance (state.initialized == false, typiquement juste après un chargement/rechargement de niveau), rejoint directement le clip d'état cible, sans transition. Un clip de transition absent bascule directement sur le clip d'état cible, sans avertissement (cas légitime) ; un clip d'état absent journalise un avertissement, une seule fois par combinaison (asset, clip), puis replie sur le premier clip disponible.
| state | État de présentation de cette instance, muté en place. |
| description | Description de l'asset effectivement lié à cette instance. |
| type | Type de tuile du mécanisme. |
| active | État logique courant (voir mechanismTargetClip). |
| assetKey | Identifiant de l'asset (typiquement son chemin), pour dédoublonner le journal d'avertissements. |
| fixedDelta | Durée du pas de simulation, en secondes. |
| warnedMissingClips | Combinaisons (asset, clip d'état) déjà signalées manquantes, mutées en place — un seul message par combinaison pour toute la session. |
|
noexcept |
Avance une secousse d'écran d'un pas fixe.
| state | État à avancer ; sans effet si déjà terminée (elapsed >= duration). |
| fixedDelta | Durée du pas, en secondes. |
| void hmi::advanceTileAnimations | ( | const SkinCatalog * | skins, |
| const std::string & | skinSet, | ||
| TextureCache & | cache, | ||
| float | deltaSeconds, | ||
| std::unordered_map< std::string, core::Animation > & | tileAnimations, | ||
| std::set< std::string > & | warnedExclusions ) |
Avance l'horloge d'animation partagée des tuiles animées d'un jeu de skins courant (LOT-46 TACHE-05).
Facteur commun à hmi::GameSession (pas fixe, déterministe, EX-NFR-002) et hmi::DraftRenderer (temps réel de l'aperçu d'édition — la détermination n'a pas de sens hors simulation) : découvre les assets animés du jeu de skins courant (mode Single, sans silhouette — bitmask16 et silhouette détourée excluent l'animation, hmi::animationExcludedForTile, signalé une fois par asset via warnedExclusions) et avance leur horloge partagée d'un pas. Une entrée par asset, jamais par tuile : toutes les tuiles d'un même type animé restent ainsi en phase, sans coût par case.
| skins | Catalogue de skins courant, ou nullptr (rien à faire). |
| skinSet | Nom du jeu courant ; vide pour le jeu par défaut du catalogue. |
| cache | Cache de textures (résolution de l'asset et de sa description). |
| deltaSeconds | Durée à avancer. |
| tileAnimations | Horloge partagée, mise à jour en place. |
| warnedExclusions | Assets déjà signalés pour une combinaison exclue (mémorisation, pour ne jamais journaliser à chaque image). |
|
nodiscardnoexcept |
Compose un pixel au-dessus d'un autre (alpha-over, alpha non prémultiplié).
Exposée pour être testée directement : l'associativité de l'alpha-over est ce qui garantit qu'aplatir trois plans d'un coup donne le même résultat que deux fois deux.
| below | Pixel de dessous (RGBA, R en poids faible). |
| above | Pixel de dessus. |
|
nodiscardnoexcept |
Indique si la combinaison (mode de skin, type de tuile) exclut l'animation (LOT-46 TACHE-05).
SkinMode::Bitmask16 (la case dépend du voisinage solide) et une silhouette détourée (pente/arrondi, hmi::hasSilhouette) choisissent déjà la case à échantillonner dans l'image ; l'animation en ajouterait une seconde façon, jamais implémentée — limite assumée plutôt que silencieuse (voir l'epic LOT-46). Fonction pure, testable sans GPU : c'est elle que GameSession::updateTileAnimations interroge pour décider de signaler la combinaison au lieu de l'ignorer.
| mode | Mode de découpage du skin assigné. |
| type | Type de tuile concerné. |
| void hmi::applyApplicationStyle | ( | ) |
Choisit explicitement le style Qt de l'application (non natif, condition pour que la palette et la feuille de style s'appliquent à l'ensemble des contrôles).
À appeler avant la création du moindre widget : un style appliqué après ne se propage pas aux widgets déjà construits.
| void hmi::applyEditorTheme | ( | ) |
Applique le thème complet du châssis d'édition (portée variable) : police, palette puis feuille de style, tous dérivés des jetons actuellement effectifs (currentEditorTokens()).
À appeler avant la construction de MainWindow.
| void hmi::applyFont | ( | ) |
Enregistre les polices embarquées auprès de Qt et applique la famille du châssis d'édition comme police par défaut de l'application (Assets/Fonts/) :
Repli explicite et par famille si un fichier est absent ou refusé par Qt : famille générique (QFont::StyleHint ici, mot-clé CSS générique dans la feuille de style), jamais un second nom de police codé en dur, et jamais la famille d'un autre rôle — une police d'écran manquante ne doit pas faire retomber le jeu sur la police de l'éditeur. Avertissement journalisé.
| void hmi::applySilhouetteMask | ( | core::TileType | type, |
| int | width, | ||
| int | height, | ||
| std::vector< std::uint32_t > & | pixels ) |
Applique la silhouette d'un type à une image carrée, en rendant transparent l'extérieur.
L'artiste peint un carré plein ; le moteur le découpe à la forme exacte de la hitbox. Le résultat est mis en cache (hmi::TextureCache) plutôt que recalculé à chaque image.
Sans effet si type n'a pas de silhouette, ou si l'image n'est pas carrée — un skin destiné à un type carré ne doit pas être découpé par accident.
| type | Type de tuile dont on applique la silhouette. |
| width | Largeur de l'image, en pixels. |
| height | Hauteur de l'image, en pixels. |
| pixels | Pixels R8G8B8A8_UNORM, modifiés sur place ; taille attendue width * height. |
| void hmi::applySkinAssignment | ( | SkinCatalog & | catalog, |
| std::string_view | setName, | ||
| core::TileType | type, | ||
| const std::string & | asset, | ||
| SkinMode | mode ) |
Applique une assignation à un catalogue, ou la retire.
Point unique de la modification, pour que le panneau n'ait pas à décider lui-même ce que signifie « aucun skin » — un asset vide retire l'assignation, et le type redevient non skinné plutôt que d'être associé à un fichier de nom vide.
| catalog | Catalogue modifié. |
| setName | Jeu concerné ; vide pour le jeu par défaut du catalogue. |
| type | Type de tuile. |
| asset | Fichier à assigner, ou chaîne vide pour retirer l'assignation. |
| mode | Mode de découpage appliqué si asset est renseigné. |
| void hmi::applyStyleSheet | ( | const DesignTokens & | editorTokens | ) |
Charge le modèle de feuille de style du châssis d'édition (:/resources/theme-editor.qss), le substitue avec editorTokens et l'applique à l'application.
Repli explicite : fichier absent/illisible ou marqueur inconnu -> avertissement journalisé, l'application reste utilisable sans feuille de style (comportement historique de main.cpp, non régressé).
Ne porte plus la portée identité depuis le LOT-73 (EX-IHM-082) : celle-ci se pose sur la pile d'écrans (identityStyleSheet). Les deux vivaient dans la même feuille applicative, si bien qu'un changement de facteur d'agrandissement — préoccupation des seuls écrans du jeu — repolissait les 862 widgets de l'application, cinq secondes durant en Debug.
|
nodiscardnoexcept |
Calcule les deux ailes de la pointe d'une flèche allant de from vers to.
| from | Origine du trait (sert seulement à orienter la pointe). |
| to | Extrémité du trait (sommet de la pointe). |
|
nodiscardnoexcept |
Contrat de dimensions d'une famille d'assets.
| family | Famille dont on veut le contrat. |
|
nodiscardnoexcept |
Nom lisible d'une famille d'assets, utilisé dans les messages de journalisation.
| family | Famille à nommer. |
|
nodiscardnoexcept |
Masques des neuf cases d'un assemblage 3×3 démonstratif (LOT-54 TACHE-08).
Un bloc 3×3 plein, flottant (aucun voisin hors du bloc n'est considéré solide) : chaque case ne voit que ses voisines internes, ce qui donne un panorama représentatif — coins, bords et intérieur — de la façon dont la planche en cours se raccorde à elle-même. C'est l'assemblage, pas les repères, qui répond à « le résultat tient-il ? ».
|
nodiscardnoexcept |
Case de la planche 4×4 correspondant à un masque de voisinage.
La correspondance est une constante figée, documentée configuration par configuration dans l'implémentation, et vérifiée exhaustivement sur les seize valeurs.
| mask | Masque de voisinage (seuls les quatre bits de poids faible sont lus). |
|
nodiscardnoexcept |
Clé de traduction décrivant la configuration de voisinage d'un masque, pour l'atelier pixel art (LOT-54 TACHE-08, EX-REN-033).
Les seize valeurs correspondent exactement aux seize entrées de la table canonique CELL_BY_MASK (TileAutotile.cpp) — dessiner une planche sans savoir ce que représente chaque case est une source d'erreurs garantie ; ce n'est jamais une seconde table, seulement sa description en langage naturel.
| mask | Masque de voisinage (seuls les quatre bits de poids faible sont lus). |
|
nodiscardnoexcept |
Case représentative d'une planche : l'intérieur plein (quatre voisins solides).
Utilisée là où une seule image doit résumer un skin à raccords — la vignette de la palette de l'éditeur (EX-EDIT-027). L'intérieur plein est le motif de fond du skin ; la case zéro, elle, serait la tuile isolée, un cas particulier peu représentatif.
|
nodiscardnoexcept |
Case de la planche sous un pixel donné.
| image | Image consultée. |
| tileSize | Côté d'une case, en pixels. |
| x | Colonne du pixel. |
| y | Ligne du pixel. |
image n'est pas une planche bitmask16 (isBitmask16Candidate) ou si (x, y) est hors bornes.
|
nodiscard |
Construit une QPalette complète — groupes actif, inactif et désactivé — à partir d'un jeu de jetons.
Le groupe désactivé est explicitement dérivé du texte atténué : c'est celui qu'on oublie le plus souvent, et celui qui trahit le plus vite un thème incomplet.
|
nodiscard |
Construit l'aperçu d'assemblage 3×3 démonstratif à partir de la planche en cours.
Les repères disent à quoi sert chaque case ; seul cet assemblage dit si le résultat tient (epic.md) — composé avec hmi::autotileAssemblyMasks/hmi::autotileCell, la même table que le rendu du niveau, jamais une seconde.
| sheet | Planche en cours d'édition. |
| tileSize | Côté d'une case, en pixels. |
sheet (planche plus petite que prévu) reste transparente plutôt que de lire hors bornes.
|
nodiscard |
Construit la liste des liaisons d'un brouillon, dans un ordre déterministe.
Alimente à la fois le panneau « Liens » (hmi::LinkPanel) et le rendu (hmi::DraftRenderer) — source unique, aucune duplication (EX-EDIT-010). Ordre : celui de draft.mechanisms().
| draft | Brouillon dont on liste les liaisons. |
|
nodiscard |
Construit les lignes de la section « Animations », diagnostic de clips manquants compris.
Logique pure (std::filesystem + hmi::AnimationCatalog, aucune dépendance Qt/GPU), testable en isolation (EX-NFR-010). Stockage identique à un skin de type (hmi::SkinCatalog, LOT-42) : ce n'est pas une seconde configuration, seulement une vue dédiée à six types particuliers, avec un diagnostic que la section « Skins » n'offre pas.
| catalog | Catalogue interrogé pour l'assignation courante de chaque famille. |
| setName | Jeu de skins consulté ; vide pour le jeu par défaut du catalogue. |
| skinsDirectory | Dossier des skins, pour lire le descripteur d'animation de l'asset assigné (<asset>.anim.json). |
|
nodiscard |
Génère, en mémoire, la texture de repli « asset manquant » : un damier magenta/noir.
Sœur de hmi::buildProceduralAtlasImage : logique pure et déterministe, sans dépendance Direct3D (EX-NFR-010). Le repli est volontairement opaque et magenta : il doit être impossible de le confondre avec un asset réel (aucune palette du jeu n'utilise le magenta) ni avec un trou de rendu (une zone transparente passerait inaperçue). Un asset manquant doit se voir, pas se deviner.
| size | Côté de l'image générée, en pixels (> 0 ; MISSING_TEXTURE_SIZE par défaut). |
|
nodiscard |
Génère, en mémoire, l'atlas procédural historique (grille de tuiles + images du personnage), de façon déterministe.
Logique pure (EX-NFR-010), sans dépendance Direct3D/Qt : utilisée à la fois par hmi::TextureAtlas (repli si l'asset fichier est absent/illisible, EX-NFR-040) et par l'export ponctuel de l'atlas de base en fichier (--export-atlas, cf. main.cpp), pour que les deux chemins restent l'unique source de vérité de ce contenu.
|
nodiscard |
Génère, en mémoire, une police bitmap minimale et déterministe (repli sans asset).
Couvre l'ASCII imprimable (0x20-0x7E) et les lettres accentuées du français (é è à ç ù ê î ô û et majuscules), en glyphes 5×7 pixels blancs sur fond transparent (colorables par la teinte du quad, comme hmi::buildProceduralAtlasImage, LOT-39). Chasse fixe (une seule avance pour tous les glyphes) : simple et suffisant pour un repli de secours. Aucune dépendance fichier/GPU : le jeu reste lisible même sans aucun asset de police (EX-NFR-040).
|
nodiscard |
Construit les lignes du panneau pour un jeu de skins donné.
Réutilise la taxonomie de la palette (hmi::tileTaxonomy) plutôt que d'énumérer les trente types à plat : une liste plate serait inutilisable, et deux organisations différentes entre la palette et ce panneau obligeraient le level designer à réapprendre où trouver chaque tuile.
Les sous-groupes de la taxonomie sont aplatis dans leur catégorie : le panneau n'a pas de sélection à opérer, seulement une assignation par type, et un troisième niveau de repli n'apporterait rien.
core::TileType::Empty est exclu : une case vide n'affiche rien, elle n'a pas d'apparence à assigner.
Logique pure (aucune dépendance Qt/GPU), testable en isolation (EX-NFR-010).
| catalog | Catalogue interrogé pour l'assignation courante de chaque type. |
| setName | Nom du jeu de skins consulté ; vide pour le jeu par défaut du catalogue. |
|
nodiscard |
Table de substitution marqueur -> valeur pour le modèle de feuille de style (LOT-56 TACHE-02), à partir d'un jeu de jetons du châssis d'édition (portée variable) ; les marqueurs de préfixe "identity." sont toujours résolus depuis identityTokens() (portée invariante).
Fonction pure : ne dépend que des jetons, jamais de l'état de l'application.
|
nodiscard |
Construit la pelure d'oignon des tuiles : une couleur plate par type, aux dimensions d'un plan de la densité donnée.
Réutilise la palette du mode Physique (hmi::buildProceduralAtlasImage), qui est déjà « la lecture des collisions sans distraction » : inventer un second jeu de couleurs pour l'éditeur ferait diverger deux vues du même niveau. Les cases vides restent transparentes — c'est un repère qu'on peint par-dessus, pas un fond.
| draft | Brouillon dont on lit la grille de tuiles. |
| pixelsPerUnit | Densité du plan peint (4, 8 ou 16). |
pixelsPerUnit est invalide ou la grille dégénérée.
|
nodiscard |
Cherche le premier bouton manette pressé cette frame, pour la capture d'un remappage.
| input | État des entrées de la frame (piste manette brute, InputState:: gamepadButtonPressed). |
|
nodiscard |
Cherche la première touche pressée cette frame, pour la capture d'un remappage.
Scrute l'ensemble des codes suivis par InputState (aucune touche nommée par Key n'est privilégiée : n'importe quelle touche du clavier peut être liée à une action). Échap et Entrée sont exclus — réservés à la navigation globale, jamais assignables — leur pression seule ne renvoie rien, la capture doit rester ouverte.
| input | État des entrées de la frame. |
|
nodiscard |
|
nodiscardconstexprnoexcept |
Zoom borné à [PIXEL_CANVAS_MIN_ZOOM, PIXEL_CANVAS_MAX_ZOOM].
|
nodiscardnoexcept |
Borne le décalage d'un plan pour qu'il couvre toujours le cadrage.
Un plan couvre exactement le niveau ; le translater découvre donc son bord, et une bande vide apparaîtrait au bout du décalage. L'alternative « que l'artiste peigne des marges » est un piège : la marge nécessaire dépend du facteur et de la taille de salle — personne ne la calculera juste, et l'erreur ne se verrait qu'au bord d'un niveau, en jeu.
Le bornage est fait par axe, indépendamment. Si le plan est plus petit que le cadrage sur un axe (aucune translation ne peut le couvrir), le décalage y est ramené à zéro : le plan reste aligné sur le niveau, ce qui est le moindre mal et reste stable.
| offset | Décalage souhaité, en unités monde. |
| planeBounds | Rectangle couvert par le plan avant décalage (typiquement le niveau). |
| cameraBounds | Rectangle cadré par la caméra, à couvrir. |
| void hmi::composeBackground | ( | ComposedScene & | scene, |
| const BackgroundTexture & | background, | ||
| int | levelWidth, | ||
| int | levelHeight, | ||
| RenderMode | mode ) |
Compose le fond du niveau sur RenderLayer::Background, s'il y a lieu.
Fonction pure (aucun accès disque/GPU), testable via hmi::QuadRecorder (EX-NFR-004). Trois cas distincts (LOT-44), à ne pas confondre :
Rien n'est jamais émis en mode RenderMode::Physique (EX-REN-046) : la lecture des collisions reste sans distraction. Le quad, en espace niveau, est soumis au culling par boîte englobante comme toute autre primitive de hmi::ComposedScene (EX-NFR-005).
| scene | Scène composée, cible de l'ajout. |
| background | Texture de fond déjà résolue (resolveBackgroundTexture). |
| levelWidth | Largeur du niveau, en unités monde (une case = une unité). |
| levelHeight | Hauteur du niveau, en unités monde. |
| mode | Mode de rendu courant ; sans effet hors RenderMode::Texture. |
|
nodiscard |
Compose les lignes du compteur de diagnostic à partir de valeurs déjà mesurées.
Fonction pure (EX-NFR-010), sur le patron de hmi::gameHudLines : le calcul (quelles lignes, quel texte) est testable sans rendu ; seul le dessin (hmi::composeText, à l'appelant) ne l'est pas.
| measurements | Valeurs mesurées pour l'image courante. |
| localization | Catalogue de traduction, pour les libellés (EX-REN-033) — aucune chaîne en dur. |
| void hmi::composeParticles | ( | ComposedScene & | scene, |
| core::World & | world, | ||
| RenderMode | mode, | ||
| const SceneTextures & | textures ) |
Compose un quad par particule vivante, teinté selon la durée de vie restante et le calque de son effet.
Parcourt les entités portant un core::Particle (LOT-53 TACHE-01/02) et empile un hmi::SpriteQuad centré sur chacune, échantillonnant une région opaque unie de l'atlas (hmi::TextureAtlas::tile(0, 0), même patron que les segments unis de hmi::DraftRenderer) : aucun asset dédié n'est introduit, la teinte porte entièrement l'apparence de l'effet. L'opacité vaut life / maxLife (core::Particle) : une particule fraîchement émise est pleine, elle s'estompe jusqu'à disparaître avec la simulation. Le calque dépend de l'effet (core::ParticleKind) : une traînée de dash passe derrière le personnage (RenderLayer::Object), une bouffée de poussière ou un éclat de mort devant (RenderLayer::Foreground), conformément au périmètre du lot.
Lecture seule de l'ECS (EX-ARCH-012), sans effet en dehors de RenderMode::Texture (EX-REN-046) — le mode Physique reste la lecture nue des collisions, sans effet visuel.
| scene | Scène à remplir (non vidée : la composition peut être cumulative). |
| world | Monde dont on lit core::Particle. |
| mode | Mode de rendu courant. |
| textures | Textures liables (seul hmi::SceneTextures::atlas est utilisé). |
| void hmi::composePlanes | ( | ComposedScene & | scene, |
| const std::vector< core::Plane > & | planes, | ||
| const std::vector< PlaneTexture > & | textures, | ||
| int | levelWidth, | ||
| int | levelHeight, | ||
| RenderMode | mode, | ||
| const PlaneVisibility & | visibility = PlaneVisibility{}, | ||
| const PlaneParallax & | parallax = PlaneParallax{} ) |
Compose les plans picturaux d'un niveau, dans l'ordre déclaré.
Fonction pure (aucun accès disque/GPU), testable via hmi::QuadRecorder (EX-NFR-004). Émet un quad par plan, couvrant exactement [0,0]–[levelWidth, levelHeight] en unités monde, UV pleines. Trois propriétés méritent d'être connues :
Le coût est constant en taille de niveau : un quad et une passe par plan, quelles que soient les dimensions — contrairement aux tuiles. C'est ce que TACHE-09 mesure.
| scene | Scène composée, cible de l'ajout (non vidée : la composition est cumulative). |
| planes | Plans du niveau, dans l'ordre déclaré. |
| textures | Textures résolues, alignées sur planes ; une entrée sans texture n'émet rien. |
| levelWidth | Largeur du niveau, en unités monde (une case = une unité). |
| levelHeight | Hauteur du niveau, en unités monde. |
| mode | Mode de rendu courant ; sans effet hors RenderMode::Texture. |
| visibility | Visibilité par rang (aide d'édition) : tout visible par défaut, donc sans effet en jeu. |
| parallax | Cadrage et échelle pour le décalage de parallaxe ; inactif par défaut, le plan est alors composé exactement sur les bornes du niveau. |
| void hmi::composeShadows | ( | ComposedScene & | scene, |
| core::World & | world, | ||
| RenderMode | mode, | ||
| const SceneTextures & | textures, | ||
| float | interpolationAlpha, | ||
| const core::TileMap * | doorCollision = nullptr ) |
Compose une ombre décalée pour chaque tuile physique visible, sur RenderLayer::Shadow.
Parcourt les mêmes entités que hmi::composeWorldSprites (core::Transform + hmi:: TileSkinTag) mais n'en retient que les tuiles qui projettent une ombre : pleines (core::isSolid, EX-GP-001) ou à silhouette inclinée/courbe (hmi::hasSilhouette, LOT-42). La forme échantillonnée est celle de hmi::regionForTile — le même atlas procédural que le mode Physique et que le masque de silhouette (hmi::isInsideSilhouette) : une case carrée pleine ou arrondi/pente est déjà, dans cet atlas, opaque exactement là où la matière est présente et transparente ailleurs (hmi::isInsideSilhouette, hmi:: buildProceduralAtlasImage). Teinter cette région en noir semi-transparent donne donc l'ombre à sa forme réelle sans réimplémenter la géométrie, et sans le moindre nouveau prédicat de solidité dans Core — un bloc réduit (BlockHalf/BlockQuarter) hérite de la même façon de sa taille réelle via core::Transform::scale (core::tileVisualScale), déjà porté par l'entité comme pour son propre sprite.
Une porte (core::TileType::Door) n'est jamais solide au sens de core::isSolid — sa solidité réelle dépend de l'état du mécanisme qui la commande, jamais reflété par hmi::
TileSkinTag::type (figé au chargement). doorCollision, quand fourni, tranche donc son ombre d'après l'état courant (core::MechanismController::collisionMap) plutôt que d'après le type statique — une porte fermée projette une ombre, une porte ouverte n'en projette plus. nullptr (l'éditeur, qui ne simule aucun mécanisme) exclut simplement les portes de l'ombrage.
Un bloc poussable (EX-GP-022) suit son ombre automatiquement : son entité porte la même position interpolée (hmi::PreviousPosition, EX-ARCH-031) que celle utilisée pour son propre sprite, jamais recalculée ici.
| scene | Scène à remplir (non vidée : la composition peut être cumulative). |
| world | Monde dont on lit Transform, TileSkinTag, PreviousPosition. |
| mode | Mode de rendu courant : sans effet en dehors de RenderMode::Texture (EX-REN-046) — le mode Physique reste la lecture nue des collisions. |
| textures | Textures liables (seul hmi::SceneTextures::atlas est utilisé : l'ombre n'est jamais celle d'un skin, toujours celle de l'atlas procédural). |
| interpolationAlpha | Facteur d'interpolation [0, 1[ (EX-ARCH-031), identique à celui de hmi::composeWorldSprites. |
| doorCollision | Grille de collision courante des mécanismes (core::MechanismController:: collisionMap), ou nullptr pour ignorer les portes (aucune simulation de mécanisme, comme dans l'éditeur). |
| void hmi::composeText | ( | ComposedScene & | scene, |
| const BitmapFont & | font, | ||
| std::string_view | text, | ||
| float | x, | ||
| float | y, | ||
| float | scale, | ||
| const core::Color & | tint, | ||
| TextAnchor | anchor = {}, | ||
| std::int32_t | sortOrder = 0 ) |
Raccourci de hmi::composeText prenant directement une hmi::BitmapFont.
| scene | Scène composée (mêmes contraintes que la surcharge ci-dessus). |
| font | Police chargée (fournit métriques et texture). |
| text | Texte à composer, en UTF-8. |
| x | Abscisse écran du point d'ancrage, en pixels. |
| y | Ordonnée écran du point d'ancrage, en pixels. |
| scale | Facteur d'échelle appliqué aux glyphes. |
| tint | Teinte appliquée aux quads. |
| anchor | Point de la boîte englobante du texte qui coïncide avec (x, y). |
| sortOrder | Tri fin à l'intérieur du calque UI et de la texture de police. |
| void hmi::composeText | ( | ComposedScene & | scene, |
| const FontMetrics & | metrics, | ||
| TextureHandle | texture, | ||
| int | textureWidth, | ||
| int | textureHeight, | ||
| std::string_view | text, | ||
| float | x, | ||
| float | y, | ||
| float | scale, | ||
| const core::Color & | tint, | ||
| TextAnchor | anchor = {}, | ||
| std::int32_t | sortOrder = 0 ) |
Compose une chaîne en quads sur le calque UI, ancrée à une position écran.
Émet un hmi::SpriteQuad par point de code couvert par metrics (substitution déterministe d'un caractère non couvert, EX-NFR-040 — jamais un caractère ignoré silencieusement, sauf l'espace, jamais dessinée : elle n'a aucun pixel visible, l'émettre serait un quad pour rien). Positions arrondies au pixel écran entier (netteté, EX-ARCH-022) ; un retour à la ligne (\n) revient à l'abscisse d'ancrage, une lineHeight plus bas.
| scene | Scène composée, remplie (pas vidée : la composition peut être cumulative). |
| metrics | Métriques de la police utilisée (hmi::BitmapFont::metrics). |
| texture | Texture de l'atlas de glyphes (hmi::BitmapFont::textureHandle). |
| textureWidth | Largeur de l'atlas de glyphes, en pixels (normalisation UV). |
| textureHeight | Hauteur de l'atlas de glyphes, en pixels (normalisation UV). |
| text | Texte à composer, encodé en UTF-8. |
| x | Abscisse écran du point d'ancrage, en pixels. |
| y | Ordonnée écran du point d'ancrage, en pixels. |
| scale | Facteur d'échelle appliqué aux glyphes (entier recommandé, netteté pixel art). |
| tint | Teinte appliquée aux quads (le nuanceur multiplie texture × couleur). |
| anchor | Point de la boîte englobante du texte qui coïncide avec (x, y). |
| sortOrder | Tri fin à l'intérieur du calque UI et de la texture de police. |
| void hmi::composeWorldSprites | ( | ComposedScene & | scene, |
| core::World & | world, | ||
| RenderMode | mode, | ||
| const SceneTextures & | textures, | ||
| float | interpolationAlpha, | ||
| const LayerVisibility & | visibility = LayerVisibility{} ) |
Compose les entités affichables d'un monde ECS en primitives.
Parcourt les entités portant un core::Transform et un core::Sprite, résout la région d'atlas en coordonnées de texture normalisées, applique l'interpolation de rendu (hmi::PreviousPosition) et empile un hmi::SpriteQuad par entité. Lecture seule de l'ECS (EX-ARCH-012) : ni la simulation ni l'interpolation ne sont affectées, y compris pour une entité écartée par le culling (elle reste simulée, elle n'est simplement pas dessinée).
Le calque de chaque entité vient de son hmi::RenderLayerTag, ou vaut hmi::DEFAULT_RENDER_LAYER en son absence ; core::Sprite::layer reste le tri fin à l'intérieur de ce calque.
L'apparence de chaque entité — texture liée et région échantillonnée — est résolue ici, à la composition, par hmi::resolveTileAppearance (LOT-41) : changer de mode de rendu ne reconstruit donc jamais la scène ECS.
| scene | Scène à remplir (non vidée : la composition peut être cumulative). |
| world | Monde dont on lit Transform, Sprite, PreviousPosition, RenderLayerTag. |
| mode | Mode de rendu courant (EX-REN-046). |
| textures | Textures liables et leurs dimensions (atlas et damier de repli). |
| interpolationAlpha | Facteur d'interpolation [0, 1[ entre le pas de simulation précédent et le pas courant (EX-ARCH-031) ; 0 reproduit le rendu non interpolé. |
| visibility | Jeu de visibilités par calque du mode d'inspection de l'éditeur (hmi::LayerVisibility, LOT-51, EX-EDIT-044) : tout visible par défaut, donc sans effet pour hmi::GameSession qui ne le fournit jamais. |
|
nodiscardnoexcept |
Calcule le recadrage UV d'une image pour couvrir un rectangle cible sans déformation.
Fonction pure, testable sans GPU (EX-NFR-010) : ratio d'aspect préservé, recadrage par le centre plutôt qu'étirement libre (décision de cadrage LOT-44) — l'image déborde sur la dimension excédentaire. Équivalent du motif CSS background-size: cover, exprimé en coordonnées UV plutôt qu'en pixels écran. Aucun recadrage (UV [0,1] complet) quand les deux ratios coïncident.
| imageWidth | Largeur de l'image source, en pixels (> 0). |
| imageHeight | Hauteur de l'image source, en pixels (> 0). |
| targetWidth | Largeur du rectangle à couvrir, unités cohérentes avec targetHeight (> 0). |
| targetHeight | Hauteur du rectangle à couvrir (> 0). |
|
nodiscard |
Calcule le quad d'affichage du personnage à partir de la taille de l'image et de la hitbox, par ancrage centre-bas (LOT-48 TACHE-01).
Fonction pure, testable sans GPU (EX-NFR-010) : le centre-bas de l'image est aligné sur le centre-bas de la hitbox (core::playerSize()), indépendamment de la taille de l'image — une image plus grande ou plus large que la hitbox ne déplace donc jamais celle-ci (EX-ARCH-012, la hitbox elle-même n'est jamais lue ni modifiée ici, seulement sa taille). L'ancrage est symétrique horizontalement : le retournement (LOT-48 TACHE-03) n'a besoin d'aucune correction de position, seulement d'un échange des coordonnées de texture.
| imageSizePixels | Taille de l'image à afficher (une image de la spritesheet, ou de l'image procédurale, toujours carrée), en pixels. |
| hitboxSize | Taille de la boîte de collision (core::playerSize()), en unités monde. |
|
nodiscardnoexcept |
Rapport de contraste WCAG entre deux couleurs (1 = aucun contraste, 21 = noir sur blanc).
|
nodiscard |
Copie les pixels d'une région dans un presse-papiers autonome (ne référence plus image).
| image | Image consultée. |
| region | Région copiée ; un presse-papiers vide si region est vide. |
|
nodiscard |
Crée une texture GPU à partir de pixels RGBA déjà décodés.
Le téléversement des pixels est différé : il est déposé dans le lot de mises à jour de l'image en cours (hmi::RhiContext::updates), que l'appelant soumet avant d'ouvrir sa passe de rendu. C'est la contrainte de QRhi qui l'impose, pas un choix d'optimisation — un téléversement ne peut pas avoir lieu au milieu d'une passe.
| context | Interface de rendu et lot de mises à jour de l'image courante. |
| width | Largeur en pixels (doit être strictement positive). |
| height | Hauteur en pixels (doit être strictement positive). |
| pixels | Pixels RGBA8, taille attendue width * height. |
|
nodiscard |
|
nodiscard |
Décode un fichier image (PNG au minimum) en pixels RGBA.
| path | Chemin du fichier image. |
|
nodiscardnoexcept |
Ordre de profondeur d'une primitive, à partir du pied de son quad.
Le pied — le bord bas — et non le coin haut : c'est le point de contact avec le sol qui décide de la profondeur. Deux sprites de hauteurs différentes posés sur la même case doivent s'ordonner de la même façon, ce que leur coin haut ne dit pas (EX-REN-018).
Fonction pure, sans GPU. Un Y plus grand (plus bas à l'écran, y vers le bas) donne un ordre plus grand, donc un dessin plus tard, donc au-dessus.
| footWorldY | Ordonnée du bord bas du quad, en unités monde. |
|
nodiscard |
Description en français des dimensions attendues (« 16×16 px », « multiple de 16 px… »).
| contract | Contrat à décrire. |
|
nodiscard |
Message d'avertissement listant des références, une par jeu de skins.
| references | Références à décrire (typiquement le résultat de findSkinCatalogReferences). |
references est vide.
|
nodiscard |
Détecte les transitions des mécanismes entre deux pas de simulation consécutifs.
Un même mécanisme (isDoorOpen) sert à la fois de déclencheur et de porte : une seule transition produit un seul événement (celui du déclencheur), jamais un second pour la porte — sans quoi une simple activation jouerait deux sons superposés.
| previous | État des mécanismes au pas précédent. |
| current | État des mécanismes au pas courant. |
| isContinuous | Pour chaque mécanisme (même index que previous / current) : true = plaque de pression (joue « pressée »/« relâchée »), false = interrupteur à bascule (joue « basculé »). Un désaccord de taille entre les trois vecteurs ignore l'index en trop plutôt que d'accéder hors bornes. |
|
nodiscard |
Traduit l'issue d'un pas de simulation en événement.
| outcome | Issue renvoyée par core::evaluateOutcome / core::GameSession::update. |
| PixelRegion hmi::drawLine | ( | DecodedImage & | image, |
| int | x0, | ||
| int | y0, | ||
| int | x1, | ||
| int | y1, | ||
| std::uint32_t | color ) |
Trace une ligne pleine entre deux positions (algorithme de Bresenham).
Sans elle, un glisser rapide de souris entre deux positions successives d'un même geste laisse des pixels isolés au lieu d'un trait continu — le défaut le plus visible d'un canevas pixel art fait naïvement.
| image | Image modifiée en place. |
| x0 | Colonne de départ. |
| y0 | Ligne de départ. |
| x1 | Colonne d'arrivée. |
| y1 | Ligne d'arrivée. |
| color | Couleur posée sur chaque pixel du tracé. |
|
nodiscardnoexcept |
screen.
|
nodiscardnoexcept |
workspace. Jamais les deux barres d'outils à la fois : c'est la propriété que le lot existe pour établir.
|
nodiscard |
tool.
|
nodiscard |
tool. id, si elle appartient au groupe PixelTools ; std::nullopt sinon (LOT-54 TACHE-04).
|
nodiscard |
id.
|
nodiscard |
id, si elle appartient au groupe LevelTools ; std::nullopt pour une commande ou un outil de canevas pixel art.
|
nodiscardnoexcept |
Jetons du châssis d'édition en thème sombre (défaut) : variables, editorLightTokens() (LOT-56 TACHE-06) en fournit un second jeu.
|
nodiscardnoexcept |
Jetons du châssis d'édition en thème clair (LOT-56 TACHE-06) : mêmes rôles, mêmes échelles que editorDarkTokens() — seules les couleurs diffèrent, et pas par simple inversion (les écarts de luminosité entre bordures/lignes alternées/fond diffèrent en clair et en sombre).
|
nodiscard |
Décide le contenu de la barre d'état de l'éditeur pour context.
Fonction pure (EX-NFR-010) : ne lit que ce qu'on lui passe, aucune dépendance Qt/GPU — même patron que hmi::gameHudLines (LOT-52). Le rendu (MainWindow) n'a plus qu'à afficher ce que cette fonction décide, et à la rappeler après l'expiration d'un message transitoire pour restaurer l'aide affichée.
| context | Contexte d'édition courant ; context.level absent (aucun niveau ouvert) produit des zones et une aide vides. |
| localization | Catalogue de traduction (EX-REN-033) — aucune chaîne en dur. |
|
nodiscard |
|
nodiscard |
Écrit un fichier PNG depuis des pixels RGBA déjà en mémoire — symétrique de decodeImageFile.
Écriture atomique : les pixels sont d'abord écrits dans un fichier temporaire du même dossier, puis ce fichier remplace path en une seule opération (std::filesystem::rename). Une interruption (crash, disque plein en cours d'écriture) laisse donc soit l'ancien fichier intact, soit le nouveau complet, jamais un fichier tronqué — ce qui importe d'autant plus que le rechargement à chaud (LOT-43) peut lire pendant l'écriture. Le fichier temporaire ne subsiste ni après un succès ni après un échec.
Le format en mémoire reste Format_RGBA8888 (alpha non prémultiplié), comme au décodage : décoder puis réencoder restitue exactement les mêmes pixels, canal alpha compris.
| path | Chemin du fichier PNG à écrire. |
| image | Image à encoder (dimensions strictement positives, pixels.size() == width * height). |
| PixelRegion hmi::eraseLine | ( | DecodedImage & | image, |
| int | x0, | ||
| int | y0, | ||
| int | x1, | ||
| int | y1 ) |
Efface une ligne pleine entre deux positions (même tracé que drawLine, alpha nul plutôt qu'une couleur posée).
Pendant de drawLine pour la gomme : un glisser rapide avec la gomme doit laisser une trace continue effacée, pas des pixels effacés isolés — même défaut, même correction.
| image | Image modifiée en place. |
| x0 | Colonne de départ. |
| y0 | Ligne de départ. |
| x1 | Colonne d'arrivée. |
| y1 | Ligne d'arrivée. |
| PixelRegion hmi::erasePixel | ( | DecodedImage & | image, |
| int | x, | ||
| int | y ) |
Efface un pixel (alpha nul), sans changer sa couleur RVB.
Alpha nul, RVB conservé plutôt que mis à zéro : un pixel effacé puis re-coloré sans jamais changer sa teinte reproduit l'attente naturelle d'une gomme.
| image | Image modifiée en place. |
| x | Colonne (0-based). |
| y | Ligne (0-based). |
|
nodiscard |
Dossier contenant l'exécutable en cours, pour localiser les ressources copiées à côté (niveaux, catalogues de traduction, logs).
|
nodiscard |
Couleurs effectivement présentes dans une image, dans un ordre déterministe.
Fonction pure. Un pixel totalement transparent (alpha nul) n'est jamais une couleur — c'est la gomme, pas une entrée de palette (même règle que hmi::constrainToPalette ci-dessous) : une image entièrement transparente produit donc une liste vide. L'ordre (première apparition, balayage ligne par ligne) est stable d'un appel à l'autre sur la même image.
| image | Image consultée. |
|
nodiscard |
Repère toutes les entrées de skins.json qui citent un fichier donné.
Les références aux assets se font par nom de fichier : sans cette détection, renommer ou supprimer un asset casse silencieusement les jeux de skins qui le citent (LOT-43 TACHE-02).
Portée actuelle : seul hmi::SkinCatalog peut référencer un asset aujourd'hui — core::Level ne porte encore aucun champ de ce type (le fond de niveau, la désignation d'un jeu de skins par un niveau, etc. sont posés à partir de LOT-44). Cette fonction est le point d'extension déjà en place : les lots suivants y ajouteront la détection des niveaux sur disque sans changer sa signature ni celle de describeReferences.
Logique pure (aucune dépendance Qt/GPU/fichier), testable en isolation (EX-NFR-010).
| catalog | Catalogue interrogé (tous les jeux, pas seulement le courant). |
| fileName | Nom de fichier recherché, comparé exactement (pas de sous-chaîne : un nom proche mais différent ne doit jamais déclencher de faux positif). |
|
nodiscard |
Index à plat (0-based) d'une image dans la grille sous les tuiles : Idle (0..PLAYER_IDLE_FRAME_COUNT-1), puis Run, puis Jump.
Seule source de vérité de cet ordre, partagée par buildProceduralAtlasImage (placement des images) et par TextureAtlas::playerFrameRegion (résolution de la même région) — les dupliquer aux deux endroits risquerait de les laisser diverger silencieusement.
| clip | Clip d'animation du personnage. |
| frameIndex | Index de l'image dans le clip (0-based). |
|
nodiscard |
Aplatit des plans en une seule image, par alpha-over dans l'ordre donné.
Les couches masquées sont ignorées — c'est ce qui rend l'isolement (hmi::PlaneVisibility) effectif dans le repère aussi, et pas seulement à l'écran de jeu. Chaque couche est ramenée à la densité cible par resamplePlane avant d'être composée : une couche de densité incompatible est ignorée plutôt que déformée.
| layers | Couches à aplatir, de la plus lointaine à la plus proche. |
| pixelsPerUnit | Densité cible (celle du plan peint). |
| widthUnits | Largeur du niveau, en unités monde. |
| heightUnits | Hauteur du niveau, en unités monde. |
| PixelRegion hmi::flipHorizontal | ( | DecodedImage & | image, |
| const PixelRegion & | region ) |
Retourne une région horizontalement (miroir gauche-droite), en place.
Involutive : appliquer deux fois de suite restitue exactement le contenu d'origine.
| image | Image modifiée en place. |
| region | Région retournée ; sans effet si vide. |
region telle quelle si non vide, sinon une région vide — jamais d'entrée d'historique pour une région vide (à la charge de l'appelant de ne pas en pousser une). | PixelRegion hmi::flipVertical | ( | DecodedImage & | image, |
| const PixelRegion & | region ) |
Retourne une région verticalement (miroir haut-bas), en place.
Involutive, comme flipHorizontal.
| PixelRegion hmi::floodFill | ( | DecodedImage & | image, |
| int | x, | ||
| int | y, | ||
| std::uint32_t | color ) |
Remplit, de proche en proche, la zone connexe (4-connexité) de même couleur que le pixel de départ.
Itératif (file explicite), jamais récursif : une récursion sur une grande zone déborderait la pile. Sans effet — et sans parcourir quoi que ce soit — si (x, y) est hors bornes ou si la couleur de départ est déjà color, ce qui évite à la fois une opération d'historique vide et une boucle sans fin sur une image déjà uniforme.
| image | Image modifiée en place. |
| x | Colonne du point de départ. |
| y | Ligne du point de départ. |
| color | Couleur de remplissage. |
|
nodiscard |
Résumé des compteurs d'une image, pour la journalisation de diagnostic (EX-NFR-005).
| statistics | Compteurs à formater. |
|
nodiscard |
Lignes à afficher pour l'affichage tête haute d'un pas de simulation donné.
Fonction pure (EX-NFR-010) : ne lit que ce qu'on lui passe, aucun accès GPU/fichier. C'est ce qui rend le contenu du HUD assertable sans rendu — la brique de texte (hmi::composeText, TACHE-02) n'a plus qu'à afficher ce que cette fonction décide.
Les budgets de sauts et de dashs ont disparu avec eux (LOT-06) : ils comptaient les ressources d'un personnage de plateforme, que le déplacement en vue de dessus n'a plus. Ne reste que ce qui a encore un sens — l'invite contextuelle et le nom du tableau.
| levelName | Nom du tableau en cours (core::Level::name), affiché tel quel (donnée, pas un libellé traduit). |
| localization | Catalogue de traduction des libellés (EX-REN-033) — aucune chaîne en dur, y compris les libellés courts. |
| overlappingKey | Le personnage touche-t-il une clé non ramassée (EX-GP-023) ? Si oui, une invite rappelle l'action « Interagir » (EX-CTRL-022). Ramasser une clé exige le contact et cette action — la seule entrée du jeu qu'aucun autre tableau ne demande. Sans invite, un joueur qui l'ignore reste bloqué devant la porte verrouillée sans aucun retour, ce qu'interdit la conception des niveaux (niveaux.md, Sec. 3). Le tutoriel restant « sans texte », c'est la seule exception, et elle est contextuelle. Faux par défaut : un tableau sans clé n'affiche jamais rien. |
|
nodiscard |
Nom lisible d'un bouton manette, pour l'affichage dans l'écran de remappage.
| button | Bouton à nommer. |
|
nodiscardconstexprnoexcept |
Faut-il re-sonder XInput maintenant ?
XInputGetState est notablement coûteux sur un slot vide (le pilote énumère les périphériques à chaque appel) : sonder sans relâche une manette absente provoque des micro-saccades chez un joueur clavier (LOT-33). L'espacement est donc décidé en temps réel, jamais en nombre d'appels : le sondage est déclenché tantôt par la boucle de rendu (une fois par image), tantôt par un temporisateur d'interface (150 ms pour la navigation de menu, 500 ms pour l'onglet des options). Un compteur d'appels ferait dépendre le délai de détection de l'appelant, dans un rapport de plus de cent entre le plus rapide et le plus lent : c'est la cadence en secondes qui doit être garantie, pas un nombre de tours.
Fonction pure (EX-NFR-010) : décidée ici, testable sans manette ni fenêtre.
| wasConnected | État de connexion du dernier sondage effectif. |
| sinceLastProbe | Temps écoulé depuis ce sondage. |
|
nodiscardnoexcept |
role (monospace pour l'identité à empattements, sans-serif pour le châssis d'édition). C'est le repli de la feuille de style quand aucune police embarquée n'a pu être enregistrée : un mot-clé générique, jamais un second nom de police codé en dur (EX-IHM-052).
|
nodiscardnoexcept |
Indique si type a une silhouette, c'est-à-dire une matière qui n'occupe pas toute la case et qu'il faut détourer à l'affichage.
| type | Type de tuile. |
type figure dans SILHOUETTE_TILE_TYPES — donc jamais tant que cette liste est vide.
|
nodiscard |
Traduit un hmi::Key en code Qt::Key, inverse de qtKeyToHmiKey (LOT-57 TACHE-04).
Sert à faire refléter un remappage (EditorKeyBindings/GameKeyBindings) sur le raccourci effectif d'un QAction (hmi::EditorActions::applyShortcuts). Comme l'aller, les lettres et chiffres partagent déjà la même valeur entre Qt et Win32 — conversion directe pour tout code non explicitement nommé.
| key | Touche à traduire. |
|
nodiscard |
action effective.
|
nodiscard |
Décrit la géométrie d'une icône, en espace normalisé.
Fonction pure : mêmes entrées, même sortie, aucune dépendance à Qt ni au GPU. Les formes visent des silhouettes distinctes plutôt qu'un détail fin : elles doivent rester lisibles à la plus petite taille d'icône des jetons (SizeTokens::iconSmall).
|
nodiscardnoexcept |
|
nodiscardnoexcept |
Facteur d'agrandissement des écrans du jeu pour une hauteur de fenêtre donnée.
La hauteur attendue est celle en pixels logiques, pas en pixels réels : la mise à l'échelle du système d'exploitation est appliquée par Qt par-dessus ce facteur, sur une disposition exprimée en unités logiques. Multiplier une seconde fois par devicePixelRatio ici produirait une interface deux fois trop grande sur un écran réglé à 200 %.
Le résultat est toujours un entier d'au moins 1, même pour une fenêtre plus petite que la maquette : une fenêtre étroite doit rogner l'écran, jamais le rendre à une échelle fractionnaire.
| windowLogicalHeight | Hauteur de la fenêtre, en pixels logiques. |
|
nodiscardnoexcept |
Facteur d'agrandissement borné par la zone d'affichage réellement disponible (EX-IHM-081).
identityScaleFor seule ne connaît que la fenêtre, et c'est insuffisant : le facteur grossit les grandeurs d'habillage, qui grossissent la taille minimale des écrans, qui grossit celle de la fenêtre — laquelle relance le calcul un cran plus haut. Rien ne redescend jamais, la fenêtre ne pouvant pas passer sous son propre minimum : c'est un cliquet, et il n'a d'issue que si le facteur cesse de dépendre d'une hauteur que lui-même fait croître.
La zone disponible, elle, ne dépend de rien que l'application décide. La borner ferme la boucle : une fenêtre que Qt a été contraint d'agrandir au-delà de l'écran ne gagne plus de facteur pour autant.
| windowLogicalHeight | Hauteur de la fenêtre, en pixels logiques. |
| availableLogicalHeight | Hauteur utile de l'écran hébergeant la fenêtre (hors barre des tâches), en pixels logiques. Une valeur nulle ou négative signifie « écran inconnu » et laisse la seule hauteur de fenêtre décider. |
|
nodiscardnoexcept |
Jetons de l'identité du jeu (menu principal, écran Options, jeu) : invariants, ne suivent jamais aucun réglage d'affichage (EX-IHM-050).
|
nodiscardnoexcept |
Rectangle écran du pixel image (x, y), au zoom et décalage de vue donnés.
Fonction pure : ne dépend que de view, jamais des bornes de l'image — c'est elle qui garantit que la grille, le pixel survolé et le tracé de sélection (TACHE-06) s'accordent toujours exactement, puisqu'ils l'appellent tous.
|
nodiscard |
|
nodiscardnoexcept |
true si image a exactement les dimensions d'une planche à raccords bitmask16.
| image | Image consultée. |
| tileSize | Côté d'une case, en pixels (TextureAtlas::TILE_SIZE). |
|
nodiscardnoexcept |
Indique si le pixel (localX, localY) d'une case appartient à la matière de type.
Point de vérité unique de la silhouette, partagé par l'atlas procédural et le détourage des skins : deux implémentations de la même forme finiraient par diverger, et un skin découpé autrement que l'atlas se verrait immédiatement.
| type | Type de tuile. |
| localX | Abscisse du pixel dans la case, 0-based. |
| localY | Ordonnée du pixel dans la case, 0-based. |
| tileSize | Côté de la case, en pixels. |
|
nodiscardconstexprnoexcept |
type est une cible de liaison (porte ou porte verrouillée, EX-GP-023).
|
nodiscardnoexcept |
Indique si un type de tuile est un mécanisme à état, dont l'apparence dépend d'une donnée lue en lecture seule dans Core (EX-ARCH-012).
| type | Type de tuile. |
|
nodiscardconstexprnoexcept |
type est un déclencheur de liaison (interrupteur, plaque de pression ou clé, EX-GP-023).
|
nodiscard |
Indique si name peut servir de nom de niveau (donc de nom de fichier Windows).
Liste noire minimale (pas une liste blanche restrictive : les accents et l'Unicode restent autorisés, EX-NFR-010 n'impose rien de plus) : un nom valide n'est pas vide une fois les espaces de bord retirés, et ne contient aucun des caractères interdits par le système de fichiers Windows (antislash, barre oblique, deux-points, astérisque, point d'interrogation, guillemet droit, chevrons ouvrant/fermant, barre verticale).
| name | Nom saisi, tel quel (non retiré de ses espaces de bord). |
name peut être utilisé comme nom de niveau.
|
nodiscardconstexprnoexcept |
denominator est une valeur acceptée (1, 2, 4 ou 8).
|
nodiscard |
id est la commande effective, si elle en a une.
|
nodiscard |
|
nodiscard |
Nom lisible d'une touche, pour l'affichage dans les écrans de remappage (LOT-29) et le panneau d'aide de l'éditeur (EX-EDIT-015).
| key | Touche à nommer (n'importe quel code, pas seulement les énumérateurs nommés). |
|
nodiscard |
Compose la ligne de rappels en texte enrichi.
Les couleurs viennent des jetons et ne sont jamais littérales (EX-IHM-051) : la ligne suit la palette comme le reste de l'écran.
| hints | Rappels à afficher, dans l'ordre. Une liste vide produit une chaîne vide, jamais un cadre orphelin. |
| tokens | Jetons de la portée à employer (identité pour les écrans du jeu). |
| scale | Facteur d'agrandissement entier (hmi::identityScaleFor), appliqué au rembourrage et à la taille du texte. |
|
nodiscardnoexcept |
Boîte englobante d'un segment épais, en unités monde.
Englobe les deux extrémités et l'épaisseur (élargie d'une demi-épaisseur de chaque côté) : un segment horizontal ou vertical aurait sinon une boîte d'aire nulle, systématiquement écartée par le culling.
| quad | Primitive à borner. |
|
nodiscardnoexcept |
Calcule le segment reliant le centre de la case trigger au centre de la case target, avec un éventuel décalage perpendiculaire anti-superposition de l'extrémité cible.
Quand plusieurs liens partagent le même déclencheur, fanIndex/fanCount (index de ce lien parmi ses frères, nombre total de frères) écartent les cibles les unes des autres perpendiculairement à leur direction, pour rester lisibles (EX-IHM-030) — en éventail : l'extrémité a (centre du déclencheur) reste la même pour tous les frères, seule l'extrémité b (cible) se décale. Un décalage des deux extrémités produirait des traits parallèles empilés, moins lisible qu'un éventail partant d'une base commune.
| trigger | Case du déclencheur (origine du segment). |
| target | Case de la cible (extrémité du segment). |
| fanIndex | Index de ce lien parmi les liens partageant le même déclencheur (0-based). |
| fanCount | Nombre total de liens partageant ce déclencheur (>= 1). |
|
nodiscard |
Liste les fichiers image d'un dossier, filtrés par un texte de recherche.
Logique pure (aucune dépendance Qt/GPU), testable en isolation (EX-NFR-010) : c'est la balayage qui alimente hmi::AssetThumbnailView, réutilisable tel quel par toutes les sections du panneau « Textures » (Skins, puis Fond, Objets, Animations, Décors).
| directory | Dossier balayé (typiquement un sous-dossier de Assets/). |
| filterText | Sous-chaîne recherchée dans le nom de fichier, comparaison insensible à la casse ; vide pour ne filtrer sur rien. |
|
nodiscard |
Liste les fichiers de skins disponibles, par balayage d'un dossier.
Le level designer choisit dans cette liste : aucune saisie de chemin, qui serait à la fois pénible et source de configurations invalides.
| skinsDirectory | Dossier balayé (typiquement executableDirectory()/Assets/Skins). |
|
nodiscard |
Charge le personnage de démonstration livré en donnée, et calcule ses deux tables.
ÉCHAFAUDAGE, et il est écrit comme tel. Il n'existe encore ni groupe ni sauvegarde d'où tirer un personnage réel, et des écrans qui n'affichent aucun personnage ne se relisent pas. Le jour où une partie en fournira un, c'est cette fonction qui change — pas les écrans, qui ne consomment que des valeurs nommées, d'où qu'elles viennent.
Pourquoi une fonction partagée. La fiche et l'inventaire décrivent le même personnage : charger deux fois les huit catalogues aurait doublé le travail et, surtout, permis aux deux écrans de diverger — la classe d'armure de la fiche vient de ce que l'inventaire contient, et deux chargements séparés auraient pu ne pas voir le même équipement.
Une donnée manquante n'interrompt rien : l'erreur est journalisée en nommant son fichier (EX-CNT-010) et les tables sont partielles. Un écran partiel garde ses tirets, ce qui est la vérité — et vaut mieux qu'un écran vide.
|
nodiscard |
Lit des métriques de police depuis un fichier.
| path | Chemin du fichier. |
|
nodiscard |
Lit des métriques de police depuis une chaîne JSON.
Format : {"version":1,"lineHeight":10,"replacement":"?","glyphs":[{"char":"A","x":0,"y":0, "width":6,"height":10,"advance":6}, ...]}. "replacement" est optionnel (? par défaut).
| json | Contenu JSON. |
|
nodiscard |
Décode un fichier image puis crée la texture GPU correspondante.
| context | Interface de rendu et lot de mises à jour de l'image courante. |
| path | Chemin du fichier image. |
|
nodiscard |
Libellé de taxonomie traduit dans la langue active.
| loc | Catalogue de traduction, ou nullptr avant la première retraduction. |
| label | Libellé issu de la taxonomie. |
|
nodiscardnoexcept |
Largeur et hauteur qu'occuperait text avec metrics, à l'échelle scale.
Fonction pure, sans GPU (EX-NFR-010) : c'est ce qui permet de cadrer un affichage sans le dessiner (ancrage, hmi::TextRenderer). Un retour à la ligne (\n) revient à une largeur nulle et ajoute une lineHeight ; un caractère non couvert (même après substitution) n'avance pas.
| metrics | Métriques de la police mesurée. |
| text | Texte UTF-8 mesuré. |
| scale | Facteur d'échelle appliqué aux dimensions. |
|
nodiscardnoexcept |
Alpha de diagnostic, réservé au mode Physique (LOT-47 TACHE-03).
Le mode Physique n'a pas d'assets animés et doit conserver un moyen de distinguer un mécanisme actif d'un mécanisme inactif ; le mode Texture, lui, montre désormais l'état au clip, jamais à l'alpha — la teinte y redevient un pur ajustement colorimétrique (EX-REN-046). Fonction pure, testable sans GPU : hmi::GameSession ne fait que lui fournir le mode courant, l'état et la paire d'alpha propre à la famille de mécanisme concernée (porte : ouverte plus transparente ; danger : actif plus opaque — deux sens opposés, jamais une formule unique).
| mode | Mode de rendu courant. |
| active | État logique du mécanisme. |
| activeAlpha | Alpha appliqué quand active vaut true, en mode Physique. |
| inactiveAlpha | Alpha appliqué quand active vaut false, en mode Physique. |
activeAlpha ou inactiveAlpha en mode Physique.
|
nodiscard |
Noms de clip attendus par la correspondance pour un type de mécanisme, dans l'ordre du tableau ci-dessus (utilisé par le diagnostic du panneau « Textures », LOT-47 TACHE-04).
| type | Type de tuile. |
type n'est pas un mécanisme à état.
|
nodiscardnoexcept |
Nom du clip d'état cible d'un mécanisme, d'après son type et son état logique courant.
Fonction pure : ni GPU, ni Qt, ni ECS — seulement la table de correspondance (LOT-47 TACHE-01). Un type sans état renvoie std::nullopt : c'est à l'appelant de ne rien demander, plutôt qu'à cette fonction d'inventer une réponse.
| type | Type de tuile. |
| active | État logique courant : porte ouverte, interrupteur/plaque actionné, danger commuté actif. Sans effet pour les types sans état (un seul clip, l'état est porté par la position, pas par ce booléen). |
type n'est pas un mécanisme à état.
|
nodiscardnoexcept |
Nom du clip de transition joué une fois lors d'un changement d'état (LOT-47 TACHE-02), s'il y a lieu.
Seule Door transitionne visiblement (closed → opening → open, open → closing → closed) ; les autres familles basculent directement sur leur clip d'état cible (mechanismTargetClip). Fonction pure, ne consulte aucun catalogue d'asset : c'est à l'appelant de vérifier que le clip retourné existe réellement dans le jeu de clips de l'asset assigné, et de replier sur mechanismTargetClip sinon (LOT-47 TACHE-02, repli sur clip manquant).
| type | Type de tuile. |
| wasActive | État logique au pas précédent. |
| isActive | État logique au pas courant. |
type ne transitionne pas ou que l'état n'a pas changé.
|
nodiscard |
Pavés du décor, dans l'ordre de dessin (les derniers recouvrent les premiers).
Les proportions suivent la surface : le décor se recompose à toute taille de fenêtre plutôt que d'être calé sur une définition de référence. Le pas de la grille suit scale, de sorte que les blocs du sol restent alignés sur celui du jeu.
| width | Largeur de la surface, en pixels. |
| height | Hauteur de la surface, en pixels. |
| scale | Facteur d'agrandissement entier (hmi::identityScaleFor). |
|
nodiscard |
Message d'avertissement émis lorsqu'un asset attendu est introuvable ou refusé.
Fonction pure, séparée de la journalisation elle-même pour être assertable sans GPU : le message doit nommer l'asset attendu, seule information qui permette à l'auteur de savoir quoi créer.
| fileName | Nom logique de l'asset attendu. |
|
nodiscardnoexcept |
from et to, à la proportion ratio (0 = from, 1 = to). Sert à dériver une nuance d'un jeton plutôt qu'à en écrire une nouvelle en dur : une teinte littérale ne suivrait pas un changement de palette (EX-IHM-051). ratio est borné à [0, 1]. | PixelRegion hmi::moveRegion | ( | DecodedImage & | image, |
| const PixelRegion & | region, | ||
| int | dx, | ||
| int | dy ) |
Déplace le contenu d'une région d'un décalage donné.
La région de départ devient transparente ; le contenu est reposé au décalage donné, tronqué au cadre de l'image. Un déplacement entièrement hors cadre efface la région de départ sans rien reposer de visible — jamais d'écriture hors bornes, jamais de tampon corrompu.
| image | Image modifiée en place. |
| region | Région déplacée ; sans effet si vide. |
| dx | Décalage horizontal, en pixels. |
| dy | Décalage vertical, en pixels. |
|
nodiscardnoexcept |
Couleur de palette la plus proche de color (mode « contraindre à la palette »).
Fonction pure, distance euclidienne sur les seuls canaux RVB (l'alpha d'origine est toujours préservé, voir ci-dessous). Le départage entre couleurs équidistantes retient la première rencontrée dans palette — déterministe et stable, pour qu'un même geste sur une même image produise toujours le même résultat.
Un pixel totalement transparent (alpha nul) est renvoyé inchangé : ce n'est pas une couleur mais l'état « gomme », qui doit rester accessible même en mode contraint. Une palette vide laisse également la couleur inchangée plutôt que de produire une couleur indéfinie.
| color | Couleur posée par le geste courant. |
| palette | Couleurs de la palette (généralement PixelPalette::entries(), projetées sur leur seul champ color). |
|
nodiscardnoexcept |
|
nodiscardnoexcept |
Décode le point de code UTF-8 suivant d'une chaîne.
La mesure et la composition du texte (hmi::TextRenderer) doivent parcourir des points de code, pas des octets : un caractère accentué du catalogue de traduction (EX-REN-033) occupe plusieurs octets en UTF-8.
| text | Chaîne UTF-8 parcourue. |
| index | Décalage en octets ; avancé jusqu'au début du point de code suivant. |
|
nodiscard |
Choisit la vignette à afficher pour un type de tuile dans la palette.
INVARIANT : ce que la palette montre est ce que le canevas posera. Dès lors que le canevas affiche des textures, une palette qui montrerait encore des pastilles de couleur ferait choisir « la tuile violette » à l'aveugle.
Applique exactement la même priorité que le canevas (hmi::resolveTileAppearance) — mode Physique → couleur plate ; sinon skin assigné ; sinon damier. Les deux ne peuvent diverger que si l'on duplique la décision, d'où cette fonction unique plutôt qu'un choix pris dans le widget.
Un type en mode bitmask16 rend la case représentative de la planche (l'intérieur plein) : la planche entière serait illisible en vignette, et la case zéro — la tuile isolée — serait un cas particulier peu représentatif du motif.
Logique pure (aucune dépendance Qt/GPU), testable en isolation (EX-NFR-010).
| mode | Mode de rendu courant (EX-REN-046). |
| type | Type de tuile dont on veut la vignette. |
| physicalRegion | Région d'atlas du type en mode Physique (hmi::regionForTile). |
| catalog | Catalogue des skins, ou nullptr si aucun n'est chargé. |
| setName | Jeu de skins courant ; vide pour le jeu par défaut du catalogue. |
|
nodiscard |
tool.
|
nodiscard |
tool, ou std::nullopt si cet outil n'en a pas (ses contrôles vivent ailleurs, ou son panneau n'est tabifié avec aucun autre – une mise en avant n'y aurait aucun effet).
|
nodiscardnoexcept |
Inverse de parallaxRenderPosition : retrouve la position modèle équivalente à un point exprimé en espace de rendu (LOT-50 TACHE-02).
Nécessaire à l'éditeur : le curseur converti par hmi::Camera2D::screenToWorld est comparable à la position de rendu d'un contenu parallaxé (c'est elle qui occupe l'écran), jamais directement à sa position modèle dès que le facteur diffère de 1.0. Cette fonction ramène donc un point d'écran dans l'espace modèle, pour que ce qu'on manipule reste visuellement « collé » au curseur quel que soit son facteur de parallaxe.
| renderPosition | Position en espace de rendu, en unités monde. |
| factor | Facteur de parallaxe par axe. |
| cameraBounds | Même rectangle caméra que celui utilisé pour parallaxRenderPosition. |
|
nodiscardnoexcept |
Calcule la position de rendu d'un contenu, décalée par sa parallaxe.
Fonction pure, sans état (LOT-49 TACHE-03) : le décalage est calculé relativement au centre de la salle courante (cameraBounds, le rectangle cadré par la caméra — solidaire de la salle, EX-REN-015) et non en espace niveau absolu. Formulation : la position de rendu est le centre de la salle, plus le déplacement du contenu par rapport à ce centre, mis à l'échelle du facteur — de sorte qu'à facteur 1.0 (PARALLAX_FACTOR_NONE) la position est inchangée, et que deux contenus à la même position relative dans deux salles différentes se retrouvent au même endroit à l'écran, quelle que soit la position absolue de chaque salle.
C'est le seul comportement cohérent avec une caméra à coupure nette entre salles (EX-REN-015, LOT-32) : un décalage absolu en espace niveau ferait sauter le contenu à chaque bascule (artefact visible) ; ce décalage-ci se replace au moment exact où toute l'image change déjà (invisible). Un décalage absolu a été envisagé au cadrage du LOT-69, au motif qu'un plan continu n'a pas de repère ponctuel ; il a été écarté pour cette raison précise.
| modelPosition | Position en espace modèle, en unités monde — jamais modifiée par cette fonction : la parallaxe est purement visuelle (EX-ARCH-012). |
| factor | Facteur de parallaxe par axe (core::Plane::parallaxX/parallaxY). |
| cameraBounds | Rectangle cadré par la caméra (hmi::Camera2D::visibleBounds), en unités monde. |
| PixelRegion hmi::pasteClipboard | ( | DecodedImage & | image, |
| const PixelClipboard & | clipboard, | ||
| int | x, | ||
| int | y ) |
Colle un presse-papiers dans l'image, coin haut-gauche à (x, y).
Tronqué au cadre de l'image : coller près d'un bord n'écrit jamais hors bornes (chaque pixel passe par setPixel, qui ignore silencieusement les positions hors bornes).
| image | Image modifiée en place. |
| clipboard | Contenu à coller ; sans effet si vide. |
| x | Colonne du coin haut-gauche du contenu collé. |
| y | Ligne du coin haut-gauche du contenu collé. |
clipboard si tronquée).
|
nodiscardnoexcept |
screen suspend la simulation (EX-IHM-091).
|
nodiscardnoexcept |
Couleur du pixel à une position donnée (outil pipette).
| image | Image consultée. |
| x | Colonne. |
| y | Ligne. |
|
nodiscardconstexprnoexcept |
true si la grille de pixels doit être dessinée pour cette vue : jamais sous le 1:1, où elle couvrirait plus de surface que les pixels qu'elle sépare.
|
nodiscardconstexprnoexcept |
true si la grille de pixels doit être dessinée à ce zoom (PIXEL_CANVAS_GRID_VISIBLE_MIN_ZOOM).
|
nodiscardnoexcept |
Taille en pixels réels du canevas entier, à l'échelle rationnelle d'une vue.
| imageWidth | Largeur de l'image, en pixels. |
| imageHeight | Hauteur de l'image, en pixels. |
| view | Vue courante (numérateur, dénominateur). |
| scaleFactor | Facteur d'échelle du support d'affichage (devicePixelRatio). |
|
nodiscardnoexcept |
Taille en pixels réels du canevas entier à un facteur d'échelle d'affichage donné.
Réutilise directement hmi::thumbnailPixelSize (LOT-56 TACHE-05) — jamais réécrite : c'est la même fonction qui dimensionne les vignettes de la bibliothèque et du panneau Textures, pour que le canevas ne redevienne pas flou à 125 %/150 % le jour où elle évolue sans lui.
| imageWidth | Largeur de l'image, en pixels. |
| imageHeight | Hauteur de l'image, en pixels. |
| zoom | Facteur de zoom entier du canevas. |
| scaleFactor | Facteur d'échelle du support d'affichage (devicePixelRatio). |
|
nodiscardconstexprnoexcept |
Échelle effective d'une vue : numérateur / dénominateur.
Les pixels restent carrés par construction — une seule échelle, appliquée aux deux axes (EX-ARCH-022). Il n'y a jamais eu, et il ne peut pas y avoir, d'échelle par axe ici.
| view | Vue courante. |
|
nodiscardconstexprnoexcept |
Vue agrandie d'un cran, en remontant l'échelle rationnelle.
L'échelle parcourt 1/8, 1/4, 1/2, 1, 2, 3, … : on remonte d'abord les dénominateurs jusqu'à 1, puis les numérateurs. Le décalage de vue est conservé tel quel.
| view | Vue courante. |
|
nodiscardconstexprnoexcept |
Zoom suivant (plus grand), borné — toujours entier.
|
nodiscardconstexprnoexcept |
Vue réduite d'un cran, en descendant l'échelle rationnelle — sous le 1:1 si besoin.
| view | Vue courante. |
|
nodiscardconstexprnoexcept |
Zoom précédent (plus petit), borné — toujours entier.
|
nodiscardconstexprnoexcept |
|
nodiscardnoexcept |
Clé de traduction décrivant une opération.
| kind | Type d'opération. |
|
nodiscard |
|
nodiscardconstexprnoexcept |
Décide si la parallaxe des plans s'applique, selon le mode de cadrage et le drapeau du niveau (EX-DEC-043, EX-REN-016).
Table pure, plutôt qu'une condition disséminée dans la session de jeu :
Le drapeau est par niveau, mais la neutralisation en WholeLevel est une règle du moteur : un level designer qui coche « parallaxe » sur un niveau WholeLevel ne verrait rien. L'interface grise donc la case dans ce mode et l'explique (TACHE-08), sinon c'est un défaut perçu.
| mode | Mode de cadrage du niveau. |
| levelFlag | Drapeau parallax déclaré par le niveau (core::Level::parallaxEnabled). |
|
nodiscardnoexcept |
Dimensions, en pixels, du PNG d'un plan.
Le format borne déjà le produit taille × densité au chargement (EX-DEC-044) : cette fonction ne re-valide rien, elle dérive. Sa raison d'être est qu'un seul endroit décide de ces dimensions — la création du fichier, le changement de densité et le contrôle de cohérence (TACHE-10) doivent tomber d'accord, et trois calculs séparés finiraient par diverger.
| widthUnits | Largeur du niveau, en cases. |
| heightUnits | Hauteur du niveau, en cases. |
| pixelsPerUnit | Densité du plan (4, 8 ou 16). |
|
nodiscardnoexcept |
Projette la profondeur d'un plan sur le calque de rendu correspondant.
Core ne connaît pas hmi::RenderLayer (EX-NFR-011) : la projection est le travail de HMI, et elle vit ici, en un point unique. Deux profondeurs, deux calques déjà réservés par LOT-40 — aucune valeur d'énumération n'est ajoutée, et RENDER_LAYER_COUNT ne bouge pas, alors même que le nombre de plans est libre : c'est le rang dans la liste qui les ordonne à l'intérieur d'un calque, pas une valeur de calque par plan (EX-REN-014).
| depth | Côté de l'ordonnancement déclaré par le plan. |
|
nodiscardnoexcept |
Somme de hmi::planeTextureMemoryBytes sur tous les plans d'un niveau.
| planes | Plans du niveau. |
| levelWidth | Largeur du niveau, en cases. |
| levelHeight | Hauteur du niveau, en cases. |
|
nodiscardnoexcept |
Mémoire de texture qu'un plan exige du format, en octets (EX-NFR-043).
Dérivée de la taille du niveau et de la densité (hmi::planePixelSize) — donc de ce que le niveau déclare, jamais de ce qui se trouve sur le disque. C'est le sens utile pour un budget : un plan dont l'image manque coûterait le damier de repli, ce qui masquerait précisément le coût qu'on veut plafonner.
Le budget du LOT-62 plafonne des primitives par niveau. Les plans le prennent à contre-pied : ils ajoutent un seul quad chacun, mais occupent une texture à l'échelle du niveau. Un plafond exprimé en primitives laisserait donc passer un niveau 200 × 100 à densité native, à 20 Mo par plan. D'où ce second axe.
| plane | Plan mesuré. |
| levelWidth | Largeur du niveau, en cases. |
| levelHeight | Hauteur du niveau, en cases. |
|
nodiscardnoexcept |
|
nodiscard |
Noms des clips que l'atlas procédural sait dessiner (Idle/Run/Jump, LOT-18) : seule source de vérité, partagée avec hmi::PlayerClipKind — traitée comme une « spritesheet » n'en déclarant que trois par hmi::resolveDeclaredPlayerClip.
|
nodiscard |
Traduit un code Qt::Key en hmi::Key.
Les lettres/chiffres/espace partagent déjà la même valeur entre Qt et Win32 (Qt::Key_A == VK 'A' == 0x41) ; seules les touches spéciales (flèches, Échap, Tab, Maj, Ctrl, F1/F2/F10) passent par une correspondance explicite. nullopt pour une touche non suivie.
|
nodiscard |
Copie les pixels d'une région, ligne par ligne — capture le « avant » ou l'« après » d'une entrée d'historique (hmi::PixelHistory).
| image | Image consultée. |
| region | Région à copier (doit être contenue dans les bornes de image). |
region est vide. | void hmi::reapplyEditorTheme | ( | ) |
Réapplique la palette et la feuille de style (mais pas la police, inchangée par le thème) depuis currentEditorTokens() — bascule à chaud (LOT-56 TACHE-06), sans reconstruire les widgets.
Les icônes et vignettes ne suivent pas automatiquement : leurs propriétaires (EditorActions::refreshIcons, caches de vignettes) doivent être resynchronisés séparément.
|
nodiscard |
Région d'atlas (couleur procédurale) associée à un type de tuile.
Unique correspondance type → région, utilisée par GameSession (rendu d'un niveau joué), hmi::DraftRenderer (canevas de l'éditeur) et la palette de l'éditeur (hmi::PalettePanel) : le canevas de l'éditeur est un aperçu fidèle de ce que le joueur verra en jouant le niveau (P), sans simplification qui pourrait induire en erreur pendant l'édition. Ne dépend que de la géométrie de grille de hmi::TextureAtlas (constantes et découpage statiques), jamais d'une texture chargée : la palette de l'éditeur peut donc l'appeler sans device Direct3D, ce qu'un widget Qt ne doit de toute façon jamais exiger.
| type | Type de tuile (Empty renvoie une région arbitraire, jamais dessinée en pratique — les cases vides ne sont pas rendues par l'appelant). |
|
nodiscardnoexcept |
Luminance relative WCAG d'une couleur (0 = noir, 1 = blanc), pour le calcul de contraste.
|
nodiscardconstexprnoexcept |
Bande de tri d'un calque : Object et Player en partagent une seule.
Sans cela, le rang de calque trancherait avant la profondeur et le personnage passerait toujours devant un objet, quelle que soit sa position — exactement ce que le tri par Y doit corriger. Tous les autres calques restent leur propre bande : un plan pictural ne se mélange jamais au décor, et les aides d'édition restent au-dessus de tout (EX-REN-014).
|
nodiscardconstexprnoexcept |
Nom lisible d'un calque, pour la journalisation et les messages d'échec de test.
| layer | Calque à nommer. |
|
nodiscardnoexcept |
Mode de rendu correspondant à un nom persisté.
Fonction pure (aucune dépendance Qt ni GPU), donc testable en isolation : une préférence absente, vide ou corrompue est un cas attendu, pas une erreur — elle retombe silencieusement sur hmi::DEFAULT_RENDER_MODE plutôt que de refuser de démarrer.
| name | Nom lu dans les préférences (comparaison insensible à la casse). |
name n'en désigne aucun.
|
nodiscardnoexcept |
Nom persisté d'un mode de rendu (valeur écrite dans les préférences).
| mode | Mode à nommer. |
|
nodiscard |
Rééchantillonne une image d'une densité à une autre, par ratio entier.
Jamais d'interpolation : 16 → 8 garde un pixel sur deux, 8 → 16 en duplique chacun. Un filtrage moyennerait des couleurs voisines et introduirait des teintes que l'artiste n'a pas posées — inacceptable en pixel art, et contraire à EX-ARCH-022.
Sert deux besoins : aplatir des plans de densités différentes sur un même repère (flattenPlanes) et changer la densité d'un plan depuis le panneau (TACHE-08), auquel cas la perte est réelle et assumée — descendre puis remonter ne restitue pas l'original.
| image | Image source. |
| fromPixelsPerUnit | Densité de image (> 0). |
| toPixelsPerUnit | Densité voulue (> 0). |
image si les deux densités sont égales, une image vide si l'une est invalide ou si leur rapport n'est pas entier dans un sens ou dans l'autre.
|
nodiscard |
Résout la texture de fond d'un niveau (accès TextureCache/GPU, LOT-44).
Point de résolution unique du repli en damier pour le fond (hmi::resolveOrPlaceholder, EX-NFR-040) : un asset absent ou invalide bascule sur le damier magenta, après l'avertissement déjà journalisé par le cache. Aucun accès cache n'a lieu si background est absent — même séparation résolution/composition que hmi::sceneTextures vis-à-vis de hmi::composeWorldSprites.
| background | Nom de l'asset de fond du niveau (core::Level::background), ou absent. |
| cache | Cache de textures, résout l'asset (et son repli en damier). |
|
nodiscard |
Résout un nom de clip demandé vers le plus proche déclaré dans un jeu partiel (LOT-48 TACHE-01/TACHE-02).
Une spritesheet externe — ou l'atlas procédural, qui n'en déclare que trois (hmi::proceduralPlayerClipNames) — peut ne pas fournir tous les clips que core::AnimationSystem projette (fall, land, wallslide, dash). Chaîne de repli fixe, documentée ici comme seule source de vérité : fall → jump, land → idle, wallslide → jump, dash → run, run → idle, jump → idle ; idle est le dernier recours (toujours supposé déclaré). Fonction pure, testable sans GPU.
| declaredNames | Noms de clips effectivement fournis par la source consultée. |
| requested | Nom de clip demandé (résolu par core::AnimationSystem). |
requested s'il est déclaré, sinon le premier nom de la chaîne de repli qui l'est ; "idle" en dernier recours.
|
nodiscard |
Nom de famille effectivement enregistré pour la police de corps de role, ou une chaîne vide si l'enregistrement a échoué (l'appelant emploie alors une famille générique).
Renseigné par applyFont() ; vide tant qu'elle n'a pas été appelée.
|
nodiscardnoexcept |
Résout le thème effectif à appliquer.
Fonction pure : System + système clair -> Light ; System + système sombre -> Dark ; Light/Dark forcé -> ignore le réglage système.
| setting | Réglage utilisateur courant. |
| systemPrefersDark | Le système d'exploitation préfère-t-il un thème sombre. |
|
nodiscard |
Choisit la famille de police à employer pour le corps de l'IHM.
| fontRegistered | true si le fichier de police embarquée a pu être enregistré auprès de QFontDatabase (les deux graisses, régulière et grasse). |
| embeddedFamilyName | Nom de famille rapporté par Qt pour la police embarquée (ex. "Inter"). |
fontRegistered vaut true ; sinon un résultat sans nom de famille, signalant à l'appelant de retomber sur une famille générique.
|
nodiscardnoexcept |
Résout le clic de l'outil « Lien » sur clickedCell selon l'attente courante.
Reproduit le geste de liaison de l'éditeur (clic déclencheur → attente de cible, clic cible → liaison créée ; refaire la même paire la supprime) : case ni déclencheur ni cible → ignorée ; pas d'attente valide → la case cliquée devient l'attente ; attente de même catégorie que le clic (deux déclencheurs ou deux cibles) → remplace l'attente ; catégories complémentaires → crée ou retire la liaison (bascule) selon alreadyLinked. Une attente dont le type a changé entretemps (case repeinte) n'est plus ni déclencheur ni cible : traitée comme aucune attente.
| pending | Case en attente d'appariement, si une a été posée par un clic précédent. |
| clickedCell | Case visée par le clic courant. |
| clickedTileType | Type de tuile à clickedCell au moment du clic. |
| alreadyLinked | true si la paire (déclencheur, cible) résolue est déjà liée dans le brouillon — non pertinent (ignoré) si les catégories ne se complètent pas encore. |
|
nodiscard |
Obtient la texture d'un asset, ou le repli en damier magenta à défaut.
Point de résolution unique du repli : tous les lots d'habillage (LOT-42, LOT-44, LOT-45, LOT-49) passent par ici plutôt que de réimplémenter chacun son propre comportement de secours — c'est la seule façon de garantir qu'un asset manquant se voie toujours de la même manière et soit toujours journalisé (EX-NFR-040, EX-REN-007).
| cache | Cache interrogé (et propriétaire du damier partagé). |
| fileName | Nom logique de l'asset attendu, repris dans l'avertissement journalisé. |
| family | Famille de l'asset, qui fixe les dimensions attendues. |
|
nodiscard |
Résout les images des plans d'un niveau (accès disque/GPU), dans l'ordre de la liste.
Repli en damier sur image absente ou illisible (EX-NFR-040) : un plan pointant un fichier disparu reste un niveau valide (Core ne vérifie pas l'existence, EX-NFR-011) — c'est ici que le manque devient visible plutôt que silencieux.
| cache | Cache de textures (propriétaire du damier partagé et de la mémoïsation). |
| directory | Dossier des images de plans (typiquement Levels/Plans). |
| planes | Plans du niveau, dans l'ordre déclaré. |
planes**.
|
nodiscardnoexcept |
Résout le clic de l'outil « Texture par instance » sur clickedCell.
Ne modifie rien par lui-même : décrit l'action, l'appelant l'applique au brouillon (même séparation que hmi::resolveLinkClick). Une case Empty est toujours ignorée — l'usage est purement visuel, mais une case vide n'a rien à habiller. Un clic droit retire l'override existant (sans effet si la case n'en a pas) ; un clic gauche sur l'asset déjà assigné retire aussi l'override (bascule, évite un clic droit pour le cas courant) ; un clic gauche sans asset sélectionné dans la bibliothèque est ignoré (rien à assigner).
| clickedCell | Case visée par le clic. |
| clickedTileType | Type de tuile à clickedCell au moment du clic. |
| existingOverride | Nom de l'asset déjà assigné à clickedCell, si elle en a un. |
| selectedAsset | Asset actuellement sélectionné dans la bibliothèque « Objets », si un l'est. |
| rightClick | true si le clic est un clic droit (retrait explicite). |
|
nodiscardnoexcept |
Résout l'apparence d'une entité affichée selon le mode de rendu courant.
Point d'appel unique de cette décision, partagé par le jeu et l'éditeur : c'est ce qui garantit que le canevas de l'éditeur montre exactement ce que le joueur verra. Fonction pure (aucune dépendance GPU), appelée à la composition et non à la construction de la scène : basculer de mode ne reconstruit donc jamais l'ECS, seule la résolution change.
Ordre de priorité en mode Texture : surcharge par instance, puis skin de tuile, puis damier (LOT-45 et LOT-42).
skinVisible et overrideVisible pilotent le mode d'inspection « définition des textures » de l'éditeur (hmi::LayerVisibility, LOT-51, EX-EDIT-044) : à true tous les deux (le défaut), le comportement ci-dessus est exactement celui de LOT-45, sans repli différent. Dès que l'un des deux vaut false, la résolution isole — plus de repli sur le damier pour l'axe masqué :
| mode | Mode de rendu courant. |
| physicalRegion | Région d'atlas de l'entité en mode Physique (core::Sprite::region). |
| tag | Type et voisinage de la tuile, ou nullptr pour une entité non habillable (personnage, aides d'édition) — qui reste alors au damier en mode Texture. |
| textures | Textures liables, catalogue et jeu de skins courant. |
| skinVisible | Axe « skin de type » visible (LOT-51) ; true par défaut (comportement LOT-45 inchangé pour tout appelant qui ignore cet axe). |
| overrideVisible | Axe « surcharge par instance » visible (LOT-51) ; true par défaut. |
|
nodiscardnoexcept |
Résout une transition d'écran à partir de l'état courant et d'un événement.
event est interdit depuis current.screen – l'appelant garde alors l'état courant inchangé, jamais de bascule silencieuse (EX-GP-041). | PixelRegion hmi::rotateClockwise | ( | DecodedImage & | image, |
| const PixelRegion & | region ) |
Pivote le contenu d'une région d'un quart de tour, sens horaire.
La région d'origine est effacée (alpha nul), puis le contenu pivoté (largeur/hauteur échangées) est écrit ancré au même coin haut-gauche — sur une région non carrée, le nouveau contour déborde donc du contour d'origine ; ce débordement est tronqué au cadre de l'image, jamais agrandi (setPixel ignore silencieusement tout pixel hors bornes).
| image | Image modifiée en place. |
| region | Région pivotée ; sans effet si vide. |
| PixelRegion hmi::rotateCounterClockwise | ( | DecodedImage & | image, |
| const PixelRegion & | region ) |
Pivote le contenu d'une région d'un quart de tour, sens antihoraire (trois quarts de tour horaires, pour ne pas dupliquer la logique de rotation).
Mêmes règles de troncature que rotateClockwise.
|
nodiscardnoexcept |
Arrondit une position monde au pixel écran le plus proche, pour un zoom pixel art net.
Un décalage de parallaxe fractionnaire produirait une image floue ou tremblante : le zoom de la caméra est entier quand c'est possible (EX-ARCH-022), mais un décalage de parallaxe quelconque, lui, ne l'est pas — cette fonction referme cet écart, après application de la parallaxe et de son bornage. Fonction pure, sans dépendance GPU.
| worldPosition | Position à arrondir, en unités monde. |
| pixelsPerWorldUnit | Échelle courante (hmi::Camera2D::PIXELS_PER_UNIT * zoom) ; worldPosition est renvoyée inchangée si cette valeur n'est pas strictement positive (robustesse). |
|
nodiscardnoexcept |
screen.
|
nodiscardnoexcept |
|
nodiscard |
Nom lisible d'un terme de règle — caractéristique, emplacement d'équipement, condition.
La chrome des écrans (« Points de vie », « Nouvelle partie ») s'écrit en français dans le fichier QML, et Qt la traduit par sa source. Ces libellés-ci ne le peuvent pas : leur clé est calculée (rpg.ability. + l'identifiant que le modèle rend), et qsTr exige une chaîne littérale — c'est ce qui permet à lupdate de l'extraire sans exécuter le programme.
Ce n'est pas qu'une contrainte technique. Ces termes sont un lexique : rpg.glossary.csv garantit une seule traduction par terme de règle dans tout le jeu, et scripts/check_glossary.py le vérifie. Les disperser en littéraux dans les écrans casserait précisément cette garantie.
| key | Clé du catalogue (« rpg.ability.strength »). |
| language | Langue demandée (« fr », « en »). |
|
nodiscard |
Réduit un nom libre à ce qu'un nom de fichier de plan accepte.
Mêmes caractères que les noms de niveau (hmi::isValidLevelName) : lettres, chiffres, tiret, tiret bas et espace, ce dernier ramené au tiret. Tout le reste est retiré plutôt que remplacé — un nom qui perd ses accents reste lisible, un nom truffé de tirets de substitution ne l'est plus.
| name | Nom libre. |
|
nodiscard |
Enregistre les messages de log de la session dans un fichier.
| entries | Messages accumulés. |
| path | Chemin du fichier de destination (les dossiers parents sont créés). |
|
nodiscard |
Textures liables par la composition d'une scène : atlas, damier de repli et skins.
Point d'assemblage unique, partagé par le jeu et l'éditeur (LOT-41) : le damier est résolu à la demande auprès du cache, donc créé seulement si un rendu en mode Texture a lieu. Les skins du jeu courant sont chargés par le même cache, qui ne relit le disque qu'au premier accès et mémorise aussi les échecs — appeler cette fonction à chaque image reste donc bon marché.
| atlas | Atlas du jeu. |
| cache | Cache de textures, propriétaire du damier partagé et des skins. |
| skins | Catalogue des jeux de skins, ou nullptr si aucun n'est chargé (LOT-42). |
| skinSet | Nom du jeu de skins courant ; vide pour le jeu par défaut du catalogue. |
| textureOverrides | Surcharges de texture par instance du niveau courant (EX-EDIT-043, LOT-45) ; chaque asset distinct est chargé une fois (hmi::SceneTextures:: objects), un asset déjà chargé ou introuvable étant silencieusement ignoré (la résolution retombe sur le damier, avertissement déjà journalisé par le cache). |
| tileAnimations | Horloge d'animation partagée par asset de tuile (LOT-46 TACHE-05, GameSession::updateTileAnimations, avancée au pas fixe) : un skin en mode SkinMode::Single, sans silhouette, dont l'asset est animé et présent dans cette table échantillonne l'image courante plutôt que l'image entière. |
|
nodiscardnoexcept |
Construit la projection écran → clip du calque UI, indépendante de Camera2D.
Le HUD ne doit ni tourner ni changer de taille avec le zoom de la caméra du monde (EX-ARCH-022) : cette projection ne dépend que des dimensions du viewport, en pixels écran (origine haut-gauche, Y vers le bas — même convention que le reste du rendu).
| viewportWidth | Largeur de la surface de rendu, en pixels. |
| viewportHeight | Hauteur de la surface de rendu, en pixels. |
|
nodiscardnoexcept |
Décalage courant d'une secousse d'écran, en pixels entiers (EX-ARCH-022).
Décroît linéairement de amplitudePixels à zéro sur duration, sur l'axe vertical uniquement – une discrétion volontaire (cf. epic.md) plutôt qu'une oscillation qui ajouterait un axe de plus à lire. Nul une fois la secousse terminée.
| state | Secousse dont on lit le décalage courant. |
|
nodiscardnoexcept |
Pixel image sous une position écran donnée.
| view | Vue courante (zoom, décalage). |
| imageWidth | Largeur de l'image, en pixels. |
| imageHeight | Hauteur de l'image, en pixels. |
| screenX | Position écran, en pixels logiques (ex. QMouseEvent::position().x()). |
| screenY | Position écran, en pixels logiques. |
|
nodiscard |
Assemble les messages de log en un texte (une ligne par message).
| entries | Messages accumulés (chacun déjà formaté par le journaliseur). |
| void hmi::setEditorThemeSetting | ( | EditorThemeSetting | setting | ) |
Persiste setting (QSettings), relu au démarrage suivant.
| PixelRegion hmi::setPixel | ( | DecodedImage & | image, |
| int | x, | ||
| int | y, | ||
| std::uint32_t | color ) |
Pose un pixel d'une couleur donnée.
| image | Image modifiée en place. |
| x | Colonne (0-based). |
| y | Ligne (0-based). |
| color | Couleur R8G8B8A8_UNORM posée. |
|
nodiscardnoexcept |
Mode de skin correspondant à un nom lu dans un fichier.
| name | Nom lu. |
name n'en désigne aucun — un mode inconnu est une donnée invalide à signaler, jamais un mode deviné.
|
nodiscardnoexcept |
Nom persisté d'un mode de skin (valeur écrite dans skins.json).
| mode | Mode à nommer. |
|
nodiscardnoexcept |
Calcule le masque de voisinage solide d'une case de la grille.
L'extérieur de la grille compte comme solide. Convention explicite et non implicite : un mur de bordure afficherait sinon un contour sur sa face invisible, hors du niveau, ce qui donne l'impression que le décor s'arrête en plein vide. Le revers — un niveau ouvert sur l'extérieur ne montre pas de bord franc à sa limite — est sans conséquence, la caméra ne dépassant pas les bornes du niveau.
Le voisinage est celui de la solidité, pas du type : Solid et les trois tailles de Block se raccordent entre eux (core::isSolid). Se raccorder au seul type identique laisserait une couture visible partout où un bloc jouxte un mur, alors que les deux forment visuellement la même matière. Les pentes et arrondis ne sont jamais solides : ils ne participent donc pas au voisinage et restent en mode single, avec leur masque de silhouette.
La grille passée doit être celle du niveau, jamais la grille de collision d'un core::MechanismController : une porte qui s'ouvre ne doit pas changer l'habillage des murs qui l'entourent.
Fonction pure, testable sans GPU (EX-NFR-010).
| tiles | Grille du niveau. |
| column | Colonne de la case examinée. |
| row | Ligne de la case examinée. |
|
nodiscardconstexprnoexcept |
Le calque appartient-il à la bande de profondeur ?
Dans une vue de dessus, « devant » et « derrière » ne se décident plus par un rang de calque fixe mais par la position : le personnage passe devant ce qui est au-dessus de lui à l'écran, derrière ce qui est en dessous. Les primitives d'une bande de profondeur s'ordonnent donc entre elles par leur sortOrder — le Y de leur pied (hmi::depthSortOrder) — avant tout regroupement de texture.
C'est le prix à payer, et il est assumé : regrouper par texture d'abord ferait passer tout le décor devant le personnage, ou tout derrière, selon l'ordre d'apparition des textures. Un personnage et un arbre n'ayant jamais la même texture, il n'existe aucun ordre de calque qui rende les deux cas justes — seule la profondeur le peut, au prix de passes de dessin supplémentaires (EX-REN-018).
|
nodiscard |
Associe un hmi::GameEvent à un identifiant de hmi::SoundCatalog.
Fonction pure, exhaustive (switch sans default : un événement ajouté sans entrée casse la compilation). Distincte de la détection (HMI/Game/GameEvents.h) : ce qui est arrivé et ce que ça produit sont deux questions séparées, pour que LOT-53 puisse brancher des particules sur la même détection sans la modifier.
| event | Événement survenu. |
| void hmi::splitPurse | ( | int | copper, |
| int & | gold, | ||
| int & | silver, | ||
| int & | rest ) |
Répartit une somme en pièces de cuivre entre or, argent et cuivre.
Le modèle ne connaît qu'une unité — le cuivre — parce qu'une seule unité interne supprime les conversions dispersées (LOT-32). La feuille, elle, a trois médaillons de monnaie gravés : la répartition est donc une règle d'affichage, et elle vit ici plutôt que dans le modèle.
| copper | Somme totale, en pièces de cuivre. |
| gold | Reçoit le nombre de pièces d'or. |
| silver | Reçoit le nombre de pièces d'argent. |
| rest | Reçoit ce qui demeure, en pièces de cuivre. |
|
nodiscardnoexcept |
Boîte englobante d'un rectangle texturé, en unités monde.
| quad | Primitive à borner. |
| void hmi::submitComposedScene | ( | SpriteBatch & | batch, |
| const DirectX::XMFLOAT4X4 & | projection, | ||
| const ComposedScene & | scene ) |
Soumet une scène composée au pipeline de dessin, une passe par groupe de texture.
Seul endroit du rendu qui reconvertit une hmi::TextureHandle en ressource Direct3D : c'est la frontière entre la composition (pure, testable sans GPU) et la soumission. Émet un SpriteBatch::begin/end par groupe contigu de même texture, dans l'ordre de la scène — donc dans l'ordre des calques, que ComposedScene::sort() a rendu prioritaire (EX-REN-043). Le contrat public de hmi::SpriteBatch est strictement inchangé.
| batch | Pipeline de quads texturés (non possédé). |
| projection | Matrice de projection monde → clip (fournie par la caméra). |
| scene | Scène déjà triée (ComposedScene::sort()). |
|
nodiscard |
Remplace chaque marqueur dollar-accolade de templateText par sa valeur dans values.
Fonction pure : mêmes entrées, même sortie, aucun effet de bord, aucune dépendance à un fichier ou une instance d'application.
| templateText | Texte du modèle, contenant zéro ou plusieurs marqueurs. |
| values | Table nom de marqueur -> valeur de substitution. |
values — jamais un résultat partiellement substitué.
|
nodiscard |
|
nodiscard |
Clé de traduction d'un libellé de la taxonomie.
hmi::tileTaxonomy reste une logique pure, sans dépendance i18n : elle porte des libellés français, qui servent aussi de clés de correspondance ici. Cette table est le point unique de la conversion, partagé par tous les panneaux qui affichent des types de tuiles — la palette (LOT-35) et le panneau « Textures » (LOT-42). Deux copies divergeraient au premier libellé ajouté, et un panneau afficherait alors du français au milieu d'une interface anglaise.
| label | Libellé issu de la taxonomie. |
| hmi::TEST | ( | MechanismTransitionsTest | , |
| AucunChangementNeReinitialisePasLimageEnCours | ) |
À état inchangé, un appel supplémentaire ne remet pas l'image courante à zéro : c'est l'invariant qui rend le calcul appelable à chaque frame de rendu sans figer l'animation.
Cas de test : À état inchangé, un appel supplémentaire ne réinitialise pas l'image en cours.
Categorie : Unitaire · Transitions de mécanismes
Criticite : Critique
Etapes :
1. Mettre en place le contexte du test (arrangement).
2. Executer le scenario et verifier les assertions.
| hmi::TEST | ( | MechanismTransitionsTest | , |
| ChangementDetatDeclencheLaTransitionUneSeuleFois | ) |
Un changement d'état déclenche la transition une seule fois : les pas suivants la font progresser jusqu'à l'état cible au lieu de la relancer depuis sa première image.
Un redéclenchement par pas figerait l'ouverture sur son premier quart, indéfiniment. Cas de test : Un changement d'état déclenche la transition une seule fois, puis la laisse aboutir.
Categorie : Unitaire · Transitions de mécanismes
Criticite : Critique
Etapes :
1. Mettre en place le contexte du test (arrangement).
2. Executer le scenario et verifier les assertions.
| hmi::TEST | ( | MechanismTransitionsTest | , |
| ClipDEtatAbsentReplieEtJournaliseUneSeuleFois | ) |
Un clip d'état manquant, lui, se replie et se journalise — mais une seule fois par couple (asset, clip manquant), pas par instance : un niveau posant cinquante portes du même asset incomplet produirait sinon cinquante fois le même message.
Cas de test : Un clip d'état absent se replie et n'est journalisé qu'une fois par asset.
Categorie : Unitaire · Transitions de mécanismes
Criticite : Majeur
Etapes :
1. Mettre en place le contexte du test (arrangement).
2. Executer le scenario et verifier les assertions.
| hmi::TEST | ( | MechanismTransitionsTest | , |
| ClipDeTransitionAbsentBasculeDirectementSansAvertissement | ) |
Un asset qui ne fournit que les deux états, sans clips de transition, bascule directement et en silence : n'animer que les états est un choix d'artiste légitime, pas une erreur à signaler.
Cas de test : Un clip de transition absent fait basculer directement, sans avertissement.
Categorie : Unitaire · Transitions de mécanismes
Criticite : Majeur
Etapes :
1. Mettre en place le contexte du test (arrangement).
2. Executer le scenario et verifier les assertions.
| hmi::TEST | ( | MechanismTransitionsTest | , |
| PremierCalculRejointEtatCibleSansTransition | ) |
Le tout premier calcul rejoint directement l'état cible, sans jouer de transition : une porte déjà ouverte au chargement du niveau doit apparaître ouverte, pas s'ouvrir sous les yeux du joueur comme si un interrupteur venait d'être actionné.
Cas de test : Le premier calcul rejoint l'état cible sans jouer de transition.
Categorie : Unitaire · Transitions de mécanismes
Criticite : Majeur
Etapes :
1. Mettre en place le contexte du test (arrangement).
2. Executer le scenario et verifier les assertions.
| hmi::TEST | ( | MechanismTransitionsTest | , |
| SeuleLaPorteTransitionneLesAutresBasculentDirectement | ) |
Seule la porte a des clips de transition ; un interrupteur bascule directement entre ses deux états, silencieusement.
Chercher une transition pour tous les mécanismes produirait des avertissements pour des assets pourtant complets. Cas de test : Un interrupteur bascule directement entre ses deux états, sans avertissement.
Categorie : Unitaire · Transitions de mécanismes
Criticite : Majeur
Etapes :
1. Mettre en place le contexte du test (arrangement).
2. Executer le scenario et verifier les assertions.
|
nodiscard |
Cherche la surcharge de texture assignée à une case précise (EX-EDIT-043, LOT-45).
Recherche linéaire : le nombre de surcharges d'un niveau reste modeste (donnée purement visuelle, posée à la main), et cette fonction n'est appelée qu'à la construction de la scène (une fois par tuile), jamais à chaque image — même principe que solidNeighborMask.
| overrides | Surcharges du niveau (core::Level::textureOverrides/core::LevelDraft::textureOverrides). |
| position | Position de la case cherchée. |
|
nodiscard |
Peint une icône à la taille demandée, recolorée depuis les jetons.
| id | Icône à peindre (hmi::iconGeometry). |
| pixelSize | Côté du carré, en pixels réels (déjà multiplié par le facteur d'échelle d'affichage par l'appelant, LOT-56 TACHE-05) : le tracé reste net à toute échelle. |
| tokens | Jetons de la portée courante (châssis d'édition) : résout les rôles de couleur de la géométrie, de sorte que l'icône suive le thème actif (TACHE-06). |
|
nodiscardnoexcept |
Taille en pixels réels pour une taille logique et un facteur d'échelle d'affichage donnés.
Ne produit jamais zéro, même pour un facteur non entier (125 %, 150 %) appliqué à la plus petite taille d'icône des jetons : un défaut d'arrondi produirait sinon une vignette invisible plutôt que simplement floue.
| logicalSize | Taille demandée, en pixels logiques (jetons de design, SizeTokens). |
| scaleFactor | Facteur d'échelle du support d'affichage (devicePixelRatio). |
|
nodiscard |
Taxonomie complète des types de tuiles peignables, en catégories/sous-groupes.
Logique pure (aucune dépendance Qt/GPU), testable (EX-NFR-010) : sert de source unique à la palette QTreeView de l'éditeur (EX-EDIT-018, EX-IHM-010). Chaque core::TileType y figure exactement une fois, dans un ordre déterministe (invariant vérifié par les tests). Reprend l'organisation de la palette historique (LOT-27).
|
nodiscard |
Conversion pure : couleur -> chaîne CSS hexadécimale "#rrggbb" (minuscules, sans alpha — les feuilles de style Qt n'acceptent l'alpha que via rgba()).
|
nodiscard |
Conversion pure : couleur -> chaîne CSS "rgba(r, g, b, a)", composantes entières 0-255 (les feuilles de style Qt expriment l'alpha sur la même échelle que les autres composantes).
|
nodiscard |
Traduit l'état d'entrée en core::PlayerInput, dissocié des touches/boutons physiques (EX-CTRL-010, EX-CTRL-012).
Le reste du moteur ne connaît que l'intention (moveX), pas les touches ni les boutons. Chaque action est déclenchée par deux sources indépendantes, chacune remappable séparément : la touche clavier liée dans gameKeyBindings (Options → Touches de jeu) ou le bouton manette lié dans gamepadBindings (Options → Touches de la manette) — l'une des deux suffit, aucune des deux n'est prioritaire sur l'autre.
Gauche et droite simultanées se neutralisent (moveX == 0). Fonction pure, testable avec un InputState injecté (EX-NFR-010) ; appelée une fois par frame en amont de la logique (EX-CTRL-020, EX-CTRL-021).
| input | État clavier/manette échantillonné de la frame. |
| gameKeyBindings | Association action de jeu -> touche clavier courante. |
| gamepadBindings | Association action de jeu -> bouton manette courant. |
|
noexcept |
Déclenche (ou relance) une secousse d'écran.
| state | État à réarmer. |
| amplitudePixels | Amplitude au déclenchement, en pixels écran (constante nommée côté appelant, ex. LANDING_SHAKE_AMPLITUDE_PIXELS). |
| duration | Durée totale, en secondes (ex. SCREEN_SHAKE_DURATION). |
|
nodiscard |
Retire les espaces de bord de name (le nom réellement utilisé une fois confirmé).
| name | Nom saisi. |
name sans ses espaces de début/fin.
|
nodiscardconstexprnoexcept |
Union de deux régions (la plus petite région couvrant les deux).
Une région vide n'affecte pas l'union : sert à accumuler la région touchée par un geste complet (hmi::PixelCanvas, TACHE-03) à partir des régions renvoyées par chacune de ses sous-opérations (ex. plusieurs drawLine successifs pendant un glisser).
|
nodiscard |
Compose un nom de fichier de plan unique pour un niveau donné.
Le nom dérive de celui du niveau, suffixé d'un numéro : foret.png, foret-2.png, … Le suffixe est incrémenté jusqu'à sortir de existing — jamais un identifiant aléatoire, pour qu'un dossier de plans reste lisible à l'œil et qu'un plan se retrouve sans ouvrir l'éditeur.
| levelName | Nom du niveau (sans extension), tel que saisi. |
| existing | Noms déjà pris dans le dossier des plans, extension comprise. |
levelName ne donne aucun nom utilisable (vide, ou fait uniquement de caractères refusés).
|
nodiscard |
Tailles proposées à la création d'un asset de la famille donnée.
Fonction pure (EX-NFR-010) : dérivée de hmi::assetDimensionContract, jamais une seconde description des mêmes règles — une création à une taille non conforme ne doit pas être possible du tout, plutôt que refusée après coup au chargement (hmi::validateAsset).
Chaque taille renvoyée passe hmi::validateAsset pour sa famille. Une famille à dimensions libres (fond, décor, police) renvoie une liste vide : il n'existe alors aucune progression de tailles pertinente, l'appelant doit permettre une saisie libre (strictement positive).
| family | Famille de l'asset à créer. |
|
nodiscard |
Valide les dimensions d'un asset décodé contre le contrat de sa famille (EX-REN-007).
Fonction pure : elle ne lit aucun fichier et ne touche pas au GPU — c'est ce qui la rend testable en isolation (EX-NFR-010), et ce qui impose de l'appeler entre le décodage et l'upload. Sans elle, un PNG aux mauvaises dimensions ne produit aucune erreur mais des artefacts de filtrage silencieux (échantillonnage nearest, sans mipmap, EX-ARCH-022).
| family | Famille de l'asset, qui fixe les dimensions attendues. |
| fileName | Nom logique du fichier, repris tel quel dans le message d'erreur. |
| width | Largeur décodée, en pixels. |
| height | Hauteur décodée, en pixels. |
|
nodiscard |
Valide la cohérence entre des métriques et les dimensions décodées du PNG associé.
Séparée de la lecture JSON : les dimensions réelles ne sont connues qu'après décodage du PNG, en aval (même frontière que hmi::AnimationCatalog::validateAgainstTexture).
| metrics | Métriques déjà lues. |
| fileName | Nom logique de l'asset, repris dans le message d'erreur. |
| textureWidth | Largeur décodée du PNG, en pixels. |
| textureHeight | Hauteur décodée du PNG, en pixels. |
|
nodiscardnoexcept |
Couleur d'effacement du viewport (GameViewport), dérivée des jetons plutôt que d'une valeur littérale locale : fond de la portée variable en édition (suivant le thème actif de l'éditeur, LOT-56 TACHE-06), fond de la portée invariante en jeu et en essai — la seule surface qui appartient tour à tour aux deux portées.
| editorMode | true en édition, false en jeu/essai. |
| activeEditorTokens | Jetons du châssis d'édition actuellement effectifs (thème clair ou sombre) ; ignorés si editorMode est faux. |
|
nodiscardconstexprnoexcept |
workspace.
|
nodiscardnoexcept |
tool — toujours PixelArt.
|
nodiscardnoexcept |
tool — toujours Level, les deux groupes d'outils étant disjoints par construction. Existe pour que MainWindow bascule d'espace en suivant une table plutôt qu'une condition écrite en dur.
|
nodiscardconstexprnoexcept |
mask contient workspace.
|
nodiscardnoexcept |
Espaces dans lesquels panel est affiché.
Un masque, pas une valeur unique (LOT-69 TACHE-08) : un panneau peut servir à plusieurs espaces à la fois — le canevas, l'historique et la palette appartiennent aussi bien à l'atelier pixel art qu'au mode création. Les dupliquer par espace coûterait deux canevas, deux historiques et deux états à tenir synchronisés.
GARDE DE COMPLÉTUDE : le masque d'un panneau n'est jamais vide. Un panneau sans espace resterait affiché partout, ce qui viderait la séparation de son sens — et ne se verrait qu'à l'écran, jamais en relecture.
| panel | Panneau interrogé. |
| void hmi::writeRegion | ( | DecodedImage & | image, |
| const PixelRegion & | region, | ||
| const std::vector< std::uint32_t > & | data ) |
Écrit des pixels dans une région — inverse de readRegion, utilisé par hmi::PixelHistory pour restaurer un instantané annulé/rétabli.
| image | Image modifiée en place. |
| region | Région ciblée (doit être contenue dans les bornes de image). |
| data | Pixels à écrire, taille attendue region.width() * region.height(). |
|
inlineconstexpr |
Nombre de configurations de voisinage distinctes.
|
inlineconstexpr |
Nombre de cases par côté de la planche de raccords (4×4 = seize configurations).
|
inlineconstexpr |
Nombre de bandes du voile.
Un dégradé serait plus doux, mais la charte du LOT-66 pose ses lavis en passes plates, à la manière des feuilles de Tanares : des paliers francs. La raison invoquée jusque-là — le pixel art ne s'accommode pas d'une transition continue — est tombée avec l'identité pixel art ; le choix, lui, reste celui de la charte.
|
inlineconstexpr |
Part de la largeur couverte par le voile de lisibilité, sous le titre et les entrées de menu.
|
inline |
Sous-dossier des fonds de niveau, relatif au dossier d'assets (LOT-44).
|
inlineconstexpr |
Amplitude de la secousse à la mort du personnage : légèrement plus marquée que l'atterrissage.
|
inlineconstexpr |
Calque appliqué à une entité dépourvue de hmi::RenderLayerTag.
|
inlineconstexpr |
Mode appliqué au premier lancement et à défaut de préférence exploitable.
Texture dans toutes les configurations de build (EX-REN-046) : deux binaires du même code ne doivent jamais afficher un rendu différent par défaut, sous peine de rendre ambiguë toute capture d'écran ou vérification visuelle.
|
inlineconstexpr |
Sous-divisions de profondeur par unité monde, pour la quantification du tri par Y.
Le rendu est du pixel art à 16 px/unité (EX-ARCH-021) : deux sprites dont les pieds sont distants de moins d'un pixel ne peuvent pas se départager à l'écran, et les départager dans le tri ne ferait que les faire scintiller au gré des arrondis flottants. Quantifier au pixel est donc à la fois suffisant et stabilisateur.
|
inlineconstexpr |
Fenêtre de la moyenne glissante de cadence, en secondes : assez courte pour rester réactive à une vraie dégradation, assez longue pour lisser le bruit d'une image à l'autre.
Une cadence instantanée (1 / dt sur une seule image) saute dans tous les sens et n'informerait sur rien (cf. epic.md, points d'attention).
|
constexpr |
Nombre total d'actions du catalogue (six outils de niveau, cinq outils de canevas pixel art, onze commandes principales, quatre commandes de fichier de l'atelier, quatre commandes de région de l'atelier).
|
constexpr |
Nombre d'actions d'éditeur remappables (EditorAction).
|
inlineconstexpr |
Nombre d'outils d'édition, déclaré au plus près de l'énumération qu'il compte.
Sert de garde de complétude : le catalogue d'actions doit exposer exactement autant d'outils de niveau (hmi::editorActionCatalog), ce qu'un test vérifie — sans quoi un outil ajouté à l'énumération peut apparaître dans la barre d'outils sans jamais être relié au viewport.
|
inlineconstexpr |
Nombre d'espaces, déclaré au plus près de l'énumération qu'il compte.
|
inlineconstexpr |
Distance d'anticipation dans le sens du déplacement, en unités monde.
|
inlineconstexpr |
Temps de réponse de l'inversion de l'anticipation au changement de sens, en secondes – plus lent que le lissage principal, pour que l'inversion se voie comme un mouvement, pas un saut.
|
inlineconstexpr |
|
inlineconstexpr |
Demi-taille de la zone morte, en unités monde : le personnage se déplace librement dans ce carré centré sur le point suivi sans faire bouger la caméra – ce qui supprime le tremblement permanent d'une caméra qui collerait exactement au personnage.
Deux constantes scalaires plutôt qu'un core::Vector2 : son constructeur n'est pas constexpr.
Carrée depuis le LOT-07 (1,5 sur les deux axes, contre 1,5 × 1,0 auparavant) : un jeu de plateforme court latéralement et saute brièvement, ce qui justifiait une zone plus large que haute ; en vue de dessus, marcher vers le haut est un déplacement comme un autre (EX-EXP-001), et une zone morte plus courte verticalement ferait décrocher la caméra plus tôt dans cette direction — un biais visible sans qu'aucune règle ne le justifie.
|
inlineconstexpr |
Temps de réponse (lissage exponentiel) du centre retenu vers sa cible, en secondes.
|
inlineconstexpr |
Version du format de métriques écrite dans le fichier, et plus élevée qui soit lue (hmi::loadFontMetricsFromString).
|
inline |
Sous-dossier des assets de police, relatif au dossier d'assets (LOT-52).
|
constexpr |
Nombre d'actions de jeu remappables (GameAction).
|
inlineconstexpr |
Nombre de valeurs de GameEvent — pour les tests d'exhaustivité (parcours de l'énumération).
|
constexpr |
Nombre de boutons manette remappables (GamepadButton).
|
inlineconstexpr |
Délai minimal entre deux sondages XInput d'un slot resté déconnecté (anti-saccade).
|
inlineconstexpr |
Hauteur, en pixels logiques, de la maquette à l'échelle 1.
Les écrans sont dessinés pour cette hauteur ; tout le reste en est un multiple entier.
|
inlineconstexpr |
Plus grand facteur admis.
Au-delà, les écrans cessent de gagner en lisibilité et commencent à perdre en contenu visible : trois entrées de menu par écran ne rendent service à personne.
|
constexpr |
Nombre d'actions d'éditeur remappables ayant une commande effective (EDITOR_ACTION_COUNT moins TextureAssignTool).
|
inlineconstexpr |
Amplitude conservatrice de la secousse d'écran à un atterrissage lourd (LOT-53 TACHE-03) : discrète, un jeu de plateforme précis devient injouable si l'écran bouge trop.
|
inlineconstexpr |
Les familles de mécanismes à état dont l'apparence est pilotée par un clip (LOT-47), dans l'ordre où elles sont proposées par la section « Animations ».
|
inlineconstexpr |
Noms de clip conventionnels, documentés dans Source/Elements/Assets/README.md — c'est le contrat qu'un auteur d'asset doit respecter pour que son animation soit reconnue.
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
|
inlineconstexpr |
Côté, en pixels, d'un carreau du damier : quatre carreaux par côté, motif lisible même réduit.
|
inlineconstexpr |
Côté, en pixels, du damier de repli généré par défaut (une case, EX-ARCH-021).
|
inline |
Sous-dossier des textures d'objets interactifs, relatif au dossier d'assets (LOT-45).
|
inlineconstexpr |
Nombre de panneaux, declare au plus pres de l'enumeration qu'il compte.
Sert de garde de completude a la repartition par espace de travail (hmi::workspacesForPanel, LOT-68) : un panneau ajoute sans espace resterait affiche dans les deux, ce qu'un test interdit.
|
constexpr |
Nombre d'entrées de la table (tous les outils n'ont pas de panneau dédié).
|
inlineconstexpr |
Facteur neutre : le contenu est solidaire du niveau et ne subit aucun décalage.
|
inlineconstexpr |
Côté du carré teinté d'une particule, en unités monde (LOT-53 TACHE-03 : « un simple carré teinté suffit pour un premier jet », pas d'asset dédié).
|
inlineconstexpr |
Facteur de zoom à partir duquel la grille de pixels est dessinée : en-deçà, elle ne ferait que du bruit visuel sur des pixels trop petits pour la distinguer du contenu.
|
inlineconstexpr |
Dénominateur de zoom maximal : au-delà, un pixel image occuperait moins d'un huitième de pixel écran, et le repère cesserait d'être lisible.
|
inlineconstexpr |
|
inlineconstexpr |
Zoom minimal (1 pixel image = 1 pixel écran) et maximal admis par les commandes de zoom du canevas — toujours entier, pour que les pixels restent carrés (EX-ARCH-022).
|
constexpr |
Nombre d'entrées de la table des outils de canevas (les cinq outils du canevas mettent tous en avant le même panneau : on édite toujours en le voyant).
|
inline |
Extension des fichiers de plan. Un plan est une image, toujours écrite en PNG.
|
inlineconstexpr |
Octets par texel d'une texture de plan : R8G8B8A8_UNORM, comme toute texture du projet.
|
inline |
Sous-dossier des images de plans, relatif au dossier des niveaux — un plan est une donnée de niveau, pas un asset réutilisable : il ne vit pas sous Assets/.
|
constexpr |
Nombre d'images du clip Idle.
Seule source de vérité (LOT-18, migré côté HMI par LOT-46 puisque seul l'atlas procédural en a encore besoin pour son placement fixe).
|
constexpr |
Nombre d'images du clip Jump (pose unique, jamais animée).
|
constexpr |
Nombre d'images du clip Run.
|
inline |
Nom logique de la spritesheet du personnage (LOT-48).
|
inline |
Sous-dossier de la spritesheet du personnage, relatif au dossier d'assets (LOT-48).
|
inlineconstexpr |
Nombre de valeurs de hmi::RenderLayer — dimensionne un tableau indexé par la valeur plutôt que par une liste de champs écrite à la main (voir hmi::LayerVisibility).
|
inlineconstexpr |
Nombre d'écrans du catalogue.
|
inlineconstexpr |
Durée de toute secousse d'écran, en secondes – brève par construction.
|
inlineconstexpr |
Décalage de l'ombre par rapport à sa tuile, en unités monde (1 pixel à 16 px/unité).
|
inlineconstexpr |
|
inlineconstexpr |
Opacité de l'ombre (constante, cf. décisions de cadrage du LOT-55 : pas de réglage designer).
|
inlineconstexpr |
Nombre de types de tuile à silhouette (voir SILHOUETTE_TILE_TYPES).
|
inlineconstexpr |
Types de tuile dont la matière n'occupe pas toute la case, et qui doivent donc être détourées à l'affichage plutôt que dessinées en carré plein.
|
inline |
Sous-dossier des skins de tuiles, relatif au dossier d'assets (LOT-42).
|
constexpr |
Nombre d'actions hors sélection d'outil admises dans une barre d'outils (LOT-68).
Sert de plafond vérifié par test : c'est le nombre au-delà duquel la barre redevient le fourre-tout que ce lot supprime, et un plafond qu'on relève sans y penser ne protège de rien.