LifePlay-Revival/Docs/Migration/etat/sandbox/DC0/DC0-CART.md
edujiro5972 19e704b02c DC0 : plan du decouplage jeu / sandbox, cartographie et SPEC approuvees (CHG-233)
Plan 24_Plan_Decouplage_Sandbox.md (lots DC0 a DC4) : plugin LPAnimCore dans le jeu,
module editeur LPModTools et tout l'outillage de mods dans l'addon (prive).
Documentation seule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 16:14:39 +02:00

9.3 KiB
Raw Blame History

DC0-CART — Cartographie du découplage jeu / sandbox

  • Fiche : DC0-T1 (A-CART) — Modèle : (a) M1 haiku | haiku ; (b) M3 opus | opus (session principale)
  • Date : 2026-10-07 — Plan : Docs/Migration/24_Plan_Decouplage_Sandbox.md
  • États de départ : jeu main = fba19bc (+ modifications non commitées) ; addon lot/SB4-final = 4795ea2 (pin 16905c6).

(b) Dépendances (M3)

b1. Graphe d'inclusion de LPAnimMeasure (addon)

Fichier Inclut (LP) Destination
LPAnimRedirect.h/.cpp — (moteur seul : ConfigCacheIni, Paths) LPAnimCore (jeu)
LPCoupleSim.h + LPCoupleSimCore.cpp — (moteur seul) LPAnimCore (jeu)
LPAnimMeasure.h/.cpp — ; déclare LogLPAnimMeasure reste (addon)
LPPoseMeasure.h/.cpp LPAnimMeasure.h, LPSkeletonProfile.h reste
LPPoseOrchestrator.h/.cpp LPPoseMeasure.h, LPAnimRedirect.h, LPAnimMeasure.h reste → dépend de LPAnimCore
LPSkeletonProfile.h/.cpp LPAnimMeasure.h reste
  • LPAnimRedirect.cpp et LPCoupleSimCore.cpp n'écrivent pas dans LogLPAnimMeasure : aucune catégorie de journal à déplacer.
  • Macro d'export : LPANIMMEASURE_API (45 occurrences, 6 en-têtes). Celles de LPAnimRedirect.h et LPCoupleSim.h deviennent LPANIMCORE_API.
  • Utilisateurs dans LPSandbox : LPAnimRedirect.h ← LPSandbox.cpp, LPSandboxActors.cpp, LPSandboxMeasure.cpp, LPSandboxMeasureTour.cpp (+1) ; LPCoupleSim.h ← LPSandboxCoupleMod.cpp ; LPPoseMeasure.h / LPPoseOrchestrator.h ← mode Mesure. Donc LPSandbox dépend de LPAnimCore et de LPAnimMeasure.
  • Utilisateurs dans le jeu : Source/LifePlay/LPDirectControlSubsystem.cpp (LPAnimRedirect::IsGameTarget, ClipPath), Source/LifePlay/LPShowCoupleSubsystem.cpp/.h (LPCoupleSim::*, 25 appels). Aucun usage de la mesure dans LifePlay.

b2. SetUALRoot

Appelé uniquement par l'addon : LPSandbox.cpp:17 (au démarrage, depuis FLPSandboxConfig::QuaterniusUALRoot) et LPSandboxMeasure.cpp:39 (bascule ClipRoot pendant la Mesure). Le jeu ne l'appelle pas (le commentaire de 21 § « Rupture du couplage » qui cite FLifePlayModule::StartupModule() est périmé). Sans sandbox, LPAnimRedirect garde son défaut interne /Game/Quaternius/UAL : comportement du jeu inchangé.

b3. Chemins relatifs au projet du jeu dans le C++ de l'addon (cassent si les données quittent le jeu)

Fichier:ligne Chemin lu Problème après DC3
LPAnimMeasure/LPSkeletonProfile.cpp:31 ProjectDir()/Tools/anim/profiles profils déplacés dans l'addon
LPAnimMeasure/LPPoseMeasure.cpp:26 ProjectDir()/Tools/anim/methodes méthodes déplacées dans l'addon
LifePlayEditorTools/LPAnimIdentifyCommandlet.cpp:109 ProjectDir()/Tools/anim/profiles idem (commandlet déplacé en DC2)
LPSandbox/LPSandboxConfig.cpp:36 ProjectConfigDir()/LPSandbox.ini lit la copie du jeu ; la copie de l'addon (LifePlay-Sandbox/Config/LPSandbox.ini) est identique octet pour octet mais n'est pas lue
LPSandbox/LPSandboxConfig.cpp:38 ProjectSavedDir()/sandbox_pack.ini aucun (sortie du pilote dans Saved/ du jeu)

Tools/anim/RetargetPack.py résout profiles/ et methodes/ relativement à son propre fichier (HERE) : il suit le déplacement sans modification.

b4. Racine utilisée par les scripts à déplacer

Tous calculent une seule racine $Root = dossier du jeu, déduite de leur propre emplacement : BuildMod, NewMod, EditMod, HairPipeline : Split-Path $PSScriptRoot -Parent ; anim/AnimPipeline, anim/DeliverAnims : deux niveaux au-dessus. Après déplacement, il faut deux racines :

Racine Sert à Exemples
$GameRoot (jeu) LifePlay.uproject, Config/DefaultGame.ini (ProjectVersion), Releases/<v>, Mods/, Content/, Saved/, Plugins/, Licenses/, outils restés au jeu (Tools/RunCommandlet.ps1, Tools/BuildCollections.py) BuildMod.ps1:172,200,202,221,229 ; AnimPipeline.ps1:118,204,297,426 ; HairPipeline.ps1:49,70,72,262
$SbRoot (addon) ModSources/, AnimSources/, Tools/mods/*.json, Tools/hairs/*.json, Tools/anim/*, lanceurs sandbox BuildMod.ps1:176 ; NewMod.ps1:32,66 ; AnimPipeline.ps1:136,269,301,363,386,417,442 ; DeliverAnims.ps1:45,64,69

ModSource.ps1 (dot-sourcé par BuildMod, EditMod, HairPipeline, DeliverAnims) monte ModSources/<Mod> (addon) vers Mods/<Mod> (jeu) : ses fonctions prennent aujourd'hui une seule racine → signature à deux racines.

b5. Appels croisés

  • BuildMod → ModSource (dot-source), anim/AnimPipeline (-Anim), anim/RetargetPack.py (-Retarget, dans l'éditeur).
  • AnimPipeline → BuildMod (×2), DeliverAnims, RapportControles.py, lanceur LifePlay_interaction_sandbox.bat, Tools/RunCommandlet.ps1 (reste au jeu), commandlets -run=pythonscript, LPAnimEval, LPAnimTwist.
  • HairPipeline → ModSource, HairImportFbx.py, HairMaterials.py, FbxMaterialMap.py, -run=LPHairFromStaticMesh, Tools/BuildCollections.py (reste au jeu).
  • NewMod → écrit Tools/mods/<Mod>.json, renvoie vers BuildMod, EditMod, HairPipeline.
  • DeliverAnims → ModSource, DeliverAnims.py, Catalogue.py.
  • Jeu → outillage : SplitModules.ps1:21,41,43 (messages et contrôle qui citent BuildMod.ps1, pas d'appel) ; BuildDebug.ps1:39 (commentaire seulement).

b6. Données hors liste initiale

  • AnimSources/ (non suivi, 28 Ko : pack.json de freeanims, quaternius) : entrée du pilote AnimPipeline → à déplacer avec l'outillage (ajout à la liste).
  • ModSources/ : 133 Mo sur disque (dont lpr_anim_* non suivis et */Content ignorés) ; 15 fichiers suivis (lpr_hair_pocolov).
  • La sandbox a déjà un dossier Tools/debug/ vide (.gitkeep) et un Config/LPSandbox.ini identique à celui du jeu.

(a) Inventaire (M1)

Livrable de l'agent DC0-T1a (haiku), vérifié et corrigé par la session principale (corrections marquées ✎).

a1. Fichiers à déplacer

Élément Suivi git Taille
Tools/BuildMod.ps1, NewMod.ps1, EditMod.ps1, ModSource.ps1, HairPipeline.ps1 oui 20 K, 3,7 K, 1,4 K, 2,2 K, 19 K
Tools/HairImportFbx.py, HairMaterials.py, FbxMaterialMap.py oui 2,8 K, 6,1 K, 4,0 K
Tools/ImportQuaternius.py, Tools/DiagnosePose.py non 1,7 K, 4,6 K
Tools/anim/ oui 14 fichiers, 143 K
Tools/hairs/, Tools/mods/ oui 1 fichier chacun
ModSources/ ✎ 15 fichiers suivis (lpr_hair_pocolov/Module) sur 720 présents (133 Mo : */Content ignorés, lpr_anim_* non suivis) 133 M
AnimSources/ (ajout b6) non 28 K
Config/LPSandbox.ini oui 1,6 K (identique à la copie de l'addon)
Tools/debug/LifePlay_{pair,interaction,measure}_sandbox.bat oui ≈ 0,5 K chacun
Docs/Modding/FullGuides/Creating_Asset_Mods.md oui 9,6 K
Docs/Modding/ShortGuides/explanation.lphair (✎ dossier ShortGuides) oui —
C++ : LPAnimEval, LPAnimTwist, LPAnimCatalog, LPAnimIdentify (commandlets, .h/.cpp), LPAnimChecks.h/.cpp, LPHairFromStaticMesh (.h/.cpp) oui —
C++ : LPAnimMethodSelect.h (✎ en-tête seul, suivi ; l'agent l'avait noté non suivi) oui —

a2. Références hors fichiers déplacés (hors etat/)

Fichier Référence Traitement
README.md:29,47,48,55,73 ModSources, NewMod/EditMod/HairPipeline/BuildMod, lien vers Creating_Asset_Mods.md DC3/DC4 : réécrire (outillage dans un dépôt séparé, plus de lien)
.gitignore:48-50 /ModSources/*/{Saved,Intermediate,Content}/ DC3 : déplacer vers l'addon
LifePlay.uproject:23 plugin LPSandbox reste (Optional)
Source/LifePlay/LPModInfoSubsystem.h:8 commentaire Tools/BuildMod.ps1 DC3 : « LifePlay-Sandbox/Tools/BuildMod.ps1 »
Source/LifePlay/LifePlay.Build.cs:43 commentaire LPAnimMeasure (plugin LPSandbox) DC1 (remplacé)
Source/LifePlayEditorTools/LifePlayEditorTools.Build.cs:43,47-51 commentaires LPAnimEval, LPHairFromStaticMesh DC2
Tools/SplitModules.ps1:21,41,43 BuildMod.ps1 DC3
Tools/BuildDebug.ps1 ✎ aucune référence à ModSources (seulement BuildMod.ps1 en commentaire, ligne 39) DC3 (commentaire)
Docs/Modding/ShortGuides/explanation.lpmod (2) NewMod, BuildMod reste au jeu (format .lpmod) ; DC3 : citer le dépôt de l'addon
Docs/Migration/09 (23), 10 (3), 13 (7), 16 (24), 20 (16), 21 (31), 23 (25), README (1) outils et commandlets DC1–DC4 selon § 6 de la SPEC (ajout : 10_Protocole_Operations.md, 23_Cycle_De_Vie_Mod.md, Docs/Migration/README.md)

a3. Inclusions C++

Aucune inclusion orpheline côté jeu : seuls les fichiers déplacés incluent LPAnimChecks.h, LPAnimMethodSelect.h, LPPoseMeasure.h, LPSkeletonProfile.h. ✎ L'agent signale LPPoseMeasure.h comme « inexistant » : il est dans l'addon (LPAnimMeasure), c'est attendu.

a4. Chiffres

≈ 765 fichiers sur disque à déplacer (dont 720 sous ModSources), ≈ 133 Mo ; côté git du jeu : ≈ 45 fichiers suivis quittent le dépôt. Références : 65 fichiers hors etat/, dont 1 seul fichier de code exécuté (SplitModules.ps1).