LifePlay-Revival/Docs/Migration/etat/CAM/CAM-B2p-R-FICHE.md

112 lines
7 KiB
Markdown
Raw Normal View History

# CAM-B2p-R : vue de scène = SceneCamera pendant le sexe (P1) et flèches = couple sans Maj (P2) (Room, fiche lp-mcp-bp, 2026-10-14)
SPEC : `CAM-B2p-SPEC.md`, P1 et P2. GO de l'utilisateur sur B2p (« go », 2026-10-14) ; **option A : on revient sur Q8
pendant le sexe**. Room seul. **Aucune écriture sans UE-GO de Big Boss.** Va avec B2p-C (C++, `CAM-B2p-C-IMPL.md`).
## Barème
a0 b1 c1 d0 e1 f1 = 4 → N1, ajusté à N3 (MCP) ; S = C3 1 + f 1 = 2, moins de 3 : une fiche. 3 nœuds, 13 liens,
environ 40 appels. Case C9a : état relu le jour même dans `CAM-B2s-VAL_LPDumpFunction_20261014-084441.txt` (Room
`C5AB724101FA898457293D64059D21A9`, EventGraph 1276 nœuds).
## Conditions d'entrée
- UE-GO ; `UeState` = 0 ; aucun jeu en cours ; MD5 de Room = `C5AB724101FA898457293D64059D21A9` (sinon : relecture
et compte rendu).
- Instantané au moment de l'UE-GO : `.\Tools\Snapshot.ps1 -Lot CAM-B2p-R -Path Content\BPs\Room.uasset`.
- unreal-mcp connecté dans la session. S'il ne l'est pas, l'utilisateur fait `/mcp` → Reconnect.
- Si l'éditeur demande de recompiler des modules : arrêt et compte rendu.
## État attendu avant écriture (préfixe `/Game/BPs/Room.Room:EventGraph.`)
| Nœud | Attendu |
|---|---|
| `K2Node_CustomEvent_43` (`ApplyRoomCamera`) | then → `IfThenElse_77.execute` |
| `K2Node_IfThenElse_77` | execute ← 43.then ; Condition ← `VariableGet_269.CamC1On` ; then → 78 ; else → 79 |
| `K2Node_CustomEvent_45` (`UpdateRoomCam`) | OutputDelegate → `329.Delegate` ; then → `IfThenElse_91.execute` |
| `K2Node_IfThenElse_91` | execute ← 45.then ; Condition ← `PromotableOperator_8` ; then → 92 ; else → 81 |
| `K2Node_VariableGet_258` | `SexOn`, self ← `VariableGet_257.GI` ; sorties 78 et 81 `.Condition` |
| `K2Node_CallFunction_394` | `SetViewTargetWithBlend` ; execute ← `79.then` ; then → 303 ; NewViewTarget ← `GetArrayItem_9` |
| `K2Node_CallFunction_303` | `RestoreC1` ; execute ← 394.then ; **then vide** |
| `K2Node_CallFunction_441` | `K2_ClearAndInvalidateTimerHandle` ; execute ← `440.then` ; Handle ← `VariableGet_274.RoomCamTimer` |
| `K2Node_IfThenElse_14` | Condition ← `VariableGet_62.MoveObject` ; then → 27 ; else → 281 |
| `K2Node_IfThenElse_17` | Condition ← `VariableGet_62.MoveObject` ; then → 23 ; else → 45 |
| `K2Node_VariableGet_62` | `MoveObject` ; sorties 12, 14, 17 `.Condition` |
| `K2Node_VariableGet_85` | `SexOn`, self ← `VariableGet_40.GI` ; sorties `OR_17.B`, 24, 27, 23 |
Tout écart : arrêt avant écriture.
## Écritures (un appel MCP par message)
1. `load_asset` `/Game/BPs/Room` ; `get_node_infos` sur les 12 nœuds du tableau. Relever les PinID et les positions.
2. Types :
- Branche : `Utilitaires|ContrôleDeFlux|Branche` ;
- OU : `Math|Booléen|ORBoolean`.
Contrôle par `get_node_infos` après création.
3. **P1** (vue de scène pendant le sexe) :
- créer la Branche S1, près de 43 ;
- L1 : `43.then` → `S1.execute` (remplace 43.then → 77) ;
- L2 : `258.SexOn` → `S1.Condition` ;
- L3 : `S1.then` → `394.execute` (394 garde aussi 79.then) ;
- L4 : `S1.else` → `77.execute` ;
- créer la Branche S2, près de 45 ;
- L5 : `45.then` → `S2.execute` (remplace 45.then → 91) ;
- L6 : `258.SexOn` → `S2.Condition` ;
- L7 : `S2.then` → `394.execute` ;
- L8 : `S2.else` → `91.execute` ;
- L9 : `303.then` → `441.execute` (441 garde 440.then) : la minuterie s'arrête après la pose de la vue de scène.
4. **P2** (flèches = couple sans Maj pendant le sexe) :
- créer l'OU O1, près de 14 ;
- L10 : `62.MoveObject` → `O1.A` ;
- L11 : `85.SexOn` → `O1.B` ;
- L12 : `O1.ReturnValue` → `14.Condition` (remplace 62 → 14) ;
- L13 : `O1.ReturnValue` → `17.Condition` (remplace 62 → 17) ;
- 62 garde sa sortie vers 12 : la molette avec Maj reste inchangée.
5. Relecture :
- 43.then → S1 ; 45.then → S2 ; 45.OutputDelegate → 329 inchangé ;
- 394.execute ← 79.then, S1.then, S2.then ;
- 77.execute ← S1.else ; 91.execute ← S2.else ;
- 258 : sorties 78, 81, S1, S2 ;
- 303.then → 441 ; 441.execute ← 440.then et 303.then ;
- 62 : sorties 12, O1.A ; 85 : sorties OR_17.B, 24, 27, 23, O1.B ;
- 14 et 17 : Condition ← O1 ;
- aucun autre lien de 78, 79, 80, 81, 92, 329, 440, 539 à 542 modifié.
6. `is_dirty` = vrai ; `compile_blueprint` avec warnings_as_errors = true ; `save_assets` [`/Game/BPs/Room`] seul ;
`Saving Package: /Game/BPs/Room` ; MD5 ≠ `C5AB7241…` ; GI, PC et Person inchangés.
## Effets attendus
- Pendant le sexe :
- à l'entrée (la minuterie tourne en C1 et en C2) et à chaque retour en Scene (PC 353 → 140), la vue est
`SceneCamera`, et la minuterie s'arrête ;
- la souris (B2n), ZQSD (B2p-C) et la molette (zoom d'origine, nœud 125) agissent sur la caméra en vue ;
- les flèches déplacent le couple sans Maj.
- Hors sexe : rien ne change (S1.else et S2.else reprennent les voies actuelles ; O1 vaut `MoveObject`). Le mode
C3 passe déjà par 394, qui mène maintenant aussi à 441 : il arrête la minuterie tout de suite au lieu du passage
suivant (82.else → 440 → 441). Le résultat est le même.
- Fin du sexe : le crochet B1-11 (GI 2699 → `ApplyRoomCamera`), avec `SexOn` faux, rend C1, C2 ou C3 et relance la
minuterie. `SexOn` est déjà faux à ce moment-là : à 05:18:57, au journal COMMUN-6, ce crochet a rendu la voie C1
(`78.else`), ce qui n'est possible qu'avec `SexOn` faux. On le revérifie en V7. Repli si le cas change : un appel
`ApplyRoomCamera` différé côté C++ quand `SexOn` redevient faux. Ce repli n'est pas écrit.
## Exigence confirmée à COMMUN-7 (utilisateur, relayé par Big Boss)
« je veux que ZQSD en mode scène déplace la caméra aussi », quel que soit le mode de départ (C1, C2 ou C3).
- COMMUN-7 : L1 et L2 OK (B2r) ; L5 OK (ZQSD en POV, B2p-C).
- ZQSD en mode Scene (B2p-C) n'agit que si la vue est `Room.SceneCamera`. **P1 (S1 et S2) l'assure dans les trois
cas** :
- à l'entrée en sexe, la minuterie de C1 ou de C2 passe par S2 → 394 (`SceneCamera`), puis s'arrête ;
- au départ en C3, la vue est déjà `SceneCamera` ;
- à chaque retour en Scene, le PC (353 → 140) passe par S1 → 394.
- Aucune partie C++ de plus. V7 : CAM-42 depuis C1, C2 et C3, dès l'entrée et après POV → Scene.
## Garde `Accessed None`
`ChargenCameras[0]` (394) et `SexOn` (258) sont déjà lus sans garde sur ces voies. Rien de nouveau n'est lu.
## VAL (lp-validator distinct, éditeur fermé)
- V5 : dump Room ; diff contre `CAM-B2s-VAL_LPDumpFunction_20261014-084441.txt` ; EventGraph 1276 → 1279 nœuds ;
seules différences : S1, S2, O1 et les liens ci-dessus.
- V6 : `CompileAllBlueprints` = référence.
- V7 : CAM-41 à CAM-49 et CAM-54, CAM-55 de `CAM-B2p-SPEC.md`, avec B2p-C compilé.
## Retour arrière
`.\Tools\Restore.ps1 -Lot CAM-B2p-R -Only Content\BPs\Room.uasset`, éditeur fermé, sur accord.
## Estimation
Environ 40 min d'éditeur et 15 min de VAL. À passer dans le même jeton que la compilation de B2r et de B2p-C.