LifePlay-Revival/Docs/Migration/etat/CAM/CAM-B2p-G-IMPL.md

85 lines
5.5 KiB
Markdown
Raw Normal View History

# CAM-B2p-G-IMPL (partie C++) : recadrage, suivi du couple, C3 côté C++, témoin G3 (2026-10-14)
GO : Big Boss, 2026-10-14 (« GO pour B2p-G, option 1 » ; C++ tout de suite, sans jeton ; PC par MCP après l'UE-GO).
SPEC : `CAM-B2p-G-SPEC.md`. Écriture sans compilation (l'essai COMMUN-11 est en cours).
Instantané : `D:\Game\LifePlay_Backup_5.5\CAM-B2p-G\` (`.cpp` `03D85D28…`, `.h` `4AE65994…`).
| Fichier | Avant | Après |
|---|---|---|
| `Source/LifePlay/LPCameraModeSubsystem.cpp` | `03D85D282A6306E6D2494D7DC2C253FC`, 1437 lignes | `A5F041FFA8562F9E75560EAD01725E2B`, 1575 lignes (après la reprise N1/N2 ; première version `6D88EDDA…`, 1570 lignes) |
Reprise après la VAL (`CAM-B2p-G-VAL.md`, N1 et N2) :
- N1 : le seuil de suivi passe de 0,5 cm à 0,01 cm. Le pivot est la place des acteurs, que l'animation ne bouge
pas : tout pas compte, même lent (flèches).
- N2 : après un obstacle, la caméra est placée devant lui mais jamais à moins de 50 cm de la cible
(`RecenterMinDistance`). Elle ne passe plus de l'autre côté.
- N3 à N6 laissés en l'état, non bloquants :
- un recadrage pendant une prise est défait par la caméra figée ;
- un front de `SexC3` hors de la vue Scene est perdu ;
- la lecture de `SexC3` hors sexe coûte peu ;
- la borne de 900 cm ne joue que hors prise ;
- le fondu reste à voir à l'essai.
| `Source/LifePlay/LPCameraModeSubsystem.h` | `4AE6599447750371CFF7E0AAC74EB93E`, 132 lignes | `00D439937DBCEAB44F459C4A834F34F0`, 141 lignes |
Fins de ligne : LF (0 CR).
## 1. Écritures
- **Constantes** :
- `PCSexC3` (`SexC3`, la variable du PC qui sera ajoutée par MCP) ;
- recadrage : 300 cm de distance, 120 cm de hauteur, cible à la racine + 60 cm, marge de 20 cm aux murs ;
- suivi : 900 cm au plus, pas minimal de 0,5 cm.
- **`ComputeLabel`** : pendant le sexe, hors POV, si `PC.SexC3` est vrai, l'indicateur affiche « Camera: C3 Couple ».
Sans la variable (PC pas encore modifié), `ReadBool` rend faux et rien ne change.
- **`TickCoupleBounds`** :
- hors sexe : `LastSexView` et `bSexC3Was` sont oubliés, et `PC.SexC3` est remis à faux s'il était vrai (scène
finie en C3) ;
- appelle `TickSceneCamera` dans le chemin de la pièce cachée et en fin de chemin normal, avant la mise à jour de
`LastCouplePivot`.
- **`TickSceneCamera`** (nouveau), seulement si la vue est `Room.SceneCamera` :
- **G-b** : à l'entrée en Scene (la vue de l'image précédente n'était pas `SceneCamera`), `RecenterSceneCamera`
(« entree en Scene ») ;
- **G-d (C++)** : au front montant de `PC.SexC3`, `RecenterSceneCamera` (« C3 ») ;
- **G-c** : sinon, hors prise et hors image de fin de prise, la caméra se déplace du même vecteur que le pivot
depuis l'image précédente (au-delà de 0,5 cm). Puis la distance est ramenée à 900 cm au plus.
- **`RecenterSceneCamera`** (nouveau, G-a) :
- cible : XY du pivot, Z = racine du maillage la plus basse + 60 cm ;
- position : azimut actuel de la caméra autour de la cible (sinon derrière le meneur), à 300 cm, 120 cm plus haut ;
- dans une pièce non cachée : bornée à l'intérieur F1 (marge 20 cm) et entre sol + 30 et plafond − 20 ;
- tracé Visibility de la cible vers la caméra (couple, `SceneCamera`, `Wall` et `CamRoom` ignorés) : en cas
d'obstacle, la caméra est ramenée 20 cm devant lui ;
- regard sur la cible ;
- ligne `Sexe : vue recadree sur le couple (<raison>) a <d> cm, cible (x, y, z)[, rapprochee devant un obstacle]`.
- **G3, témoin côté appelant** (point 4 de Big Boss), dans le bloc « relâcher » de `TickCoupleMouse` : quand le
meneur a bougé de plus de 1 cm, une ligne par appel,
`Sexe : G3 NotifyCoupleTeleported appele|non appele, sous-systeme absent (meneur deplace de <d> cm par la prise)`,
puis l'appel. Il n'y a aucun changement de condition.
- **`.h`** : `TickSceneCamera`, `RecenterSceneCamera`, `LastSexView`, `bSexC3Was`.
## 2. G3 : lecture de `LPShowCoupleSubsystem.cpp` (STE, rien écrit)
- `KeepTogether` (l. 750-805) se termine **à chaque image** par `LastSafe = Who->GetActorLocation();` (l. 804).
- `NotifyCoupleTeleported` (l. 807-824) n'écrit « place reprise » que si `Now − LastSafe` n'est pas nul.
- **Confirmé** : pendant un glisser, `KeepTogether` passe à chaque image après le déplacement de CAM et remet déjà
`LastSafe` à la place du meneur. Au relâcher, la place est donc déjà reprise : l'appel est sans effet visible.
C'est normal, et c'est ce qui s'est passé à COMMUN-11. Le nouveau témoin montrera que l'appel part.
- Conséquence : G3 ne change le résultat que si `KeepTogether` a refusé ou ramené un pas du glisser, et que la place
sûre est restée en arrière. Le cas du couple coincé (dégagement) se jugera en jeu, avec ce témoin et la ligne
« bloque par » de STE.
## 3. Écarts
- La partie PC de G-d (variable `SexC3` et 2 branches) reste à faire par MCP, sous UE-GO. Le C++ est prêt à la lire.
- Le recadrage à l'entrée en Scene remplace, à chaque retour depuis le POV, le cadrage d'origine du jeu
(`pickPreset`). C'est voulu (SPEC G-b).
## 4. Points à confirmer en V7
- Lignes « vue recadree » à l'entrée en Scene et en C3.
- Avec les flèches et la molette, la caméra suit le couple.
- Distance de 900 cm au plus.
- Ligne « G3 NotifyCoupleTeleported appele » à chaque pose qui déplace le meneur.
- Compilation.
- Essais CAM-76 à CAM-80.
## 5. Fichiers à commiter
A `Source/LifePlay/LPCameraModeSubsystem.cpp` et `.h` ; A `CAM-B2p-G-SPEC.md`, `CAM-B2p-G-IMPL.md`,
`CAM-B2p-G-VAL.md`.