LifePlay-Revival/Docs/Migration/etat/CAM/CAM-B2c-SPEC.md
edujiro5972 8084622450 LifePlay UE 5.8 : état de développement au 2026-10-19
Tickets : REP1-T4

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 22:57:42 +02:00

63 lines
4.5 KiB
Markdown

# CAM-B2c : indicateur du mode de caméra (SPEC courte, 2026-10-13)
Demande de l'utilisateur, relayée par Big Boss : « Afficher aussi dans quel mode de caméra on est ». Écriture
après B2b, sur GO de Big Boss. Lecture seule pour cette SPEC.
## 1. Choix technique : un sous-système C++ qui observe la vue, sans toucher aux Blueprints
- **Modèle existant** : `LPDirectControlSubsystem` affiche déjà une superposition Slate par
`GEngine->GameViewport->AddViewportWidgetContent(Root, 50)` (`Source/LifePlay/LPDirectControlSubsystem.cpp:1049-1072`).
`LPOutdoorRoomSubsystem` lit les variables de GI et de Room par réflexion (`FindPropertyByName`) depuis un ticker
(`LPOutdoorRoomSubsystem.cpp:13-26, 32-47`).
- **Proposition** : un nouveau `ULPCameraModeSubsystem` (GameInstanceSubsystem, nouveaux fichiers `.h` et `.cpp` dans
`Source/LifePlay`). Un ticker toutes les 0,1 s lit la cible de vue du PC, en déduit le mode et met à jour un petit
`STextBlock`.
- **Pourquoi pas en Blueprint** : il faudrait écrire le libellé à chaque voie de commutation (C, `RestoreC1`, contacts,
sexe, changement de pièce, constructeur, CharGen), soit environ 10 points d'insertion dans Room, PC et GI, plus un
widget UMG à modifier par MCP. L'observation de la vue couvre toutes ces voies d'un coup, y compris celles ajoutées
plus tard (B3, B4), sans aucun nœud.
- **Conséquences** : Room, PC, GI et Person ne sont pas touchés, donc pas de MCP ni d'instantané d'asset. Il faut une
compilation C++ (environ 1 min) et un build.
## 2. Règle de classement (évaluée dans cet ordre, toutes les 0,1 s)
| Condition (lecture par réflexion) | Libellé (proposé, en anglais comme l'interface du jeu) |
|---|---|
| vue = `GI.Birdview` (classe contenant `Birdview`) | `Camera: Overview` |
| `GI.SexOn` vrai et `PC.POVOn` vrai (variable du PC, corrigé en B2f) | `Camera: POV` |
| `GI.SexOn` vrai | `Camera: Scene` |
| vue = `GI.PlayerCharacter` et `Room.CamC1On` vrai | `Camera: C1 First person` |
| vue = `Room.CamRoom` et `Room.CamC3On` vrai | `Camera: C3 Ceiling` (à partir de B3) |
| vue = `Room.CamRoom` | `Camera: C2 Follow` |
| `Room.CamC3On` vrai (vue = ancienne caméra de pièce, C3 provisoire jusqu'à B3) | `Camera: C3 Room (old)` |
| vue ∈ `GI.ChargenCameras` | `Camera: Studio` |
| vue = `Room.SceneCamera` (constructeur) | `Camera: Builder` |
| sinon | rien affiché |
Libellés en français possibles si l'utilisateur le préfère (« Caméra : C1 1re personne », etc.).
Variables relues dans les dumps : GI `Birdview`, `ChargenCameras`, `PlayerCharacter`, `PC`, `Room`, `SexOn`,
`SpaceOn` (`ST/STE/dumps/GI__EventGraph_V5.txt`) ; PC `POVOn` (dump PC de B1, `SwitchCamera`) ; Room `CamC1On`, `CamC3On`, `CamRoom`, `SceneCamera`
(`CAM-B2b-VAL_LPDumpFunction_20261013-161237.txt`). Une propriété absente ou une référence nulle donne « rien
affiché », sans `Accessed None` (lecture C++).
## 3. Affichage
- Texte de petite taille, blanc à 70 % d'opacité, avec une ombre.
- Placement : en bas à gauche, marge de 16 px. Le haut gauche porte déjà les menus et le haut droit l'heure (capture
des essais de B2).
- Non cliquable : `EVisibility::HitTestInvisible`. Masqué quand un menu de `MenuClasses` est ouvert (même test que
`LPDirectControlSubsystem::MenuOnScreen`, à réutiliser par une fonction partagée ou par copie).
- Mis à jour seulement quand le libellé change, sans redessiner à chaque tick.
## 4. Coût et place dans la file
| Étape | Agent | Durée estimée |
|---|---|---|
| IMPL : 2 fichiers, ≈ 150 lignes, enregistrement automatique (GameInstanceSubsystem) | `lp-impl` (N3) | ≈ 30 min |
| BUILD : compilation Development, 1 module | `lp-builder` | ≈ 2 min de compilation, puis le paquet du build suivant |
| VAL statique : diff, fins de ligne, journal de compilation | `lp-validator` | ≈ 10 min |
| Essai : C → C1 / C2 / C3, contacts, sexe et POV, sortie de pièce, constructeur | utilisateur | dans la même session d'essais |
- **Build commun COMMUN-1** : B2c ne touche **pas** Room, mais il ajoute du C++. Il n'y entre que si l'IMPL et la VAL
sont finies avant le lancement du build par STG. Sinon, il passe au build suivant. À Big Boss de trancher.
- Commit : 2 fichiers `Source/LifePlay/LPCameraModeSubsystem.*` et les livrables, par ticket au gardien, avec une
entrée CHG.
## 5. Grille
- a1 b1 c1 d1 e1 f1 = 6 → N2, ajusté à N3 (C++ nouveau dans le module de jeu).
- S = C3 1 (procédure `lp-build` et modèle `LPDirectControlSubsystem`) + f 1 = 2 < 3 : pas de scission.