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