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

72 lines
4.6 KiB
Markdown
Raw Normal View History

# 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`.