64 lines
4.5 KiB
Markdown
64 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.
|