72 lines
4.6 KiB
Markdown
72 lines
4.6 KiB
Markdown
|
|
# 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`.
|