LifePlay-Revival/Docs/Migration/etat/REL/KEY2/KEY2-SPEC-01.md
edujiro5972 56dfcfc3d2 LifePlay UE 5.8 : état de développement au 2026-10-20
Tickets : PUB-20261020-T1

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 17:35:10 +02:00

29 KiB
Raw Permalink Blame History

KEY2-SPEC-01 : panneau de touches K2 à K6 (alpha 2026.10.2.2a, build 1)

Fiche KEY2-SPEC-01 — Niveau N3 — Modèle prévu opus (Medium) | utilisé Opus 5.5 — Session « Medium · KEY2 » — Skills : lp-lot, sk-protocol, lp-doc. Ordre : Big Boss local_104ff22d, 2026-10-20. Feuille de route Docs\37_Feuille_De_Route_Alpha2.md § 1.1 (K2 à K6, l. 36-40), § 3 (l. 170) et § 3.3 (risques 1 et 4, l. 189-197). Sans copie UE : lecture de fichiers seulement, aucune modification de code, de config ni d'asset. Les modifications décrites ici sont à faire par l'IMPL. Niveaux de preuve : établi (fichier:ligne relu) ; estimé (déduit du code, à éprouver en jeu) ; à lire (Blueprint, MCP). Révision 2 (2026-10-20) : décision de l'utilisateur sur Q1 et Q3 (§ 1, décision 5) ; § 4, § 6, § 9, § 10 et § 11 mis à jour. Toujours sans IMPL. Révision 3 (2026-10-20) : décisions de l'utilisateur sur Q2 et Q4 (§ 1, décisions 6 et 7) ; § 6, § 7 et § 11 mis à jour. Révision 4 (2026-10-20) : réponse de l'utilisateur à Q5 (§ 1, décision 8) ; nouveau § 8b ; § 11 et § 12 mis à jour. Révision 5 (2026-10-20), finale pour la build 1 : décisions sur Q6, Q7 et Q9 (§ 1, décisions 9 à 11). Q8, Q10, Q11 et Q12 restent sans réponse : l'IMPL applique la recommandation de la SPEC, notée « par défaut » au § 11. Révision 6 (2026-10-20) : résultats de KEY2-CART-02 (lecture MCP) intégrés au § 6 et au § 8b (§ 8c). Aucune nouvelle décision de l'utilisateur. Révision 7 (2026-10-20), finale pour l'IMPL : Q10 tranchée (« QWERTY en premier »), Q8 et Q11 tranchées aux valeurs recommandées, Q12 : Y du monde par défaut, repère réglé par une seule constante (ordre de Big Boss). § 1, § 4, § 8c, § 9 à § 11 mis à jour. Révision 8 (2026-10-20) : Q12 tranchée par l'utilisateur (décision 15) ; arbitrages de Big Boss (décision 16). Toutes les questions sont tranchées.

1. Décisions de l'utilisateur (citées par Big Boss, 2026-10-20)

  1. « Lettre : la touche suit la lettre. C reste sur camera, E pour interaction. »
  2. « oui pour C & E . décommissionner les touche du pavé, + et - feront l'affaire »
  3. « 2 non » : Equals et Hyphen sont retirés aussi.
  4. « non on laisse tout en build 1 » : K2 à K6 restent dans la build 1 (doc 37 l. 189-190).
  5. Révision 2, sur Q1 et Q3 : « on libère les touche W et A, si le clavier est configurer proprement en AZERT ou en QWERTY elle n'ont plus a être affecté. on peut le récupérer pour la touche action comme dans la plupart des jeux A = action et E interaction (en AZERTY) ». Lecture de Big Boss :
    • Q1 : préréglage exclusif (AZERTY : Z Q S D seuls ; QWERTY : W A S D seuls) ;
    • Q3 : ActionPanel sur A en AZERTY ; E reste Interact. La touche d'action en QWERTY (Q proposé par Big Boss, même position physique) est posée à l'utilisateur : Q9, non tranchée.
  6. Révision 3, Q2 : « Q2 une seul touche » : K4 garde une seule touche Interact (E), sans touches séparées pour s'asseoir et parler.
  7. Révision 3, Q4 : « Q4 oui » : la capture refuse le clic gauche seul ; elle ne l'accepte qu'avec un modificateur.
  8. Révision 4, Q5 : « actuellement on drag les personnages d'un endroit à un autre avec la click gauche de la souris. l'utilisateur pourrait choisir de le flaire au clavier (Arrow) pour réaffecter le click gauche sur une autre fonction. de plus il faut qu'une touche soit affecté sur 1 action caméra pour ajuster la hauteur de la vue, 2 une autre touche action pour repositionné le couple sur l'axe y on conserver la touche action pour afficher le panneau à moins que l'utilisateur en décide autrement ». Lecture de Big Boss :
    • (a) le joueur peut choisir de déplacer les personnages aux flèches au lieu du glisser au clic gauche, ce qui libère le clic gauche ;
    • (b) une nouvelle action de caméra, remappable : hauteur de la vue ;
    • (c) une nouvelle action, remappable : repositionner le couple sur l'axe Y ;
    • (d) la touche d'action garde l'ouverture du panneau par défaut, et reste remappable.
  9. Révision 5, Q9 : « 1 oui » : la touche d'action du préréglage QWERTY est Q.
  10. Révision 5, Q6 : « Q6 neutre pour le moment. » : la section porte le seul libellé neutre « Scene » ; aucun libellé adulte, ni dans le C++, ni dans une donnée privée, pour la build 1.
  11. Révision 5, Q7 : « Q7 pour la prochaine build » : Y et N restent lus en dur par PC dans la build 1 ; leur remappage (modification de PC par lp-mcp-bp) passe en build 2.
  12. Révision 7, Q10 : « QWERTY en premier » : au premier lancement, le préréglage QWERTY s'applique d'office (W A S D, action = Q, E = Interact) ; la touche d'action marche sans Apply.
  13. Révision 7, Q8 et Q11 (valeurs recommandées, non changées par l'utilisateur, transmises par Big Boss) : Tilde retiré de TestScenes ; en « Arrows only », le clic droit garde la rotation du couple.
  14. Révision 7, Q12 (ordre de Big Boss) : CoupleMoveY sur Y du monde par défaut ; le repère (monde ou couple) est une seule constante du C++, facile à changer ; la recommandation part à l'utilisateur.
  15. Révision 8, Q12 : « Q12 : axe Y du monde, comme le X déjà géré par PC ; touches G/B et V/X d'accord. » : CoupleMoveY sur Y du monde (V +, X −), CameraHeight sur G (+) / B (−).
  16. Révision 8, arbitrages de Big Boss : écarts E1, E4 à E7 de l'IMPL acceptés ; la migration ajoute aussi G / B, V / X et ActionPanel sur les touches libres ; texte d'aide du jeu mis à jour.

Conséquences retenues par cette SPEC :

  • Disposition par lettre : une action liée à « M » répond à la touche marquée M, quelle que soit la disposition. Seul le groupe de déplacement dépend de la disposition (préréglages K2, § 4).
  • C = SwitchCamera, Ctrl+C = CityMenu ; E = Interact, Ctrl+E = CharacterMenu.
  • SpeedUp = Add seul, SpeedDown = Subtract seul : NumPadSix, NumPadFour, Equals et Hyphen sont retirés de ces deux actions. Favorite4 et Favorite6 gardent Four / Six et NumPadFour / NumPadSix.

2. État de départ (établi)

Sujet Constat Source
Système d'entrée entrée classique : 55 ActionMappings et 15 AxisMappings ; aucun asset IA_* ni IMC_* ; classe de joueur EnhancedPlayerInput Config/DefaultInput.ini:95-164, :165-166 ; KEY1-CART-01 § 1
Menu des touches panneau Slate SLPKeyboardMenu dans l'onglet Clavier des réglages (TakeEmbeddedPage) ou en fenêtre (OpenKeyboardMenu) ; boutons Change, Add, Remove par liaison ; un bouton Reset LPKeyboardSubsystem.cpp:228-305, :603-638 ; LPSettingsSubsystem.cpp:873-875
Capture FKeyboardProcessor::HandleKeyDownEvent seulement : aucune capture de bouton de souris ; une touche de modificateur seule est refusée (!Key.IsModifierKey()) LPKeyboardSubsystem.cpp:487-522, :506
Filtre IsRemappable : refuse les touches analogiques, les axes 1D et la manette ; accepte les boutons de souris :75-78
Accords Shift, Ctrl, Alt, Cmd enregistrés ; ChordText n'affiche pas Cmd CommitKey :685-743 ; :200-216
Conflit à l'enregistrement CommitKey retire la même touche (mêmes modificateurs) des autres actions et des axes, et l'annonce :707-727
Persistance Saved\Config\Windows\LPKeyboard.ini ; à l'ouverture, ce fichier remplace toutes les liaisons de DefaultInput.ini ; créé avec les touches actuelles s'il manque :36-39, :531-539, :834-899
Valeurs d'origine Reset relit Config\DefaultInput.ini ligne à ligne :766-832
Groupes affichés Movement, Camera, Interaction, Menus, Favorites, Time, World, Save, Scene, Other GroupFor :154-197
Libellés anglais, en dur dans le C++ ActionLabel :80-111
Interact lu par le C++ du contrôle direct, avec modificateurs exacts LPDirectControlSubsystem.cpp:57, :159-166, :189-204
Touches en dur dans PC LeftShift, RightShift, LeftCtrl, RightCtrl, F12, PageDown, Y, N (ReactLead), LeftMouseButton, RightMouseButton KEY1-CART-01 § 12.2

3. Double déclenchement de C et E sous Ctrl (question de Big Boss)

  • E / Ctrl+E (établi) : Interact exige des modificateurs identiques (ModifiersMatch, LPDirectControlSubsystem.cpp:159-166). Sous Ctrl, E ne déclenche donc pas Interact ; Ctrl+E ne déclenche que CharacterMenu (lu par PC).
  • C / Ctrl+C (établi pour le code moteur, estimé pour l'effet en jeu) : dans l'entrée classique, un mappage sans Ctrl répond aussi quand Ctrl est enfoncé (PlayerInput.cpp:1041-1044 du moteur 5.8 : bCtrl == false || IsCtrlPressed()). Mais le moteur retire l'accord le moins précis quand un accord plus précis sur la même touche est trouvé dans la même passe (PlayerInput.cpp:1048-1060, FInputChord::GetRelationship → Masks). SwitchCamera (C) et CityMenu (Ctrl+C) sont tous deux lus dans PC (KEY1-CART-01 § 12.2) : Ctrl+C devrait donc déclencher CityMenu seul.
  • Reste à éprouver en jeu (VAL) : Ctrl+C ouvre la ville sans changer de caméra ; Ctrl+E ouvre la fiche sans interaction. Effet de bord connu et inchangé : Ctrl déclenche aussi ManualAnimating (LeftControl, RightControl, DefaultInput.ini:111-112) et SetBlockHotkey dans PC (KEY1-CART-01 § 12.2).
  • Si l'essai montre un double déclenchement : correctif dans PC (garde Branch sur Ctrl) par lp-mcp-bp, hors de cette SPEC.

4. K2 : liste des dispositions et bouton « Apply »

Interface. En tête du panneau, au-dessus de la liste : une liste déroulante (SComboBox<TSharedPtr<FString>>) avec « QWERTY » et « AZERTY », un bouton « Apply » et le texte de la disposition en cours (« Layout: QWERTY », « Layout: AZERTY » ou « Layout: custom »).

Préréglages exclusifs (CAM3-RECH-01 § 5.3 ; décisions 1 et 5). Le groupe de déplacement et la touche d'action dépendent de la disposition ; les autres actions suivent la lettre.

Liaison QWERTY AZERTY Décision
MoveForward +1 W Z décision 5
MoveForward −1 S S décision 5
MoveRight −1 A Q décision 5
MoveRight +1 D D décision 5
ActionPanel (§ 6) Q A décisions 5 (AZERTY) et 9 (QWERTY)
Interact E E décisions 1 et 5 (inchangé)

Une disposition n'a plus que ses 4 touches de déplacement : W et A en AZERTY, Z et Q en QWERTY, ne sont plus liées au déplacement (décision 5).

Apply :

  1. retire toutes les liaisons actuelles de MoveForward, MoveRight et ActionPanel ;
  2. pour chaque touche du préréglage, retire la même touche des autres actions et axes (même règle que CommitKey, :707-727), et l'annonce dans la ligne d'état ;
  3. ajoute les 5 liaisons du préréglage (4 de déplacement et ActionPanel), puis ApplyToPlayer() (:933-950), qui enregistre LPKeyboard.ini ;
  4. écrit la disposition choisie dans LPKeyboard.ini, section [LPKeyboard], clé Layout=QWERTY|AZERTY. Toute modification manuelle ultérieure du groupe de déplacement passe la clé à Layout=Custom.

Disposition au premier lancement et Reset (décision 12, Q10 tranchée) :

  • DefaultInput.ini porte le préréglage QWERTY : W, S, A, D pour le déplacement, ActionPanel = Q, Interact = E. Z (avancer) et Q (gauche) ne sont plus liés au déplacement par défaut.
  • Premier lancement (pas de LPKeyboard.ini) : les touches de DefaultInput.ini s'appliquent, Layout=QWERTY est écrit.
  • Reset : rend les touches de DefaultInput.ini, puis, si Layout=AZERTY est enregistré, réapplique le préréglage AZERTY ; Layout est gardé. Un joueur AZERTY reste donc en AZERTY après Reset ; tous les autres reviennent en QWERTY.
  • Joueurs ayant déjà un LPKeyboard.ini (migration Version=2, § 5) : leurs touches de déplacement ne sont pas changées ; ActionPanel est ajouté sur Q seulement si Q n'est lié à rien dans leur fichier, sinon il reste sans touche et la ligne d'état invite à choisir une disposition ; Layout=Custom est écrit.

Aucune détection de la langue du système (CAM3-RECH-01 § 5.2 : peu fiable).

5. Décommission du pavé, de Equals et de Hyphen

  • Config/DefaultInput.ini : retirer les 4 lignes :113 (SpeedUp NumPadSix), :114 (SpeedDown NumPadFour), :123 (SpeedUp Equals), :124 (SpeedDown Hyphen). Garder :115 (Add), :116 (Subtract), :142 (Favorite4 NumPadFour), :144 (Favorite6 NumPadSix).
  • Joueurs déjà équipés d'un LPKeyboard.ini : ce fichier remplace toutes les liaisons (:834-899), donc le retrait dans DefaultInput.ini ne les atteindrait pas (établi par lecture du code). Migration proposée dans LoadSaved :
    • clé [LPKeyboard] Version ; absente ou inférieure à 2 → retirer ces 4 liaisons exactes (action, touche, modificateurs tous faux) si elles sont présentes, puis écrire Version=2 ;
    • aucune autre liaison du joueur n'est touchée ; une ligne de journal LogLifePlay donne le nombre de liaisons retirées.

5b. Tilde de TestScenes et console du moteur (ajout du 2026-10-20)

  • Configuration (établi) : TestScenes est lié à Tilde (DefaultInput.ini:121) et à Insert (:122) ; Tilde et ² sont aussi des touches de la console (ConsoleKeys, :168-170).
  • Essais en jeu (établi, cités par Big Boss) :
    • COMMUN-14.16 : « ² affiche la console du moteur » ; sur AZERTY, la touche de Tilde ouvre la console et non la zone de scène ;
    • COMMUN-14.13 : Insert ouvre bien la zone de scène (PASS).
  • Lecture : la liaison Tilde de TestScenes ne sert à rien quand la console prend la touche, comme sur AZERTY. Sur une disposition où Tilde n'est pas prise par la console, elle peut déclencher les deux à la fois (estimé, non essayé). Dans les deux cas, elle ne suit pas la règle de la lettre : la touche Tilde (OEM_3) n'a pas le même caractère selon la disposition (KEY1-CART-01 § 6).
  • Proposé (Q8) :
    • retirer la ligne :121 (TestScenes Tilde) de DefaultInput.ini et garder Insert ;
    • ajouter cette liaison exacte à la migration Version=2 ;
    • ne pas toucher aux ConsoleKeys.
  • Preuve : en jeu, Insert ouvre la zone de scène ; Tilde et ² n'ouvrent que la console, sur QWERTY et sur AZERTY.

6. K3 et K4 : entrées « action » et « interaction »

  • K4 (interaction), décidé (décision 6) : une seule touche, l'action Interact existante (E, DefaultInput.ini:127), affichée dans le groupe « Interaction » (GroupFor :170-173) et remappable ; le C++ du contrôle direct la lit (LPDirectControlSubsystem.cpp:189-204) et l'interaction (s'asseoir, parler) dépend de la cible. Aucune action Sit ni Talk n'est ajoutée ; K4 se réduit à garder Interact visible et remappable dans le menu, dans le groupe « Interaction ».
  • K3 (action) et l'« entrée pour afficher le panneau d'action » de K6 sont lus ici comme une même action nouvelle, ActionPanel, qui ouvre le panneau d'action. Ce qui ouvre ce panneau aujourd'hui n'est pas connu : à lire par MCP (Blueprints UI/Action, UI/SexAction, PC, Person) avant l'IMPL (fiche KEY2-CART-02). Selon le résultat :
    • la fonction d'ouverture est appelable depuis le C++ (événement ou fonction d'un widget ou de PC) : le C++ lit ActionPanel comme InteractPressed et l'appelle ;
    • sinon, un nœud d'entrée ActionPanel est ajouté dans PC par lp-mcp-bp (instantané, fiche, BUILD-GO).
  • Valeur par défaut d'ActionPanel (révision 2) : A en AZERTY (décision 5), posée par le préréglage (§ 4) ; en QWERTY, Q (décision 9). Pour mémoire, lettres libres sans modificateur aujourd'hui : B, G, H, K, L, O, U, V, X (relevé sur DefaultInput.ini:95-164, sans compter Y et N, en dur dans PC).

7. K5 : capture de la souris et des combinaisons

  1. Boutons de souris : ajouter HandleMouseButtonDownEvent à FKeyboardProcessor. Pendant une capture, il appelle CommitKey avec le bouton et les modificateurs du FPointerEvent, puis consomme l'événement.
    • Clic gauche, décidé (décision 7) : le clic gauche seul est refusé pendant une capture, car le clic suivant sur l'interface serait pris pour la touche ; la ligne d'état le dit. Avec un modificateur (Shift, Ctrl, Alt, Cmd), il est accepté.
    • Boutons acceptés seuls : droit, milieu, Thumb1, Thumb2.
  2. Molette (MouseScrollUp, MouseScrollDown) : par HandleMouseWheelOrGestureEvent, pour les actions seulement ; les axes gardent MouseWheelAxis.
  3. Modificateur seul (par exemple LeftControl pour ManualAnimating, DefaultInput.ini:111-112) : aujourd'hui refusé (:506). Proposé : il est accepté au relâchement, si aucune autre touche n'a été pressée pendant l'appui.
  4. Combinaisons : Shift, Ctrl, Alt et Cmd + une touche, déjà gérées ; ajouter Cmd à ChordText (:200-216). Deux touches ordinaires ensemble (par exemple A+B) : non gérées par l'entrée classique, hors périmètre.
  5. Touches réservées : les touches lues en dur par PC (§ 2 : Shift, Ctrl, F12, PageDown, Y, N, clic gauche, clic droit) sont acceptées, mais la ligne d'état avertit (« also used by the game: … »). Elles ne sont pas refusées, car ManualAnimating utilise déjà RightMouseButton et Ctrl.

8. K6 : section de scène du menu des contrôles

Section « Scene », dans cet ordre :

  1. Bloc caméra : LeftRight, DownUp, ScrollDownUp, RotateCamera, SwitchCamera, aujourd'hui groupe « Camera » (GroupFor :162-167). Ajout de la décision 8 : CameraHeight (§ 8b).
  2. Bloc du déplacement des personnages (décision 8, détail au § 8b) : option du glisser au clic gauche, CoupleMoveY, et les liaisons de scène existantes (ManualAnimating, axe de rotation :193).
  3. Entrée du panneau d'action : ActionPanel (§ 6).

Implémentation : la section se dessine en sous-titres dans Rebuild (:307-470), à partir d'un ordre de groupes étendu (FBindGroup.Order).

Règle du doc 27 (Docs\27_Plan_Migration_UE58.md:70 : rien de sexuel sur le dépôt public ; doc 37 l. 196-197) :

  • le libellé adulte de la section ne s'écrit ni dans cette fiche, ni dans le C++ du dépôt public ;
  • décidé (décision 10) : libellé neutre « Scene » seul pour la build 1. Proposition d'origine, écartée pour le moment : libellé adulte lu à l'exécution depuis une donnée privée (addon ou Content), si l'utilisateur le veut (Q6).

Le code public contient déjà le nom technique de l'axe (LPKeyboardSubsystem.cpp:141, :193) : signalé, non traité ici.

8b. Déplacement des personnages, hauteur de la vue, couple sur Y (décision 8)

État du code (établi, sauf mention)

Fonction Où Commande actuelle Source
Glisser le couple pour le déplacer C++, ULPCameraModeSubsystem::TickCoupleMouse clic gauche tenu et glissé sur le couple (sol ou lit), seuil de 5 px LPCameraModeSubsystem.cpp:140, :1202, :1438-1458 ; aide affichée :2048
Tourner le couple même fonction clic droit glissé :1442, :2049
Déplacer le couple au clavier Blueprint (Room, « B2p-R », non lu) flèches, axes LeftRight et DownUp aide :2050, :2056 ; en scène, le C++ ne lit les flèches que pour le journal (:1241-1250)
Monter et baisser le couple Blueprint (Room, B2p-R) molette commentaire :2039-2041, aide :2050
Caméra de scène : orbite, avancer, reculer C++ axes MoveForward et MoveRight (ZQSD ou WASD) :1186-1222
Clic gauche PC (K2Node_InputKey_14), en dur branches vers LeftMouseInput, OpenLeftMouse, CheckMouseForUI KEY1-CART-01 § 12.2

Les flèches déplacent donc déjà le couple en scène, d'après l'aide du jeu (:2050). Ce que le Blueprint fait exactement (repère de la caméra ou du monde, axes X et Y) est à lire.

Ce que la SPEC ajoute (proposé)

  1. Option « Move couple with » dans la section de scène du panneau :
    • valeurs Mouse and arrows (défaut, comportement actuel) ou Arrows only ;
    • clé [LPKeyboard] CoupleDrag=Mouse|Keys dans LPKeyboard.ini ;
    • avec Keys, TickCoupleMouse ignore le glisser au clic gauche ; le glisser au clic droit (tourner) reste, sauf avis contraire (Q11).
    • Limite : le clic gauche reste lu en dur par PC (K2Node_InputKey_14). Pour « réaffecter le clic gauche sur une autre fonction », il faut que ces branches de PC laissent passer le clic pendant une scène. Sinon, une liaison du joueur sur le clic gauche se déclenchera en plus du code de PC. Lecture MCP d'abord (KEY2-CART-02), puis correctif par lp-mcp-bp s'il le faut.
  2. CameraHeight (axe, groupe Camera, section de scène) : monte (+1) ou baisse (−1) la caméra de scène. Le C++ le lit à côté de l'orbite (:1186-1222) ; borne et vitesse à fixer à l'essai.
  3. CoupleMoveY (axe, bloc du déplacement des personnages) : repositionne le couple sur l'axe Y.
    • Lecture proposée : Y du repère du couple (sa gauche et sa droite), car Y du monde dépend de l'orientation de la pièce (Q12).
    • Le consommateur dépend de B2p-R : le C++ si la position du couple s'écrit depuis le C++, sinon Room, par lp-mcp-bp. À lire avant l'IMPL.
  4. ActionPanel garde l'ouverture du panneau d'action (décision 8 d) et reste remappable (§ 6).

Touches par défaut proposées (règle de la lettre)

Les axes de l'entrée classique n'ont pas de modificateurs (FInputAxisKeyMapping : une touche et une échelle). Une lettre qui sert avec Ctrl ailleurs (C, E, F, M, T) répondrait donc aussi sous Ctrl : elle est écartée. Les flèches et la molette sont déjà prises en scène (tableau ci-dessus).

Action + − Pourquoi
CameraHeight G B libres (DefaultInput.ini:95-164) ; même colonne, G au-dessus de B ; même place en AZERTY et en QWERTY (estimé)
CoupleMoveY V X libres ; rangée du bas, de part et d'autre de C (SwitchCamera) ; même place dans les deux dispositions (estimé)

Conflits vérifiés contre l'état visé (préréglages du § 4, décisions 1 à 7) :

  • G, B, V et X ne sont liées à rien ;
  • A (action en AZERTY), Q (action en QWERTY, Q9), E (Interact) et le déplacement (Z Q S D ou W A S D) ne sont pas touchés.

Non vérifié : qu'aucun nœud de touche en dur ne lit ces lettres hors de PC et des 20 Blueprints lus par KEY1 (KEY1-CART-01 § 12.1, avec sa limite).

Lecture MCP exigée avant l'IMPL (ajouts à KEY2-CART-02)

  1. PC : sous-graphe de K2Node_InputKey_14 (clic gauche) pendant une scène : LeftMouseInput, OpenLeftMouse, CheckMouseForUI.
  2. Room : le code B2p-R (flèches et molette vers la position du couple) : repère, axe Y, variable de position, point d'entrée appelable depuis le C++.
  3. Panneau : celui qu'ouvre « Alt ou clic du milieu bref » (aide :2051-2052) est-il le « panneau d'action » de K3 et K6, ou un panneau d'aide distinct ?

8c. Résultats de KEY2-CART-02 (établi, KEY2-CART-02.md § 2 à § 5 et § 10)

  1. K3, panneau d'action :
    • en scène, le panneau d'action est UI/SexAction, basculé par l'événement PC.LeftMouseSexOn (sans paramètre) ; le C++ l'appelle déjà sur un appui bref d'Alt ou du bouton du milieu (LPCameraModeSubsystem.cpp:1265-1300). ActionPanel (A en AZERTY, Q en QWERTY) appelle le même événement, par le même ProcessEvent, seulement pendant une scène et hors menu. Aucune modification de Blueprint.
    • Hors scène, UI/Action s'ouvre au clic gauche sur le monde (StreetMap_Static.ActualLeftMouseInput). Aucun point d'entrée clavier : ActionPanel n'agit pas hors scène en build 1.
  2. Clic gauche en scène : quand GI.SexOn est vrai, PC ne fait rien du clic gauche (IfThenElse_15, broche vraie non reliée). Seul le C++ (TickCoupleMouse) s'en sert, pour glisser le couple. L'option Arrows only libère donc le clic gauche en scène sans modifier PC.
  3. Flèches et molette en scène : lues dans PC (K2Node_InputAxisEvent_3, _4, _7), pas dans Room.
    • DownUp et la molette déplacent le couple sur X du monde, de 5 par unité d'axe (SetActorLocation, X borné à [-3131470, 0]).
    • LeftRight le fait tourner (CircleSexPersons).
    • Il n'existe aucun déplacement en Y, ni de hauteur de la caméra liée à une touche.
  4. CoupleMoveY : ajouté en C++, sur Y du monde par défaut (décision 14 : même règle que le X de PC, pas de 5, appliqué à chaque acteur de GI.SexPersons, seulement quand Room.bHidden est vrai et hors menu). Le repère est une constante unique (CoupleMoveSpace : monde ou couple) ; Q12 part à l'utilisateur.
  5. CameraHeight : ajouté en C++ ; il agit sur la caméra de scène (SceneCamera), en bornes à fixer à l'essai. Room borne déjà C2Height à [-40, 150] pour ses propres commandes (KEY2-CART-02.md § 5) : la même borne est proposée.
  6. Fichier partagé : LPCameraModeSubsystem.cpp est modifié et non commité par CAM2 (git status). L'IMPL de KEY2 y ajoute CameraHeight, CoupleMoveY, l'option CoupleDrag et l'appel d'ActionPanel : gel ou ordre à fixer par Big Boss avant l'IMPL (boss.md § 6).

9. Fichiers touchés par l'IMPL (prévision)

Fichier Changement Copie UE
Source/LifePlay/LPKeyboardSubsystem.h / .cpp K2 (liste, Apply, Layout), migration Version=2, K5 (souris, molette, modificateur seul, Cmd, avertissement), K6 (sections), libellé d'ActionPanel non pour l'écriture ; compilation : jeton
Config/DefaultInput.ini retrait des l. 113, 114, 123, 124 et 121 ; retrait de Z (MoveForward) et Q (MoveRight −1) ; ajout d'ActionPanel = Q, de CameraHeight (G / B) et de CoupleMoveY (V / X) non (sous instantané)
Consommateur d'ActionPanel (C++ ou PC) selon KEY2-CART-02 lecture MCP, puis éventuellement lp-mcp-bp

10. Preuves exigées (VAL de KEY2)

  1. Build LifePlayEditor et Development à code 0, aucun avertissement nouveau (Tools\Build.ps1, lp-validate).
  2. Migration : sur une copie de LPKeyboard.ini contenant les 4 liaisons retirées, elles disparaissent après la première ouverture, Version=2 est écrit et le journal donne le compte ; les autres liaisons sont intactes (diff avant / après).
  3. Apply QWERTY puis AZERTY : le diff de LPKeyboard.ini montre exactement les 5 liaisons du préréglage changées.
    • En AZERTY : Z, Q, S et D déplacent ; W n'agit plus ; A ouvre le panneau d'action ; E interagit.
    • En QWERTY : W, A, S et D déplacent ; Z n'agit plus ; Q ouvre le panneau d'action.
  4. En jeu : Ctrl+C ouvre la ville sans changer de caméra ; Ctrl+E ouvre la fiche sans interaction ; Add et Subtract changent la vitesse, le pavé 4 et 6 n'agit que sur les favoris.
  5. K5 : clic droit, bouton du milieu, Ctrl+clic gauche, molette et Ctrl seul s'enregistrent et agissent ; le clic gauche seul est refusé avec un message.
  6. K6 : la section s'affiche dans l'ordre du § 8 ; aucun libellé adulte dans le C++ du dépôt public (grep).
  7. Aucun Accessed None nouveau ; premier lancement sans LPKeyboard.ini : QWERTY, Q ouvre le panneau d'action en scène ; Reset rend QWERTY, ou AZERTY si le joueur l'a choisi.

11. Questions ouvertes (pour l'utilisateur, par Big Boss)

  1. Q1, préréglages exclusifs : tranchée (décision 5) : exclusifs, AZERTY = Z Q S D, QWERTY = W A S D.
  2. Q2, K4 : tranchée (décision 6) : une seule touche Interact (E).
  3. Q3, K3 : tranchée pour AZERTY (décision 5) : ActionPanel = A en AZERTY. Le cas QWERTY passe en Q9.
  4. Q4, K5 : tranchée (décision 7) : le clic gauche seul est refusé, il n'est accepté qu'avec un modificateur.
  5. Q5, K6 : tranchée (décision 8) : voir § 8b.
  6. Q6, doc 27 : tranchée (décision 10) : libellé neutre « Scene » seul, pour le moment.
  7. Q7, Y / N : tranchée (décision 11) : en dur en build 1 ; remappage en build 2.
  8. Q8, Tilde de TestScenes : tranchée (décision 13) : Tilde retiré, Insert seul, migration.
  9. Q9, touche d'action en QWERTY : tranchée (décision 9) : Q.
  10. Q10, disposition par défaut : tranchée (décision 12) : QWERTY en premier ; Reset garde le choix AZERTY du joueur (§ 4).
  11. Q11 : tranchée (décision 13) : en « Arrows only », le clic droit garde la rotation du couple.
  12. Q12 : tranchée (décision 15) : Y du monde ; G / B et V / X.

12. Suite proposée

  1. Réponses Q1 à Q7.
  2. KEY2-CART-02 (lecture MCP, lp-mcp) : ouverture du panneau d'action ; gardes Branch de CityMenu et de CharacterMenu dans PC (effet de SetBlockHotkey). Ajouts de la révision 4 : § 8b, points 1 à 3.
  3. KEY2-IMPL-01 (lp-impl, C++ hors copie UE) : § 4, 5, 7, 8 ; puis K3 après CART-02.
  4. BUILD et VAL (jeton) : § 10.

Fichiers écrits : ce livrable et KEY2-TACHES.md. À commiter : A Docs/Migration/etat/REL/KEY2/KEY2-SPEC-01.md, A Docs/Migration/etat/REL/KEY2/KEY2-TACHES.md. Journal : sans objet (aucun fichier hors etat\ modifié).