LifePlay-Revival/Docs/Migration/etat/CAM/CAM-B2p-D-IMPL.md
edujiro5972 8084622450 LifePlay UE 5.8 : état de développement au 2026-10-19
Tickets : REP1-T4

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 22:57:42 +02:00

93 lines
6.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CAM-B2p-D-IMPL : couple à la souris pendant le sexe (C++, 2026-10-14)
GO : Big Boss, 2026-10-14 (« GO pour B2p-D, C++ seul »), après les demandes de l'utilisateur. SPEC :
`CAM-B2p-SPEC.md` § 7 et § 7.11. Écriture sans UE ni compilation ; compilation dans COMMUN-8 si la VAL passe à temps.
Instantané : `D:\Game\LifePlay_Backup_5.5\CAM-B2p-D\` (`.cpp` `8E35E07A…`, `.h` `9E20981F…`, état B2r + B2p-C).
| Fichier | Avant | Après |
|---|---|---|
| `Source/LifePlay/LPCameraModeSubsystem.cpp` | `8E35E07AE08F3F208A24DC4CF2B3338F`, 820 lignes | `D60632646BF1CF7D200E3BEA833D8D72`, 1044 lignes (après la reprise D-1 ; première version `3DB310DC…`, 1042 lignes) |
| `Source/LifePlay/LPCameraModeSubsystem.h` | `9E20981F8C768371A0935E2C7CE9E134`, 84 lignes | `6585D7F67A7BE3AEA377B8E93CFA14D8`, 112 lignes |
Fins de ligne : LF (0 CR).
## 1. Écritures
- **Constantes** (`LPCameraModeLocal`) :
- noms : `PelvisSocket` (`pelvis`), `RoomFloor` (`Box`) ;
- sélection à 120 px, seuil de glisser à 5 px ;
- rotation à 0,3° par pixel ;
- marge au bord du sol : 30 cm ;
- tracé du curseur : 5000 cm ;
- tracé vertical : de pivot + 150 à pivot − 400 cm.
- **`TickSexCamera`** :
- hors sexe, pendant un menu ou sans vue valide : `ReleaseCoupleGrab()` (aucune prise ; le témoin du curseur est
remis à zéro hors sexe) ;
- `PC` n'est plus `const` ;
- appelle `TickCoupleMouse` avant ZQSD. Pendant une prise, ZQSD ne déplace pas la caméra ;
- le témoin « Sexe : touches » écrit aussi les boutons G et D, la prise en cours et le lacet du couple
(`SexPersons[0]`). Il écrit aussi une ligne quand seul un bouton est tenu.
- **`TickCoupleMouse`** (nouveau) :
- **mode Scene seulement** : couple non vide, vue hors du couple, `PC.POVOn` faux. Sinon, aucune prise ;
- front montant du bouton gauche ou droit : `GetMousePosition`. Sans position, une ligne par scène :
`Sexe : curseur sans position, prise du couple indisponible`. Sélection si le curseur est à 120 px au plus du
segment bassin-tête projeté (`ProjectWorldLocationToScreen`) d'une des personnes. Aucun tracé de collision :
les corps sont en `NoCollision` pendant le sexe. Clic hors du couple : aucune prise, le jeu garde le clic
(orbite, etc.) ;
- à la prise : caméra en vue mémorisée (pose) ; hauteur du pivot sur la surface en dessous (tracé vertical,
Visibility, collision complexe ; couple, vue, `Wall` et `CamRoom` ignorés) ; décalage XY entre le pivot et le
point visé par le curseur. Ligne au journal :
`Sexe : couple pris (deplacement|rotation) a (x, y, z), hauteur sur la surface …` ;
- **clic gauche tenu (déplacement)** : rien avant 5 px de mouvement. Ensuite, le rayon du curseur donne le point
visé (dessus du lit ou sol), on ajoute le décalage, on borne aux limites XY de `Room.Box` moins 30 cm, et le Z
vient de la surface sous la nouvelle place plus la hauteur prise. Tout le couple est déplacé du même vecteur ;
- **clic droit tenu (rotation)** : le mouvement horizontal fait tourner le couple autour du pivot (positions et
lacet), à 0,3° par pixel ;
- pendant la prise : la caméra en vue est remise à sa pose mémorisée à chaque image (aucune orbite au clic, aucun
zoom de la molette dans Room), et `PC.MoveCamera` est mis à faux ;
- au relâcher : `Sexe : couple pose a (x, y, z), lacet …` ou `Sexe : couple tourne de … degres, lacet …`, puis
fin de la prise.
- **`ReleaseCoupleGrab`** (nouveau) : remet la prise à zéro et oublie les boutons et la caméra figée.
- **`.h`** : déclarations de `TickCoupleMouse` et `ReleaseCoupleGrab`, et état de la prise (`CoupleGrabMode`,
boutons, `bGrabMoved`, hauteur, décalage, souris, rotation, caméra figée, `bCursorWarned`). Déclarations
anticipées de `AActor` et `UGameInstance`.
## 2. Gardes demandées par Big Boss
- **Pendant le sexe et en mode Scene seulement** : `SexOn` et l'absence de menu sont testés au début de
`TickSexCamera`, le mode Scene dans `TickCoupleMouse`.
- **Clics rendus à la sortie** : hors sexe, aucune prise, aucune écriture, aucun clic consommé. Le C++ ne bloque
jamais un clic : il lit l'état des boutons, et le jeu reçoit toujours ses clics. Seul `MoveCamera` est remis à faux
pendant une prise.
- **Dans la pièce** : borne XY au sol de `Room.Box`, moins 30 cm. Les cloisons intérieures ne sont pas testées.
- **Flèches (P2) et Maj + molette** : pas de conflit hors prise. Pendant un déplacement, la position suit le curseur
à chaque image. Un appui de flèche est donc remplacé à l'image suivante, et la hauteur vient de la surface.
Maj + molette ne joue pas pendant une prise de déplacement, et redevient actif au relâcher.
- **Reprise après la VAL (D-1)** : avec Maj tenu, un clic ne prend pas le couple. La rotation d'origine (Maj +
bouton + souris, voie Room) garde donc la main, comme le dit la SPEC § 7.11b. Deux lignes de plus dans la
sélection. Diff revu par le même validateur.
- Laissés en l'état (VAL D-2 à D-9, non bloquants, à observer en V7) :
- `AnimatingSpeed` pendant un glisser ;
- saut au bord si le couple démarre hors du sol ;
- saut au premier pas si le curseur ne vise rien à la prise ;
- une image de décalage possible de la caméra ;
- changement de vue pendant une prise ;
- bouton tenu à la fermeture d'un menu ;
- plafond ou baldaquin touché avant le lit ;
- témoin écrit dès qu'un bouton est tenu.
## 3. Points à confirmer en VAL et en V7
- Compilation (COMMUN-8) : signatures `GetMousePosition(float&, float&)`, `DeprojectMousePositionToWorld`,
`ProjectWorldLocationToScreen`, `FCollisionQueryParams::AddIgnoredActors(TArray<AActor*>)`,
`FMath::PointDistToSegment`.
- En jeu :
- le curseur a une position en mode Scene ;
- un clic gauche sur le couple ouvre-t-il une interaction de Room (`SelectUnderCursor`) ?
- un widget de scène ouvre-t-il un menu au clic droit ?
- hauteur sur le lit juste ; borne au sol ;
- aucune ligne `Accessed None` nouvelle.
- Essais CAM-58 à CAM-63 (`CAM-B2p-SPEC.md` § 7.11).
## 4. Fichiers à commiter
A `Source/LifePlay/LPCameraModeSubsystem.cpp` et `.h` (non suivis jusqu'ici) ; A `CAM-B2p-D-IMPL.md`,
`CAM-B2p-D-VAL.md`.