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

71 lines
4.6 KiB
Markdown
Raw Normal View History

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