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>
9.3 KiB
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) ; addonlot/SB4-final=4795ea2(pin16905c6).
(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.cppetLPCoupleSimCore.cppn'écrivent pas dansLogLPAnimMeasure: aucune catégorie de journal à déplacer.- Macro d'export :
LPANIMMEASURE_API(45 occurrences, 6 en-têtes). Celles deLPAnimRedirect.hetLPCoupleSim.hdeviennentLPANIMCORE_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. DoncLPSandboxdépend deLPAnimCoreet deLPAnimMeasure. - Utilisateurs dans le jeu :
Source/LifePlay/LPDirectControlSubsystem.cpp(LPAnimRedirect::IsGameTarget,ClipPath),Source/LifePlay/LPShowCoupleSubsystem.cpp/.h(LPCoupleSim::*, 25 appels). Aucun usage de la mesure dansLifePlay.
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, lanceurLifePlay_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→ écritTools/mods/<Mod>.json, renvoie versBuildMod,EditMod,HairPipeline.DeliverAnims→ModSource,DeliverAnims.py,Catalogue.py.- Jeu → outillage :
SplitModules.ps1:21,41,43(messages et contrôle qui citentBuildMod.ps1, pas d'appel) ;BuildDebug.ps1:39(commentaire seulement).
b6. Données hors liste initiale
AnimSources/(non suivi, 28 Ko :pack.jsondefreeanims,quaternius) : entrée du piloteAnimPipeline→ à déplacer avec l'outillage (ajout à la liste).ModSources/: 133 Mo sur disque (dontlpr_anim_*non suivis et*/Contentignorés) ; 15 fichiers suivis (lpr_hair_pocolov).- La sandbox a déjà un dossier
Tools/debug/vide (.gitkeep) et unConfig/LPSandbox.iniidentique à 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).