LifePlay-Revival/Docs/Migration/etat/CAM/CAM-B2p-I-IMPL.md
edujiro5972 8084622450 LifePlay UE 5.8 : état de développement au 2026-10-19
Tickets : REP1-T4

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 22:57:42 +02:00

104 lines
7.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CAM-B2p-I-IMPL : aide des contrôles derrière une icône « i » (C++ seul) et reprise N2 de B2p-H (2026-10-14)
GO : Big Boss, 2026-10-14 (option 1, C++ seul ; aide en anglais, touches lues dans les mappages ; pas de lecture MCP,
confirmation au premier essai ; code défensif ; la ligne de la molette est retirée si CAM ne déplace pas le couple à
la molette ; N2 entre aussi dans COMMUN-13). SPEC : `CAM-B2p-I-SPEC.md`. Écriture sans compilation ; aucun asset
touché ; rien chez STG ni STE.
## 0. Instantanés et empreintes (`D:\Game\LifePlay_Backup_5.5\`)
| Point | Instantané | `.cpp` avant | `.h` avant |
|---|---|---|---|
| I0 : N2 de B2p-H | `CAM-B2p-I0` | `210B665AA8D5D628B8C1AC429A339B74` | `239DA6094E7401E0E3B3699A635A8150` |
| I1 : aide des contrôles | `CAM-B2p-I1` | `3A11A3872378485DC64804AEC0A761EE` | `239DA609…` |
| **Final** | — | **`73CC3BD667059A903E44405C5E793DE3`**, 1969 lignes | **`6EDBBCCF61759B8C6EE4890DF9BC5FE7`**, 179 lignes |
Fins de ligne : LF (0 CR).
## 1. I0 : N2 (VAL B2p-H)
Au glisser, quand la place est admise et que le couple bouge : `LastSurfaceRefused.Reset()`. Un nouveau passage sur la
même surface refusée écrit de nouveau sa ligne `surface refusee`.
## 2. I1 : aide des contrôles
### 2.1 Vérification demandée : la molette
CAM ne déplace pas le couple à la molette : `bSexWheelZoom = false` (`LPCameraModeSubsystem.cpp`, constantes B2p-C).
La molette passe à Room (zoom d'origine, nœud 125). **La ligne « Mouse wheel » est retirée** du texte d'aide.
### 2.2 Écritures
- **Includes** : `Blueprint/WidgetTree.h`, `Components/Button.h`, `CanvasPanelSlot.h`, `HorizontalBoxSlot.h`, `Image.h`,
`PanelWidget.h`, `TextBlock.h`, `Engine/Texture2D.h`, `Widgets/Layout/SBorder.h`.
- **Constantes** (`LPCameraModeLocal`) : `GISexInterface`, `SexHelpLinesName` (`TextBlock_1`), `SexHelpLinesStart`
(« Click any mouse button »), `PCCursorREF`, `CursorSearchAction`, `CursorBelowCursor`, `HelpButtonName`
(`LPControlsHelp`), `HelpIconPath` (`/Game/Heavy/New/info.info`), `HelpIconSize` (28 px), `HelpZOrder` (60),
`ActionPause`.
- **`MappedKeys(Name, Sign)`** (namespace) : noms des touches du clavier de l'axe ou de l'action, mappages en cours de
`UInputSettings` (même source que `AxisValue`). Souris, manette et axes analogiques exclus ; « ? » si aucune touche.
- **`BuildControlsHelp`** : texte en anglais ; `<…>` = touches lues :
```
CAMERA
<SwitchCamera>: next view (Scene > C3 couple close-up > each partner's eyes)
<MoveForward+> / <MoveForward->: move closer / away <MoveRight-> / <MoveRight+>: orbit around the couple (eyes view: look around)
Hold a mouse button away from the couple and move the mouse: rotate the camera
COUPLE
Left-drag the couple: move it (floor or bed only)
Right-drag the couple: turn it
<LeftRight>, <DownUp>: move the couple
ACTIONS
<Pause> or middle click: show / hide this panel
```
- **`TickControlsHelp`**, appelé en tête de `Tick` (0,1 s), avant les retours de l'indicateur (le filtre qui a le
focus compte comme un menu pour `MenuOnScreen`) :
- **I-d** (pendant le sexe) : `GI.SexInterface` → `TextBlock_1`. **Seulement si son texte commence par « Click any
mouse button »** (sensible à la casse) : opacité de rendu à 0, et l'ancienne valeur est gardée. La liaison
`Get_TextBlock_1_Text` **reste en place** : `UTextBlock::SetText` la retirerait (`TextBlock.cpp:469-478`, moteur
5.8). Si le même bloc porte plus tard un autre texte (jouissance), il retrouve son opacité. Une ligne au journal
à chaque changement.
- **I-a** : `PC.CursorREF`, une tentative d'insertion par instance du `Cursor` pendant le sexe (`AttachHelpIcon`).
L'icône est visible pendant le sexe et repliée hors du sexe (le `Cursor` sert aussi aux autres menus d'action).
Info-bulle mise à jour si le texte change (remappage).
- **I-c** : boîte d'aide montrée seulement si `bHelpBoxOpen`, pendant le sexe, et le panneau ouvert
(`Cursor.BelowCursor` visible, même test que `IfThenElse_10` du PC). Fermée avec le panneau.
- **`AttachHelpIcon`** (défensif) :
- icône déjà présente (par nom) : reprise, clic relié une fois (`AddUniqueDynamic`) ;
- `SearchAction` ou son parent introuvable : **rien n'est inséré**, ligne `Aide sexe : icone non inseree, … introuvable` ;
- `SearchAction` ancré en étirement dans un `CanvasPanel` : rien n'est inséré, une ligne ;
- bouton transparent ; image de la texture `info` à 28 px ; **texture absente : un « i » en texte** (gras 18,
blanc) ;
- `AddChild` dans le parent de `SearchAction`. `InsertChildAt` n'est pas utilisé : son ordre ne passe pas à Slate
sans reconstruction (`PanelWidget.h:68-72`). L'icône vient donc **en fin de la rangée du filtre**, après ses
boutons (dans une `HorizontalBox` : centrée, marge de 4 px), ou à droite du filtre dans un `CanvasPanel`.
- ligne `Aide sexe : icone inseree dans <parent> (<classe>, <n> enfants), image <chemin | absente, lettre i>`.
- **`ToggleControlsHelp`** (`UFUNCTION`, clic) : ouvre ou ferme la boîte ; ligne au journal ; rafraîchit tout de suite.
- **`EnsureHelpBox` / `RemoveHelpBox`** : `SOverlay` du viewport (ordre Z 60), en bas à droite, à la place des 4
lignes. Fond noir à 75 % (`WhiteBrush` teinté), texte blanc de 14 avec ombre noire. `LPReadableText` n'est pas
nécessaire. Retirée dans `Deinitialize`.
- **`.h`** : déclarations avancées `UButton`, `UTextBlock`, `UUserWidget` ; 6 fonctions, 10 membres.
## 3. Écarts à la SPEC
- L'icône est ajoutée en fin de rangée, et non juste après le champ (voir `AttachHelpIcon`). L'utilisateur
acceptait « à côté du champ de filtre ou des boutons ».
- I-d utilise l'opacité de rendu et non le vidage du texte : vider le texte retirerait la liaison pour toute
l'instance.
- Pas de lecture MCP (décision de Big Boss) : le premier essai confirme le parent, l'icône et le texte de `TextBlock_1`
par les lignes `Aide sexe :`.
## 4. Points à confirmer à l'essai (COMMUN-13)
- CAM-86 : ligne `icone inseree` (parent, classe), image `info` ; ligne `4 lignes d'origine masquees`.
- CAM-87 : le survol montre l'info-bulle ; le clic ouvre et ferme la boîte ; la fermeture du panneau la ferme.
- CAM-88 : les touches affichées sont celles du clavier (Z/S, Q/D sur AZERTY) ; elles suivent un remappage.
- CAM-89 : hors du sexe, l'icône est absente du `Cursor` et le texte de jouissance est toujours affiché.
- CAM-90 (N2) : deux passages sur la même commode écrivent deux lignes.
## 4 bis. Reprise après la VAL (`CAM-B2p-I-VAL.md`)
- **D1** (corrigé, instantané `CAM-B2p-I2`, `.cpp` `73CC3BD6…` → **`0F383EF777DED71608347E17D4A0861F`**, 1976 lignes,
+7/−0 ; `.h` inchangé `6EDBBCCF…`) : `UPanelWidget::AddChild` rend nul pour un panneau à enfant unique déjà occupé.
Dans ce cas, plus rien n'est inséré ; ligne `Aide sexe : icone non inseree, <parent> (<classe>) refuse un enfant de
plus`. C'est la consigne 2 de Big Boss.
- **D2** (pour Big Boss) : Room monte et descend le couple avec **Maj + molette** (`CAM-B2p-E-IMPL.md:48`). La consigne
(« retirer si CAM ne déplace pas le couple à la molette ») est tenue, mais l'aide omet ce contrôle réel. On peut
ajouter `Shift + mouse wheel: raise / lower the couple`.
- **D3** (non corrigé) : l'opacité 0 de `TextBlock_1` n'est pas rendue hors du sexe. Le bloc porte le même texte et le
PC le cache hors du sexe : sans effet attendu, à voir à CAM-89.
- N7 de la VAL : le `.h` ajoute 9 membres, et non 10.
## 5. Fichiers à commiter
A `Source/LifePlay/LPCameraModeSubsystem.cpp` et `.h` ; A `CAM-B2p-I-SPEC.md`, `CAM-B2p-I-IMPL.md`, `CAM-B2p-I-VAL.md`.