261 lines
29 KiB
Markdown
261 lines
29 KiB
Markdown
|
|
# 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é).
|