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

7.6 KiB
Raw Blame History

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.