LifePlay-Revival/Docs/Migration/etat/CAM/CAM-B2p-E-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

71 lines
4.6 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-E-IMPL : borne dure du couple pendant le sexe (C++, 2026-10-14)
GO : Big Boss, 2026-10-14 (« GO pour B2p-E (E1 à E4) », plafond borné si c'est facile). DIAG :
`CAM-COMMUN9-DIAG.md` § 4. Écriture sans UE ni compilation ; le lot entre dans COMMUN-10.
Instantané : `D:\Game\LifePlay_Backup_5.5\CAM-B2p-E\` (`.cpp` `D6063264…`, `.h` `6585D7F6…`, état B2r + B2p-C + B2p-D).
| Fichier | Avant | Après |
|---|---|---|
| `Source/LifePlay/LPCameraModeSubsystem.cpp` | `D60632646BF1CF7D200E3BEA833D8D72`, 1044 lignes | `FFF0FBB45D493B931B08780BF09547C8`, 1163 lignes (après la reprise B1 ; première version `6192495E…`) |
| `Source/LifePlay/LPCameraModeSubsystem.h` | `6585D7F67A7BE3AEA377B8E93CFA14D8`, 112 lignes | `0EDC1F76B7EEC0D135EA046DA2269BE0`, 121 lignes |
Fins de ligne : LF (0 CR).
## 1. Écritures
- **Constantes** :
- tolérance sous le sol : 5 cm (`CoupleFloorTolerance`) ;
- plafond estimé à 350 cm au-dessus du sol (`CoupleCeilingHeight`) ;
- seuil du témoin : 5 cm par image (`CoupleMoveWitness`) ;
- au plus une ligne par seconde (`CoupleBoundsLogInterval`).
- **`TickSwitchKey`** (à chaque image) appelle `TickCoupleBounds` après `TickSexCamera`.
- **`TickCoupleBounds`** (nouveau, E1 et E4) : tant que `SexOn` est vrai, **menus compris**.
- Pivot = moyenne des `SexPersons` valides.
- **E4** : si le pivot a bougé de plus de 5 cm depuis l'image précédente sans prise B2p-D, une ligne
`Sexe : couple deplace hors prise de (dx, dy, dz) ; fleches=… Maj=… molette=… ; Room cachee=…`.
- Si Room est cachée (`IsHidden`, scène d'extérieur) ou n'a pas de `Box` : aucune borne, une ligne par scène
`Sexe : pas de borne du couple (Room cachee=…, sol …)`.
- **E1** :
- pivot XY borné aux limites de `Room.Box` moins 30 cm (la même marge que B2p-D) ;
- Z : la racine du maillage (Z du composant `Mesh`) la plus basse du couple ne descend pas sous le dessus de
`Box` − 5 cm. Sinon, le couple est remonté jusqu'au dessus du sol ;
- la racine la plus haute ne dépasse pas le dessus de `Box` + 350 cm (plafond estimé). Sinon, le couple est
redescendu ;
- un seul vecteur de correction pour toutes les `SexPersons` ; ligne
`Sexe : couple ramene dans la piece de (dx, dy, dz) ; sol …, plafond estime … ; prise=…`, au plus une par
seconde.
- Hors sexe : état oublié, aucune action.
- **E2** (dans `TickCoupleMouse`, tracé vertical de B2p-D) : au-dessus du sol de `Room.Box` (Room non cachée), la
surface retenue n'est jamais plus basse que le dessus du sol. Sans impact au-dessus du sol, la surface est le
dessus du sol.
- **E3** (flèches) : aucun changement de Room ; E1 retient le couple au bord.
- **`.h`** : `TickCoupleBounds`, `LastCouplePivot`, `bHasLastPivot`, `bHiddenRoomWarned`, `CoupleBoundsCooldown`,
`CoupleMoveCooldown`.
## 2. Écarts au DIAG
- E4 : `Room.bHidden`, la molette et Maj sont écrits sur la ligne « couple deplace hors prise », et non sur la ligne
« Sexe : touches ». C'est la ligne qui sert à désigner la source ; la ligne des touches reste inchangée.
- Plafond : Room n'expose pas de plafond. On prend une hauteur estimée de 350 cm au-dessus du sol (Maj + molette
avait monté le couple à environ 154 cm au-dessus du sol en COMMUN-7). À régler si une pièce est plus haute.
- La borne s'applique aussi pendant une prise B2p-D, avec la même marge XY : aucun conflit, le glisser est déjà
borné.
- Reprise après la VAL (B1, bloquant) : dans `TickCoupleBounds`, le local `Root` masquait le membre
`TSharedPtr<SWidget> Root` (C4458, mis en erreur par `/we4458` en `BuildSettingsVersion` V7). Il est renommé
`RootZ`, sur 3 lignes. Diff et recherche des autres masquages revus par le même validateur.
- Non déclarés dans la première version, relevés par la VAL :
- l'appel est placé dans `TickSwitchKey`, et non à la fin de `TickSexCamera`. C'est nécessaire, parce que
`TickSexCamera` s'arrête pendant les menus ;
- la ligne E1 écrit `prise=` au lieu d'une « source probable ». La source se lit sur la ligne E4.
## 3. Points à confirmer en VAL et en V7
- Compilation (COMMUN-10) : `AActor::IsHidden`, `TNumericLimits<double>`, `FBox(ForceInit)`.
- En jeu :
- `Box.Bounds.Max.Z` est bien le dessus du sol (LPDebug : −102,2) ;
- les limites XY de `Box` couvrent tout le sol de la pièce ;
- aucune pose légitime n'est remontée à tort.
- Essais CAM-64 à CAM-68 (`CAM-COMMUN9-DIAG.md` § 5).
## 4. Fichiers à commiter
A `Source/LifePlay/LPCameraModeSubsystem.cpp` et `.h` ; A `CAM-COMMUN9-DIAG.md`, `CAM-B2p-E-IMPL.md`,
`CAM-B2p-E-VAL.md`.