4.5 KiB
4.5 KiB
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 :
LPDirectControlSubsystemaffiche déjà une superposition Slate parGEngine->GameViewport->AddViewportWidgetContent(Root, 50)(Source/LifePlay/LPDirectControlSubsystem.cpp:1049-1072).LPOutdoorRoomSubsystemlit 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.het.cppdansSource/LifePlay). Un ticker toutes les 0,1 s lit la cible de vue du PC, en déduit le mode et met à jour un petitSTextBlock. - 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 deMenuClassesest ouvert (même test queLPDirectControlSubsystem::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-buildet modèleLPDirectControlSubsystem) + f 1 = 2 < 3 : pas de scission.