104 lines
7.6 KiB
Markdown
104 lines
7.6 KiB
Markdown
# 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`.
|