# CAM-B2p-C-IMPL : ZQSD pour la caméra pendant le sexe, molette en réserve, témoin des touches (C++, 2026-10-14) GO : « go » de l'utilisateur dans la session CAM (2026-10-14), après le compte rendu qui attendait le GO de B2p et la décision sur Q8. Lu comme : GO sur B2p, **option A retenue** (vue de scène = `SceneCamera` pendant le sexe, ce qui revient sur Q8). Écriture sans UE ni compilation, comme B2r. La compilation se fera au prochain passage sous jeton UE. SPEC : `CAM-B2p-SPEC.md` (P3, P3 bis, témoin). Instantané : `D:\Game\LifePlay_Backup_5.5\CAM-B2p-C\` (`.cpp` `124336D3…`, `.h` `61A3E062…`, état B2r). | Fichier | Avant (B2r) | Après | |---|---|---| | `Source/LifePlay/LPCameraModeSubsystem.cpp` | `124336D3293EF06BEFCF076D10956234`, 662 lignes | `8E35E07AE08F3F208A24DC4CF2B3338F`, 820 lignes (après la reprise VAL ; première version `E5DA8299…`) | | `Source/LifePlay/LPCameraModeSubsystem.h` | `61A3E06280BF7226ADB52ECFDD9173DE`, 77 lignes | `9E20981F8C768371A0935E2C7CE9E134`, 84 lignes | Fins de ligne : LF (0 CR). ## Écritures - `LPCameraModeLocal` : - noms d'axes `MoveForward`, `MoveRight`, `LeftRight`, `DownUp`, `ScrollDownUp` ; `GISexPersons`, `GISexCameraIndex`, `RoomMoveObject` ; - constantes : - orbite 90°/s, avance ou recul 200 cm/s, distance de 80 à 800 cm ; - regard POV 90°/s, tangage borné à ±80° ; - `bSexWheelZoom = false` (P3 bis désactivé), cran de molette 40 cm ; - témoin au plus une ligne par seconde ; - aides `ReadInt`, `ReadActors` (acteurs valides d'un tableau d'objets) et `AxisValue` (copie de celle de STG : état brut des touches mappées, remappages suivis). - `Tick` : garde le résultat de `MenuOnScreen` dans `bMenuOnScreen`, pour ne pas parcourir les widgets à chaque image. - `TickSwitchKey` (à chaque image) appelle `TickSexCamera`. - **`TickSexCamera`** : rien si `SexOn` est faux ou si un menu est à l'écran. - Pivot : moyenne des positions des `SexPersons` valides. - **Vue = `Room.SceneCamera`** (mode Scene, posé par P1 de B2p-R) : - Q/D : la position tourne autour du pivot (axe vertical), et le lacet de la caméra tourne du même angle ; - Z/S : avance ou recul vers le pivot, borné de 80 à 800 cm. Les bornes ne s'appliquent que pendant l'avance ou le recul : l'orbite seule ne déplace pas une caméra que le jeu a posée plus loin ; - D tourne vers la droite (angle = −côté × vitesse × dt, convention de lacet d'UE). - **Vue = une des `SexPersons`** (POV) : sur `FirstPersonSM` de la personne en vue (le même composant que la souris en POV), Q/D règlent le lacet et Z/S le tangage, borné à ±80°. - Autre vue : aucun mouvement. - **Témoin**, au plus une ligne par seconde, tant que ZQSD, une flèche ou Maj est tenu : `Sexe : touches avant=… cote=… fleches=…/… Maj=… MoveObject=… MoveCamera=… ; vue … ; index POV … ; couple N a (x, y, z)`. - `.h` : `TickSexCamera`, `bMenuOnScreen`, `SexKeysCooldown`. ## Écarts à la SPEC - Le menu Clavier est testé par `MenuOnScreen` (qui inclut `ULPKeyboardSubsystem::IsMenuOpen` et les menus du jeu), gardé à 0,1 s, au lieu d'`IsMenuOpen` seul : c'est plus large, donc plus sûr. - P3 bis est écrit mais désactivé (`bSexWheelZoom = false`), comme le prévoit la SPEC. - Déclarés après la VAL (`CAM-B2p-C-VAL.md`, constats 3 et 4) : - le format du témoin diffère du texte de la SPEC : `avant` et `cote` au lieu de Z/Q/S/D séparés, et `couple N a` (nombre de personnes du couple) ; - en POV, la rotation est posée en angles monde (lacet + tangage borné, `SetWorldRotation`), au lieu d'`AddWorldRotation` avec un tangage autour de l'axe droit local. Le résultat est le même tant que le roulis reste nul ; on le vérifie en V7 ; - sens de D : en mode Scene, la caméra se déplace vers sa droite autour du couple (son lacet diminue) ; en POV, le regard tourne vers la droite (le lacet augmente). À l'écran, les deux donnent « vers la droite ». Ressenti à confirmer en V7. - Reprise après la VAL (constat 2) : le pas de temps est borné à 0,05 s (`SexMaxStep`). Un à-coup d'image ne fait plus tourner ni avancer la caméra d'un coup. Trois lignes de plus, MD5 `.cpp` `8E35E07A…` ; diff revu par le même validateur. - Laissé en l'état (constat 1, conforme à la SPEC) : au premier appui sur Z/S, une caméra posée par le jeu hors de 80 à 800 cm saute à la borne. ## Ce qui ne marche qu'avec B2p-R Sans P1 (Room), la vue en mode Scene reste `CamRoom` (sauf départ en C3), et ZQSD n'agit pas en mode Scene. Le POV marche sans P1. ## Non fait (hors GO) Compilation, et B2p-R (Room, MCP) : à faire sous UE-GO.