LifePlay-Revival/Docs/Migration/etat/sandbox/S5/S5-VAL.md

74 lines
6.5 KiB
Markdown
Raw Normal View History

# S5-VAL — Validation du lot S5 (`LPCoupleSim` partagé jeu ↔ addon)
- **Date :** 2026-10-06
- **Fiche :** S5-T3 | **Rôle :** A-VAL
- **Modèle prévu :** `claude-sonnet-5-5-high` | **Modèle utilisé :** `claude-sonnet-5-5-high`
- **Pin addon :** `c1fdd29e2c1036c7d6365ba6389eff5d2f8c8c96` (`HEAD` = `origin/main` de `D:\Game\LifePlay-Sandbox`, arbre propre ; `S5-T2`)
- **Références :** `S5-CART.md` (S5-T1), `S5-IMPL-H.md` (S5-T2), `S4-VAL.md`
## Verdict : **PASS** (PASS runtime Pair, PASS-STATIC ShowCouple)
| # | Contrôle | Résultat |
|---|---|---|
| 1 | Bat Pair depuis le jeu (~45 s demandées, session laissée ~90 s) : plugin monté, GameMode Pair | **PASS** |
| 2 | `LogLPSandbox` : chemin `FitCoupleBox` (maintenant `LPCoupleSim`) exécuté, pas de crash couple box | **PASS** |
| 3 | Aucun `Fatal`, assertion, `ensure`, `Access violation`, aucun nouveau dossier `Saved/Crashes` | **PASS** |
| 4 | `LifePlayEditor Win64 Development` à jour (`Target is up to date`), DLL postérieures aux sources S5 | **PASS** |
| 5 | `LPShowCoupleSubsystem` : compile + branché sur `LPCoupleSim` (34 références), copies locales supprimées | **PASS-STATIC** |
| 6 | Parcours show en jeu (sélection du couple, `Engage` → `KeepTogether` → `Release`) | **non exercé** (voir §4) |
| 7 | Processus tué après essai | **PASS** |
## 1. Runtime : bat Pair (jeu)
Équivalent du bat `Tools/debug/LifePlay_pair_sandbox.bat` (même URL `game=/Script/LPSandbox.LPPairSandboxGameMode`, `Saved/sandbox_mode.txt` = `Pair`), lancé à 20:42:10. Le processus a répondu à partir de ~20:43:07 (initialisation de la carte ~50 s), puis a été laissé jusqu'à ~20:43:50 avant d'être arrêté. Journal copié : `Saved/Logs/S5-VAL-runtime-game.log` (source `LifePlay.log`, 1 709 lignes ; copie locale non versionnée).
Binaires utilisés : `UnrealEditor-LPAnimMeasure.dll` 20:36:29, `UnrealEditor-LPSandbox.dll` 20:36:36, `UnrealEditor-LifePlay.dll` 20:37:15, tous postérieurs aux sources S5 (`LPCoupleSim.h` 20:28, `LPCoupleSimCore.cpp` 20:32, `LPShowCoupleSubsystem.cpp` 20:35). L'essai a donc bien exercé le code S5-T2.
| Constat | Journal |
|---|---|
| Plugin monté | `LogPluginManager: Mounting External plugin LPSandbox` |
| GameMode résolu | `LogLoad: Game class is 'LPPairSandboxGameMode'` |
| Initialisation sandbox | 16 lignes `LogLPSandbox` : mur ×4, collision (54 meubles, 0 absent), éclairage, interaction (286 actions), Quaternius 43 anims, corps `bridget_gp` / `michael`, boîte, pose |
| **Boîte du couple** | `Sandbox boite AgMakeout : centre X=20.831 Y=1.400 Z=-0.534, etendue X=41.180 Y=50.958 Z=89.466` |
| Poses | `AgMakeout_F` sur Bridget, `AgMakeout_M` sur Michael, puis `B_/M_Idle_Loop` |
| Suite de session | séquence automatique de mesure (9 caméras, `AUTO arret`), sans erreur ; session restée active (`Responding = True`) jusqu'à l'arrêt manuel |
| Erreurs module / lien / GameMode | 0 |
| `: Error:` hors lot | 1 × `LogLifePlay: Error: Coiffures : GI.HairstyleTable ou GI.MorphableHairs introuvable` (déjà connu, S3-VAL / S4-VAL) |
**Lecture de la boîte.** La ligne `Sandbox boite` est produite par le chemin refactoré (`MeshToActor` → `AccumulateAnimBounds` → `FitFromAnimBounds` → `EnsureBox` → `ApplyBoxFit`). Fond de boîte : `Center.Z - Extent.Z = -0.534 - 89.466 = -90.000`, soit exactement `18 - PlayerSpot.Z` (= −90) : l'écart de plancher sandbox / jeu de 2 cm (jeu = −88), **conservé volontairement** par S5-T2 (§4 de `S5-IMPL-H.md`), est donc inchangé. Pas de NaN, pas de rejet (`bValid`), extension sous le plafond de 800 cm.
Limite de la comparaison avant / après : aucune capture antérieure de cette paire (`AgMakeout`) n'a été archivée ; le contrôle de parité numérique stricte (écart attendu : aucun) n'est pas fait. Le fond à −90,000 cm et des valeurs plausibles pour une paire debout sont la seule preuve de parité disponible ici.
## 2. Compilation
```powershell
& 'D:\Game\Launcher\Engine\UE_5.5\Engine\Build\BatchFiles\Build.bat' LifePlayEditor Win64 Development `
-Project='D:\Game\LifePlay-master 5.5\LifePlay.uproject' -WaitMutex
```
Résultat : `Target is up to date` (journal `Saved/Logs/S5-VAL-build.log`). La compilation effective des deux cibles (`LPSandboxEditor` non-unity, `LifePlayEditor` unity, 0 erreur / 0 avertissement) est documentée par `S5-IMPL-H.md` §6 ; cette fiche confirme qu'aucune source n'a changé depuis (DLL postérieures).
## 3. ShowCouple : PASS-STATIC
| Contrôle | Résultat |
|---|---|
| `LPShowCoupleSubsystem.cpp` référence `LPCoupleSim` / `ResolveCoupleMove` / `EnsureBox` | 34 occurrences |
| `AddPose`, `FSavedMove` imbriquée, `SweepMultiByChannel` dans le jeu | 0 (supprimés) |
| Algorithme de balayage / échantillonnage de pose dans l'addon | une seule implémentation : `LPCoupleSimCore.cpp` (+ déclarations de `LPCoupleSim.h`) ; plus de copie dans `LPSandbox/LPCoupleSim.cpp` |
| Dépendances `.Build.cs` | inchangées (`LifePlay` → `LPAnimMeasure` déjà public) |
| Le module `LifePlay` (qui contient le sous-système) charge au runtime Pair | oui (DLL du 20:37 chargée, aucun `LogModuleManager` en erreur) |
## 4. Limites et décision PASS-STATIC
- **Pas de parcours show automatique.** `LPShowCoupleSubsystem` ne s'active qu'avec un vrai couple en scène (GI, `Room`, `SexPersons`, `AP1/AP2`, clips du dossier `/Game/Heavy/New2/Daily/...`), donc depuis une sauvegarde et un Blueprint de scène ; le bat Pair utilise `GameInstance` brut (`-ini:...GameInstanceClass=/Script/Engine.GameInstance`) et ne l'exerce pas. Aucune ligne `Show couple` dans le journal Pair.
- **Conséquence :** `Engage` / `KeepTogether` / `Release` du jeu, la dépénétration, les lits (`IsBedMesh`), la coque `Wall*` et la diffusion `OnIgnoredShell` ne sont validés que par compilation et relecture (PASS-STATIC), pas par exécution.
- `LPPairCollisionTest` (commandlet de l'éditeur) **non relancé** dans cette fiche (hors consigne VAL ; recommandé en S5-T5 / S7 si disponible dans le module éditeur).
- Contrôle visuel non fait ; le mode Interaction n'est pas exercé.
- Alignement du plancher (−90 → −88) : **non décidé** ; reste à trancher par une capture avant / après sur une scène du jeu.
## 5. Reste ouvert
1. Un essai de show complet en jeu (nouvelle partie ou sauvegarde, scène à deux, comparer `Show couple : boite ...` avant / après `c1fdd29`).
2. Mise sous suivi git de `LPShowCoupleSubsystem.{h,cpp}` dans le repo jeu (non suivis, cf. `S5-IMPL-H.md`).
3. Tests unitaires du niveau pur (`MeshToActor`, `FitFromAnimBounds`, `FitFromLiveBounds`, `SlideWish`).