Session debug fusil : équipement, visée, main gauche, MetaHuman

- B équipe Arme 1 sans présélection (ToggleQuickEquip) ; suppression du
  Debug Key B du Mover qui faisait tourner Weapon/isArmed.
- Overlay AST : BP_GameInstance implémente BPI_ASTGI (DA_QuickSetupSettings
  restauré avec ses poses), IA_Aim appelle BPC_StateManager::SetInputAim,
  OverlayGraph lit l'état d'overlay du StateManager à l'init.
- Main gauche : os virtuels hand_r/ik_hand_l ajoutés au squelette, socket
  Rifle recalé sur le socket SMG d'AST, IK main gauche sur le VB avec offset
  vers le haut du garde-main.
- MetaHuman : goals mains + LimbSolvers dans IK_MetaHuman_test, mains calées
  sur le mannequin (BlendToSource) et doigts en OneToOne + pose alignée dans
  RTG_UEFN_to_MetaHuman_test.
- ANS_WeaponTransformCorrection : garde IsValid (plus d'Accessed None sans
  l'inventaire AST).
- Stuff de test : Initial Items (fusil, chargeur, 60 munitions) sur
  Inventory_Player du Mover.
- Ajout du portage AST jamais commité (StateManager, ASTShared, Cover,
  Interaction, L_ASTCoverTest) ; ~1300 anims UEFN ré-enregistrées par
  l'ajout des os virtuels.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
DodoandClaude Opus 5.5 committed 2026-10-31 14:58:26 +01:00
1 parent d19df0a428
commit acaf1e564d
1919 files changed
+4414 -2737

No files matched your search

+30
View File
@@ -459,6 +459,36 @@ Ce qui ne marchait PAS et a été corrigé :
Vérifié en PIE, dans cet ordre : ramassage du fusil → dos ; V+B → main + `Weapon = Riffle`, `Weapon_Equip = Riffle`, `isArmed = true` côté pion ET côté ABP ; locomotion désarmée propre avec le fusil en main (pas de T-pose) ; arc → `PSD_Dense_Stand_Bow_Idles` → `StandingIdle01_UE_Anim3` ; arc + clic droit → `Want Toshot = true` → `PSD_Dense_Stand_Bow_Aim_Idles` ; arc en course → repli propre sur `PSD_Dense_Stand_Run_Loops` ; clic gauche → `EventPrimaryUse` du fusil (qui refuse de tirer faute de chargeur équipé — comportement normal, non lié au Mover) ; non-régression prone (`PSD_Dense_Prone_Idles`) et nage (`PSD_SwimmingMoving`).
**Correctif 2026-10-31 — « je ramasse le fusil mais B ne l'équipe pas »** :
- `Inventory_Player::ToggleQuickEquip` (touche **B**) n'équipait que le slot choisi au préalable avec **V** (`WB_QuickSelect` fait `CycleQuickSlot` à chaque ouverture, donc chaque appui sur V avance d'un slot). Sans sélection (`SelectedQuickSlot = 0`), B affichait « Aucun item selectionne ». Désormais, slot 0 → `SelectQuickSlot(1)` (Arme 1) puis le chemin normal `GetQuickSlotItemInfo` → `SwitchWeaponByUID`. V reste le moyen de choisir un autre slot.
- Supprimé de `SandboxCharacter_Mover` l'événement **`Debug Key B`** (20 nœuds) : il faisait tourner `Weapon` (Riffle → Pistoll → Bow → None) et écrivait `isArmed` à chaque appui sur B, en concurrence directe avec l'équipement.
- Vérifié en PIE : E (dos, `SpineRifle`) → B (main, `Weapon_Equip = Riffle`, `isArmed = true`) → B (rangé) → B (ressorti).
**Correctif 2026-10-31 — fusil tenu à une main, bras ballant, aucune pose de visée** :
- L'overlay AST (`OverlayGraph`, états `SMG Relaxed / Combat / Aim`…) tire ses poses de `BPFL_AST::GetOverlayAnimSet`, qui interroge le **GameInstance** via l'interface `BPI_ASTGI`. Aucune classe du projet ne l'implémentait → `overlay Anim Set` vide → overlay neutre, quel que soit l'`OverlayState`. Conséquence en cascade : au rangement du 2026-10-30, `DA_QuickSetupSettings` et presque toutes les poses de `Poses/OverlayPoses/` semblaient orphelins et avaient été supprimés.
- Restaurés (sauvegarde `ProjectFv1_backup_reorg_2026-10-30`, struct depuis `ProjectFv1_backup_ast_port_2026-09-27`) : `StateManager/QuickSetup/DA_QuickSetupSettings`, `Blueprints/Data/PDA_QuickSetupSettings`, `Blueprints/Structs/S_QuickSetupVariables`, les poses `OverlayPoses/{Default,DefaultMelee,Submachinegun,Handgun,SniperRifle,Bullpup,Longshotgun}Poses`, et 14 montages `Character/Animations/Melee/*_Montage` référencés par le DA. ⚠️ Ces montages de mêlée sont **incomplets** (anims, sons et notifies AST Melee jamais portés) : à ne pas jouer tant que la mêlée n'est pas portée.
- `BP_GameInstance` implémente `BPI_ASTGI` : variable `QuickSetupSettings` (= `DA_QuickSetupSettings`) et `Get Overlay Animset` renvoie `QuickSetupVariables.OverlayAnimationSet`. Les trois autres fonctions de l'interface (mêlée, parkour, effets) restent vides.
- `SandboxCharacter_Mover`, graphe `CameraCh`, `IA_Aim` : `Triggered` → `BPC_StateManager::SetInputAim(ActionValue AND isArmed)`, `Completed` → `SetInputAim(false)`. C'est ce qui passe `RotationState` à `Aim` et fait entrer l'overlay dans l'état `… Aim`. Au relâchement, AST remet `DefaultRotationState` (= `Strafe`), pas `Orient`.
- Vérifié en PIE : équipé → les deux mains tiennent le fusil (pose SMG relâchée) ; clic droit maintenu → fusil épaulé, pointé devant.
**Correctif 2026-10-31 — main gauche à côté du fusil en visée** :
- `WeaponIKGraph` pose les mains par `TwoBoneIK` vers des os virtuels AST (`VB RHS_ik_hand_l`, `VB LHS_ik_hand_r`) absents de notre squelette → IK sans effet. Ajoutés à `SK_UEFN_Mannequin` sous les noms `VB hand_r_ik_hand_l` / `VB hand_l_ik_hand_r` (Python ne peut pas les renommer) et `TwoBoneIK_2` (main droite) repointé dessus.
- **Comment AST tient une arme** (lu dans `E:\AST_V1_17`) : même squelette `SK_UEFN_Mannequin` que nous (`RHS`/`LHS` ne sont pas des os, juste des os virtuels renommés `hand_r→ik_hand_l` etc.). L'arme s'attache à un **socket par famille sur `hand_r`** (`SMG`, `Shotgun`, `Shotgun1`, `Pistol`, `PistolL`), et la main gauche vient **uniquement de l'animation** (`ik_hand_l` relatif à `hand_r`) : le socket `OffHandIK` des armes AST et `BPI_Firearm::GetLeftHandIKBone` ne sont appelés nulle part. Vérifié : l'`OffHandIK` de `SKM_SMG` tenue au socket `SMG` tombe à 2 cm du `ik_hand_l` de `SMG_Aim_Pose`.
- **Socket `Rifle` recalé sur le socket AST `SMG`** (2026-10-31) : orientation = celle de la SMG AST (canon de `SKM_SMG` sur +Y, du nôtre sur +X → lacet de 90°), position choisie pour garder notre point de prise main droite. Nouveau : loc (-21.90, 11.28, 4.74), rot (P -4.60, Y 158.94, R 0.98) ; ancien : loc (-24.56, 3.89, 3.31), rot (P -7.83, Y 177.40, R 0). L'ancien socket faisait pointer le canon ~20° à côté de la direction de visée des poses AST.
- **Main gauche** (`TwoBoneIK_0` et `_5`) : cible `VB hand_r_ik_hand_l` (orientation de prise de l'anim, `Take Rotation From Effector Space`) + offset en espace os (1.25, -4.96, -4.88), qui met le poignet au point (11, -6, 7) de `SM_RifleAdvanced` = bord supérieur gauche du garde-main. La pose AST est une prise par-dessus (dos de la main en haut, doigts sur le flanc) : un poignet à mi-hauteur laissait la main pendre sous le garde-main. Mesuré : 0 cm en visée, 0,9 cm en pose relâchée. ⚠️ Calé sur ce fusil ; une autre arme demandera son socket et son offset. Ne pas cibler `hand_r` + offset (la main hérite de l'orientation de la main droite). Le socket `LH_IK` du mesh, lui, n'est utilisé par rien.
- `ANS_WeaponTransformCorrection` (notify des montages d'équipement AST) ramène l'arme de l'**inventaire AST** (composant tagué `InventorySystem`) vers une transform relative nulle. Notre pion utilise AGIS → arme `None` → ~940 « Accessed None » par session. Ajout d'un `IsValid` sur `Weapon` avant `SetActorRelativeTransform` : no-op chez nous (AGIS attache déjà le fusil pile sur le socket), inchangé si un inventaire AST est présent. Vérifié : 0 erreur Blueprint sur équiper/ranger/rééquiper/viser.
- Restant : `OverlayGraph`, `OverrideOverlayLayer`, `BoneTrackPoint`, `InteractionControlRig`, `WeaponCollisionControlRig` référencent encore les noms d'os virtuels AST ; pas de socket AST pour pistolet/fusil à pompe tant qu'on n'a qu'un fusil.
**Correctif 2026-10-31 — mains et doigts du MetaHuman (ce qu'on voit vraiment)** : le MetaHuman visible n'est qu'une copie par retarget du mannequin caché, qui porte l'arme et l'IK (voir §4.2.4). Trois défauts dans `Systems/Mover/VisualOverrides/` :
- `IK_MetaHuman_test` n'avait **aucun goal ni solveur** (les chaînes `LeftArm`/`RightArm` pointaient vers des goals `LeftHandIK`/`RightHandIK` inexistants) → l'op « Retarget IK Goals » ne faisait rien et les mains du MetaHuman tombaient ~17 cm à côté de celles du mannequin (bras plus longs, épaules plus hautes). Ajoutés : goals `LeftHandIK` (`hand_l`) et `RightHandIK` (`hand_r`) + un `IKRigLimbSolver` par bras (racine `upperarm_l`/`_r`). Pieds non touchés (toujours FK).
- `RTG_UEFN_to_MetaHuman_test`, op « Retarget IK Goals » : `LeftArm`/`RightArm` en `BlendToSource = 1` (rotation laissée à 0 : la rotation brute du mannequin n'apporte rien et ignore les écarts de pose de référence) → mains du MetaHuman exactement sur celles du mannequin (écart mesuré < 0,1 cm), donc sur l'arme. `ABP_GenericRetarget` peut encore moduler ce réglage avec les courbes `Retarget_Hand_L/R_BlendToSource` (Lerp vers 1, donc sans effet ici).
- Doigts : chaînes doigts + métacarpes de l'op « FK Chains » en `OneToOne`, et **pose de retarget du MetaHuman auto-alignée (`ChainToChain`) sur les 30 os de doigts**. Avant, la flexion des doigts de l'anim se perdait (index 2° au lieu de 24°) parce que les poses de référence des deux squelettes ne concordaient pas.
- Vérifié en PIE : en visée, doigts gauches et droits fléchis comme sur le mannequin ; au repos, bras et mains naturels.
**Correctif 2026-10-31 — état d'overlay écrasé à l'initialisation** : `OverlayGraph::BlueprintInitializeAnimation` réécrivait `Overlay State` avec `GetStartWeaponOverlayState` du composant d'inventaire AST, que notre pion n'a pas → `None` à chaque init. Il lit désormais `StateManager` (cast en `StateActorComponent`) → `GetOverlayState`.
**Équipement de départ (test)** : `Inventory_Player` du `SandboxCharacter_Mover` a `Initial Items` = `Rifle` ×1, `Magazine` ×1, `Ammo1` ×60 → au spawn, fusil sur le dos (`SpineRifle`), **B** pour le prendre en main. Piège AGIS : les `Items` posés dans les conteneurs d'un `InventoryData` (DataAsset) **ne sont pas chargés** ; seul `Initial Items` passe par `LoadSubItem` (graphe `INITIALIZATION` de `Inventory__Main`), comme le casque de `BP_Deadman`. À vider avant une build de jeu.
Restant à faire :
- Aucune base Motion Matching armée pour le fusil / le pistolet (seul l'arc en a) ; `PSD_Crouch_Bow` existe mais n'est référencée par aucune ligne de chooser.
- `SandboxCharacter_Mover` a désormais un `AC_Stats` et ses capsules de hitbox (voir « Hitboxes calées sur le MetaHuman » en §4.2.4) ; il lui manque encore le `PerceptionStimuliSource` du CMC.