LifePlay-Revival/Docs/Migration/etat/CAM/CAM-B2p-J-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

10 KiB
Raw Blame History

CAM-B2p-J : DIAG COMMUN-12 (souris, lit, Espace, hauteurs) et correctif C++ (2026-10-14)

GO : Big Boss, 2026-10-14 (« DIAG puis correctif, avec un seul GO » : glisser et rotation à la souris, panneau sur Alt, restauration à la sortie, N2 et B2p-I ; GO pour la partie C++ ; le PC attend l'UE-GO). Journal lu sans le modifier : D:\Game\LifePlay_Backup_5.5\COMMUN-12\essais\commun12_LifePlay.log (UTC).

1. DIAG

1.1 Glisser et rotation sans effet (régression B2p-G, établie)

  • Journal :
    • les prises existent : couple pris (deplacement) à 12:36:24, 12:37:39, 12:38:15… ;
    • mais chaque pose est à la même place, et chaque rotation est de +0 degré (12:36:32, 12:37:41, 12:38:20, 12:38:26) ;
    • il n'y a aucune ligne surface refusee ni place refusee. Le code de pose n'est donc jamais atteint : le seuil de 5 px du glisser (bGrabMoved) n'est jamais franchi, et l'écart de MouseX vaut 0 ;
    • le curseur ne bouge pas pendant l'appui.
  • Cause, établie (dump du PC et moteur 5.8) :
    • à la fermeture du panneau, le PC repasse en GameOnly (CallFunction_1394 SetInputMode_GameOnly, l. 1171) ;
    • FInputModeGameOnly::ApplyInputMode (PlayerController.cpp:6439-6451) active UseHighPrecisionMouseMovement et LockMouseToWidget, puis CapturePermanently et LockOnCapture : le curseur est caché, sa position figée ;
    • le journal montre ces bascules (LogViewport … CaptureDuringMouseDown -> CapturePermanently, 12:38:21).
  • Pourquoi c'est une régression de B2p-G : avant G-g, un clic court ouvrait le panneau (LeftMouseSexOn, puis SetInputMode_GameAndUIEx, DoNotLock, l. 1034-1041). La souris restait donc libre pour les prises suivantes (COMMUN-9 à 11). G-g a coupé cette voie : le panneau reste fermé, la souris reste verrouillée.
  • prise=0 MoveCamera=1 (12:41 à 12:43) : la position lue au clic est la position figée, pas celle que voit l'utilisateur. La sélection par projection échoue, et le clic part à l'orbite.
  • Pistes écartées :
    • canal Pawn de H3 : la requête ignore le couple (Query.AddIgnoredActors(Couple)), et le tracé vertical ne sert qu'après bGrabMoved ;
    • test de pose de H4 : jamais atteint (aucune ligne) ;
    • sélection depuis que la caméra suit : le recadrage met le couple au centre, ce qui explique les quelques prise=1 (position figée près du centre).

1.2 S3, « le lit nous interdit de se poser »

C'est la même cause : la prise sur le lit (12:38:15, racine a +60 cm … fnt_bed02) n'a rien déplacé, puisque le curseur était figé. Aucune règle de H3 ou H4 n'a refusé le lit (aucune ligne).

1.3 Hauteurs

  • Montée pendant la rotation (+22 cm à chaque prise, 12:38:18 à 12:38:23 ; Z 99, puis 121, puis 144) : CAM n'a rien bougé (rotation de 0). Le meneur a été déplacé pendant la prise par une autre source, et G3 le mesure au relâcher (meneur deplace de 22 cm). La seule voie connue qui monte le couple est la molette de Room : B2p-R O1 (MoveObject OU SexOn) la donne au couple pendant le sexe. Preuve à 12:37:57 : deplace hors prise … +9 ; molette=+1.0. Le témoin E4 est muet pendant une prise : c'est estimé. Un nouveau témoin l'écrira.
  • +180 cm au-dessus du sol (12:38:37 à 12:39:16, Z 165 à 171) : ce sont Maj et la molette de Room (Maj=1 MoveObject=1). La borne E ne fixe que la racine à 120 cm sous le plafond (racine au plus 163, sol −102), soit jusqu'à 265 cm au-dessus du sol. Établi. Une borne plus basse est proposée (§ 4), pas faite.

1.4 Espace

Pause = SpaceBar (DefaultInput.ini:97). G-g (PC IfThenElse_134) détourne Espace vers le panneau pendant le sexe. L'utilisateur le veut sur Alt. Alt est déjà l'action RotateCamera (DefaultInput.ini:107-109, avec le clic molette). Le retour d'Espace à sa fonction demande le PC : défaire la branche 134 (§ 3).

2. Correctif C++ (LPCameraModeSubsystem, instantané CAM-B2p-I3)

.cpp .h
Avant (= B2p-I + D1) 0F383EF777DED71608347E17D4A0861F, 1976 lignes 6EDBBCCF61759B8C6EE4890DF9BC5FE7, 179 lignes
Après 9D9291021BBB44BD8AD49448494FAB3A, 2197 lignes 9D85465E284F626D00212FFAA331C4BB, 203 lignes

Fins de ligne : LF (0 CR).

  • J1, souris libre (KeepMouseFree, à chaque image pendant le sexe, hors menu, sans bouton tenu) :
    • si le viewport est en CapturePermanently (GameOnly du PC), on applique FInputModeGameAndUI, DoNotLock, HideCursorDuringCapture faux, sans widget de focus (le clavier reste au jeu). C'est l'état de COMMUN-11 ;
    • ligne Sexe : souris liberee pour le glisser (…), au plus une toutes les 2 s, avec le compte.
  • J2, curseur de la prise (GrabCursor) : position réelle quand elle bouge ; sinon, deltas bruts de la souris (GetKeyValue(MouseX/MouseY)). Le glisser (seuil, visée par DeprojectScreenPositionToWorld) et la rotation ne dépendent plus du mode d'entrée. C'est un filet si J1 ne passe pas.
  • J3, refus muets rendus visibles :
    • clic hors du couple, pas de prise (curseur, couple à N px, seuil), toutes les 2 s au plus ;
    • glisser sans effet, curseur deplace de N px (seuil 5), deltas bruts sur N images, curseur avec/sans position ;
    • rotation sans effet, … ;
    • glisser, le curseur ne vise aucune surface (une fois par prise) ;
    • couple deplace pendant la prise hors CAM de (dx, dy, dz) ; molette=… Maj=…, une par seconde au plus : le témoin de § 1.3.
  • J4, panneau sur Alt (TickPanelClick) : Alt gauche ou droit bref (0,2 s au plus, 5 px au plus) bascule le panneau, comme le clic molette. Un appui tenu ou une glissée reste l'orbite (RotateCamera). Ligne panneau bascule (Alt|clic molette, …). Toujours seulement pendant le sexe, hors menu.
  • J5, restauration à la sortie (BeginSexScene et EndSexScene, au front de GI.SexOn) :
    • au début : empreinte des mappages (nombre d'actions et d'axes, CRC), ligne debut de scene, touches … ;
    • à la fin :
      • prise levée, clic molette et Alt oubliés ;
      • boîte d'aide et icône repliées ;
      • opacité de TextBlock_1 rendue (D3 de B2p-I) ;
      • PC.MoveCamera à faux si aucun bouton n'est tenu ;
      • PC.SexC3 à faux ;
      • mode d'entrée rendu à GameOnly si CAM l'avait changé, que la vue est toujours dans l'état posé par CAM et qu'aucun menu n'est ouvert ;
      • empreinte des touches comparée ;
      • une ligne : fin de scene, etats rendus : prise=… MoveCamera=… SexC3=… ; mode d'entree … ; 4 lignes … ; icone et aide repliees ; touches inchangees|CHANGEES (…).
    • CAM ne change aucun mappage (ZQSD, flèches, clics, Alt, Espace, molette et C sont lus, jamais écrits). Le focus clavier rendu à la vue (H1, H2) n'a pas d'état à rendre.
  • J6, texte d'aide : « Mouse wheel: raise / lower the couple » remis (la molette déplace bien le couple, par B2p-R O1, § 1.3) ; « Alt or middle click (short press): show / hide this panel ». La constante ActionPause est retirée.
  • N2 (I0) et B2p-I (I1, avec D1) sont déjà dans la base de ce correctif.

3. PC : il faut l'éditeur (UE-GO)

Pour qu'Espace retrouve sa fonction pendant le sexe, on défait G-g (2) dans le PC (CAM-B2p-G-PC-FICHE.md § 7, amendement a) :

  1. instantané CAM-B2p-J-PC du PC ;
  2. connect_pins IfThenElse_40.then → CallFunction_277.execute (remplace 40 → 134) ;
  3. delete_node IfThenElse_134 (le lien VariableGet_22.SexOn vers 134 part avec lui ; celui vers IfThenElse_15 reste) ;
  4. delete_node CallFunction_408 ;
  5. relecture de 40, 277, 22 et 15 ; compilation stricte ; save_assets du PC seul ; V5 (diff contre CAM-B2p-G-PC-VAL_LPDumpFunction_20261014-135527.txt : 1447 → 1445 nœuds) et V6 par un validateur distinct.

Volume : environ 10 appels. Les coupures G-g (1) (clics gauche et droit sans bascule) restent : l'utilisateur ne les remet pas en cause. Le clic molette et Alt (C++) remplacent Espace.

4. Proposé, non fait (à décider)

  • Hauteur du couple : borner la racine à la surface sous le couple (sol ou lit) + 30 cm, plutôt qu'au plafond − 120 cm. Cela défait les montées de la molette de Room au-delà. C'est un changement de règle E.

5. Essais (COMMUN-13)

  • CAM-91 : panneau fermé, glisser au clic gauche et rotation au clic droit marchent ; ligne souris liberee.
  • CAM-92 : glisser sur le lit : posé dessus (S3) ; sur une commode : surface refusee.
  • CAM-93 : Alt bref bascule le panneau, Alt tenu tourne la caméra ; Espace (après le PC) fait sa fonction d'origine.
  • CAM-94 : fin de scène : ligne fin de scene, etats rendus … touches inchangees ; marche, souris et touches normales.
  • CAM-95 : molette pendant une prise : ligne deplace pendant la prise hors CAM.
  • CAM-86 à 90 (B2p-I) : l'icône « i » et l'aide.

5 bis. Reprise après la VAL (CAM-B2p-J-VAL.md, FAIL sur D1)

Instantané CAM-B2p-I4 (9D929102… / 9D85465E…) ; après : .cpp 1F10631F904E0EAB74BAA896571F0A57, 2220 lignes ; .h 9AEE8D04CF35C0C6EEDF226E3B0A86C3, 206 lignes, LF.

  • D1 (bloquant) : les deltas bruts passent par GetRawKeyValue. GetKeyValue applique la sensibilité du projet (0,07), ce qui rendait les deltas 14 fois trop petits.
  • D2 : KeepMouseFree libère aussi la souris quand la capture se fait à l'appui mais cache le curseur (HideCursorDuringCapture vrai : haute précision à l'appui). C'est l'état vu au journal après le premier relâcher.
  • D3, D4 : BeginSexScene garde l'état de la souris du début de scène (mode de capture, verrou, curseur caché). EndSexScene le rend tel quel (GameOnly seulement si la capture était permanente, puis les trois réglages), au lieu d'imposer GameOnly. Le membre MouseCaptureBefore est remplacé par bSavedMouseState, SavedCaptureMode, SavedLockMode et bSavedHideCursor.
  • Note de la VAL : MoveCamera n'est plus remis à faux à la fin si Alt est tenu.
  • D5 (gabarit, intervalle 12:35:26) et D6 (+22 cm attribués trop vite à la molette) : la DIAG § 1.1 et § 1.3 est corrigée en lecture comme suit. La cause du § 1.1 est estimée forte et non établie : le curseur est caché à l'appui (GameOnly, ou HideCursorDuringCapture vrai), donc sa position est figée. Aucune position n'est au journal. Les +22 cm ont une cause non établie : chaque épisode coïncide avec un panneau bascule pendant la prise. Le nouveau témoin deplace pendant la prise hors CAM tranchera.

6. Fichiers à commiter

A Source/LifePlay/LPCameraModeSubsystem.cpp et .h ; A CAM-B2p-J-IMPL.md, CAM-B2p-J-VAL.md.