LifePlay-Revival/Docs/Migration/etat/CAM/CAM-B2k-FICHE.md

62 lines
4.4 KiB
Markdown
Raw Normal View History

# CAM-B2k : recalage de la caméra C1 sur les yeux à chaque passage de la minuterie (fiche lp-mcp-bp, 2026-10-14)
Origine : `CAM-COMMUN5-DIAG.md` § 1 (C5-3, caméra C1 dans le buste après une entrée en C1 assise). Room seul, hors
sexe (la branche C1 de la minuterie est derrière `IfThenElse_81` = `SexOn` faux). Décision de l'utilisateur relayée
par Big Boss : entre dans COMMUN-6.
## Barème
a0 b1 c0 d0 e1 f1 = 3 → N1, ajusté à N3 (écriture MCP par `lp-mcp-bp`) ; S = C3 1 (procédure `lp-mcp`, gabarits B2h
et B2i) + f 1 = 2 < 3 : une fiche. 1 nœud, 3 liens, environ 15 appels. Case C9a : état de Room relu le jour même.
## Conditions d'entrée
- UE-GO de Big Boss ; `UeState` = 0 ; aucun jeu en cours.
- Room = `18565365B1195BF2416A1048BF9051B6`. GI et Person : à ne pas toucher.
- Instantané au moment de l'UE-GO : `.\Tools\Snapshot.ps1 -Lot CAM-B2k -Path Content\BPs\Room.uasset` (PowerShell,
depuis la racine).
- Si l'éditeur demande de recompiler des modules au lancement : arrêt et compte rendu à Big Boss.
## État attendu avant écriture (préfixe `/Game/BPs/Room.Room:EventGraph.`, dump `CAM-B2i-VAL_LPDumpFunction_20261013-225125.txt`)
| Nœud | Attendu |
|---|---|
| `K2Node_IfThenElse_83` | execute ← `IfThenElse_82.then` ; Condition ← `PromotableOperator_0` (vue = `PlayerCharacter`) ; **then vide** ; else → `CallFunction_440` (`RestoreC1`) |
| `K2Node_IfThenElse_82` | Condition ← `VariableGet_269.CamC1On` ; execute ← `IfThenElse_81.else` (81 = `SexOn`, execute ← `IfThenElse_91.else`, 91 = vue = `CamRoom`) |
| `K2Node_VariableGet_265` | variable `FirstPersonSM`, self ← `VariableGet_261.PlayerCharacter` ; sortie → 430, 431, 433, 446 `.self` |
| `K2Node_PromotableOperator_2` | `Multiply_VectorVector`, A ← `PromotableOperator_1` (= `GetSocketLocation(lEye)` + `GetSocketLocation(rEye)`, nœuds 447 et 448), B = 0,5 ; sortie → `CallFunction_446.NewLocation` |
| Minuterie en C1 (relecture de l'étape 1) | voie C1 d'`ApplyRoomCamera` : `VariableSet_53` (`C1Hidden`) → `CallFunction_449` (`DelayUntilNextFrame`) → `434` (`SetViewTargetWithBlend(PlayerCharacter)`) → **`329` `K2_SetTimerDelegate(UpdateRoomCam, 0,016, en boucle)`** → `VariableSet_54` (`RoomCamTimer`) |
Tout écart à ce tableau : arrêt avant écriture.
## Écritures (un appel MCP par message)
1. `load_asset` `/Game/BPs/Room` ; lecture groupée des nœuds du tableau (`get_node_infos`), avec `CallFunction_329`,
`_434`, `_449` et `_446`. Relever les PinID et les positions de 83 et 446.
2. Type : le même que `K2Node_CallFunction_446` (`SceneComponent::K2_SetWorldLocation`). Prendre son `type_id` par
`get_node_infos` et `find_node_types` (filtre « SetWorldLocation »), avec `context_pins` sur `265.FirstPersonSM` si
besoin. Le nœud créé doit être `K2_SetWorldLocation` (`SceneComponent`), avec `bSweep` et `bTeleport` faux par
défaut. Sinon, arrêt.
3. `create_node` près de 83 (à droite de sa branche `then`).
4. Liens :
- L1 : `IfThenElse_83.then` → nouveau.execute ;
- L2 : `VariableGet_265.FirstPersonSM` → nouveau.self ;
- L3 : `PromotableOperator_2.ReturnValue` → nouveau.NewLocation. La sortie de PO_2 alimente alors 446 et le
nouveau nœud ; ce nœud pur est réévalué à chaque appel.
5. Relecture :
- 83 : then → nouveau, else → 440 inchangé ;
- 265 : sorties 430, 431, 433, 446 et le nouveau ;
- PO_2 : sorties 446 et le nouveau ;
- 446 inchangé (execute ← 431.then, then → 433) ;
- le nouveau nœud a un `then` libre ;
- aucun autre lien de 81, 82, 91, 440 ou 441 modifié.
6. `AssetTools.is_dirty` `/Game/BPs/Room` = vrai (sinon procédure B2f-a).
7. `compile_blueprint` avec warnings_as_errors = true.
8. `save_assets` [`/Game/BPs/Room`] seul ; `Saving Package: /Game/BPs/Room` au journal de l'éditeur.
9. `md5sum` : Room ≠ `18565365…` ; GI et Person inchangés.
## VAL (lp-validator distinct, éditeur fermé)
- V5 : dump Room ; diff du corps contre `CAM-B2i-VAL_LPDumpFunction_20261013-225125.txt`. Attendu : EventGraph à 1265
nœuds ; seules différences : le nœud nouveau et les sorties de 83.then, 265 et PO_2.
- V6 : `CompileAllBlueprints` = référence.
- V7 (COMMUN-6) : s'asseoir, passer en C1, se lever (ZQSD), marcher, se rasseoir, changer de pièce. La vue reste à la
hauteur des yeux, jamais dans le buste ni au-dessus de la tête. En C2 et pendant le sexe, rien ne change.
## Retour arrière
`.\Tools\Restore.ps1 -Lot CAM-B2k -Only Content\BPs\Room.uasset`, éditeur fermé, sur accord.