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>
11 KiB
DC0-SPEC — Découplage jeu / sandbox
- Fiche : DC0-T2 (A-ARCH) — Modèle : M4 opus | opus (session principale)
- Entrée :
DC0-CART.md(dépendances b1–b6 ; inventaire a) — Plan :24_Plan_Decouplage_Sandbox.md - Statut : à valider par l'utilisateur (porte DC0-T3)
Conventions : <Jeu> = D:\Game\LifePlay-master 5.5, <Sb> = D:\Game\LifePlay-Sandbox.
1. Plugin LPAnimCore (jeu) — lot DC1
1.1 Emplacement et descripteur
<Jeu>/Plugins/LPAnimCore/LPAnimCore.uplugin :
{
"FileVersion": 3,
"Version": 1,
"VersionName": "1.0.0",
"FriendlyName": "LPAnimCore",
"Description": "LifePlay : redirection des clips convertis (LPAnimRedirect) et geometrie commune du couple (LPCoupleSim). Utilise par le jeu (LifePlay) et par l'addon LifePlay-Sandbox.",
"Category": "LifePlay",
"CreatedBy": "LifePlay",
"CanContainContent": false,
"Installed": false,
"SupportedTargetPlatforms": [ "Win64" ],
"Modules": [
{ "Name": "LPAnimCore", "Type": "Runtime", "LoadingPhase": "PreDefault" }
]
}
PreDefault: chargé avantLifePlay(Default) ; la dépendanceBuild.cssuffirait, la phase rend l'ordre explicite.- Compilé dans toutes les configurations (Shipping compris) : pas de
TargetConfigurationDenyList.
1.2 Module
| Fichier | Origine | Modification |
|---|---|---|
Source/LPAnimCore/LPAnimCore.Build.cs |
nouveau | PCHUsage = UseExplicitOrSharedPCHs ; PublicIncludePaths.Add(ModuleDirectory) (structure plate, comme LPAnimMeasure) ; Public : Core, CoreUObject, Engine |
Source/LPAnimCore/LPAnimCore.cpp |
nouveau | IMPLEMENT_MODULE(FDefaultModuleImpl, LPAnimCore) |
Source/LPAnimCore/LPAnimRedirect.h/.cpp |
<Sb>/…/LPAnimMeasure/ |
LPANIMMEASURE_API → LPANIMCORE_API ; commentaire « Defaut identique a FLPSandboxConfig » conservé |
Source/LPAnimCore/LPCoupleSim.h, LPCoupleSimCore.cpp |
idem | LPANIMMEASURE_API → LPANIMCORE_API |
Copie avec empreinte SHA-256 avant/après ; les seules différences admises sont les macros d'export (diff joint à
DC1-IMPL.md).
1.3 Jeu
LifePlay.uproject→Plugins: ajouter{ "Name": "LPAnimCore", "Enabled": true };LPSandboxresteEnabled+Optional;AdditionalPluginDirectoriesinchangé.Source/LifePlay/LifePlay.Build.cs:43-45:PublicDependencyModuleNames.Add("LPAnimMeasure")→PublicDependencyModuleNames.Add("LPAnimCore")(public :LPShowCoupleSubsystem.hinclutLPCoupleSim.h) ; commentaire mis à jour (lot DC1).Source/LifePlayEditorTools/LifePlayEditorTools.Build.cs: inchangé en DC1 (gardeLPAnimMeasurejusqu'à DC2).
1.4 Addon
LPSandbox.uplugin: ajouter"Plugins": [ { "Name": "LPAnimCore", "Enabled": true } ]; description mise à jour (LPAnimMeasure n'est plus consommé par le jeu).LPAnimMeasure: retirerLPAnimRedirect.*,LPCoupleSim.h,LPCoupleSimCore.cpp;Build.cs:PrivateDependencyModuleNames.Add("LPAnimCore")(seulLPPoseOrchestrator.cppinclutLPAnimRedirect.h) ; en-tête deLPAnimMeasure.hmis à jour.LPSandbox.Build.cs:PublicDependencyModuleNames.Add("LPAnimCore").LPSandbox.uproject(projet autonome de l'addon) :"AdditionalPluginDirectories": [ "../LifePlay-master 5.5/Plugins/LPAnimCore" ](le dossier du plugin seul, pour ne pas chargerModdingExtra/StreetMap).
2. Module éditeur LPModTools (addon) — lot DC2
2.1 Descripteur
Dans LPSandbox.uplugin, module ajouté :
{ "Name": "LPModTools", "Type": "Editor", "LoadingPhase": "Default" }.
2.2 Fichiers déplacés de <Jeu>/Source/LifePlayEditorTools/
LPAnimEvalCommandlet.h/.cpp, LPAnimTwistCommandlet.h/.cpp, LPAnimCatalogCommandlet.h/.cpp,
LPAnimIdentifyCommandlet.h/.cpp, LPAnimChecks.h/.cpp, LPAnimMethodSelect.h/.cpp,
LPHairFromStaticMeshCommandlet.h/.cpp → <Sb>/Plugins/LPSandbox/Source/LPModTools/.
- Les
UCLASSgardent leur nom :-run=LPAnimEvaletc. inchangés (UE trouve le commandlet dans tout module chargé). - Macro d'export éventuelle
LIFEPLAYEDITORTOOLS_API→LPMODTOOLS_API(à relever en DC2-T1). - Les inclusions orphelines relevées par l'inventaire (a) doivent être vides ; sinon, la fiche DC2-T1 tranche.
2.3 LPModTools.Build.cs
bUseUnity = false (même raison que LifePlayEditorTools) ; PublicIncludePaths.Add(ModuleDirectory) ;
Public : Core, CoreUObject, Engine, LPAnimMeasure, LPAnimCore ; Private : UnrealEd, AssetRegistry,
Json, Projects, MeshDescription, StaticMeshDescription, SkeletalMeshUtilitiesCommon,
SkeletalMeshDescription, AnimationCore (liste exacte vérifiée en DC2-T1 contre les inclusions des fichiers
déplacés ; ne pas reprendre LifePlay).
2.4 Jeu
LifePlayEditorTools.Build.cs : retirer "LPAnimMeasure" ; retirer StaticMeshDescription,
SkeletalMeshUtilitiesCommon, SkeletalMeshDescription, AnimationCore seulement si plus aucun fichier restant ne
les utilise (relevé en DC2-T1) ; Json reste (LPEditWidget).
3. Chemins des données d'animation et de la config (addon) — lots DC2/DC3
Nouvel utilitaire dans LPAnimMeasure (dépendance privée Projects) :
// LPAnimMeasurePaths.h
namespace LPAnimMeasurePaths
{
// Racine du depot addon : <base du plugin LPSandbox>/../.. ; vide si le plugin est introuvable.
LPANIMMEASURE_API FString SandboxRoot();
// <SandboxRoot>/Tools/anim ; repli <ProjectDir>/Tools/anim (compatibilite jusqu'a DC3).
LPANIMMEASURE_API FString ToolsAnimDir();
}
| Appelant | Avant | Après |
|---|---|---|
LPSkeletonProfile.cpp:31 |
ProjectDir()/Tools/anim/profiles |
ToolsAnimDir()/profiles |
LPPoseMeasure.cpp:26 |
ProjectDir()/Tools/anim/methodes |
ToolsAnimDir()/methodes |
LPAnimIdentifyCommandlet.cpp:109 (DC2) |
ProjectDir()/Tools/anim/profiles |
ToolsAnimDir()/profiles |
LPSandboxConfig.cpp:36 |
ProjectConfigDir()/LPSandbox.ini |
SandboxRoot()/Config/LPSandbox.ini, repli ProjectConfigDir() |
Une ligne de journal au premier appel (LogLPAnimMeasure : PATHS racine addon <chemin>) sert de preuve de chargement.
Le repli vers le jeu est retiré en DC3, une fois les fichiers du jeu supprimés.
4. Outillage de mods déplacé (addon) — lot DC3
4.1 Arborescence cible (même disposition relative que dans le jeu)
| Jeu (avant) | Addon (après) |
|---|---|
Tools/BuildMod.ps1, NewMod.ps1, EditMod.ps1, ModSource.ps1, HairPipeline.ps1 |
<Sb>/Tools/ (mêmes noms) |
Tools/HairImportFbx.py, HairMaterials.py, FbxMaterialMap.py, ImportQuaternius.py, DiagnosePose.py |
<Sb>/Tools/ |
Tools/anim/ (tout), Tools/hairs/, Tools/mods/ |
<Sb>/Tools/anim/, <Sb>/Tools/hairs/, <Sb>/Tools/mods/ |
ModSources/, AnimSources/ |
<Sb>/ModSources/, <Sb>/AnimSources/ |
Tools/debug/LifePlay_{pair,interaction,measure}_sandbox.bat |
<Sb>/Tools/debug/ |
Config/LPSandbox.ini |
supprimé du jeu (la copie de l'addon est identique et devient la seule lue, § 3) |
Docs/Modding/FullGuides/Creating_Asset_Mods.md, Docs/Modding/ShortGuides/explanation.lphair |
<Sb>/Docs/Modding/ |
Garder la disposition relative limite les changements : les chemins $PSScriptRoot → Tools/... restent justes ; seule
la racine du jeu change.
4.2 Deux racines
Nouveau fichier <Sb>/Tools/Roots.ps1, dot-sourcé en tête de chaque script déplacé :
# Racines de l'atelier de mods : $SbRoot (depot addon) et $GameRoot (projet LifePlay).
# Ordre : parametre -GameRoot, puis Config/LPSandbox.ini [Workshop] GameRoot= (relatif a $SbRoot), puis erreur.
function Resolve-LPRoots([string] $GameRootParam) { ... ; retourne @{ Sb = ...; Game = ... } }
Config/LPSandbox.ini(addon) : nouvelle section[Workshop], cléGameRoot=..\LifePlay-master 5.5.- Contrôle :
<GameRoot>\LifePlay.uprojectdoit exister, sinon arrêt avec message explicite. - Chaque script reçoit un paramètre
[string] $GameRoot = ''; les usages de$Rootsont répartis selon la table b4 deDC0-CART.md($GameRoot: projet,Releases,Mods,Content,Saved,Plugins,Licenses,Tools/RunCommandlet.ps1,Tools/BuildCollections.py;$SbRoot:ModSources,AnimSources,Tools/*). ModSource.ps1:Get-ModSourcePaths($SbRoot, $GameRoot, $Name)→Source = <Sb>\ModSources\<Name>,Mounted = <Jeu>\Mods\<Name>;Mount/Dismount/Get-StrayModsadaptés.- Lanceurs
.bat:PROJ=%LP_GAMEROOT%\LifePlay.uprojectsi la variable existe, sinon%~dp0..\..\..\LifePlay-master 5.5\LifePlay.uproject.
4.3 Jeu après DC3
Tools/SplitModules.ps1:21,41,43: messages «LifePlay-Sandbox\Tools\BuildMod.ps1»..gitignore: retirer/ModSources/*/Saved/,/ModSources/*/Intermediate/,/ModSources/*/Content/; les reprendre dans le.gitignorede l'addon.README.md: plus de lien vers le guide des moddeurs ; une ligne « l'outillage de mods vit dans un dépôt séparé ».
5. Comportement sans sandbox
AdditionalPluginDirectoriesvers un dossier absent : à vérifier en DC2-T2 (attendu : ignoré, au pire un avertissement ; si erreur bloquante, déplacer la déclaration vers une solution par variable d'environnement).LPSandboxOptional: absent → aucun message bloquant attendu ; à vérifier au même moment.LPAnimRedirectsans sandbox : racine par défaut/Game/Quaternius/UAL, cible lue dansSaved/Config/Windows/LPAnimTarget.ini(défautsandbox→ le jeu joue ses clips d'origine).- Commandlets de mods absents :
-run=LPAnimEvaléchoue avec « commandlet introuvable » (comportement voulu).
6. Docs à reprendre (complété par l'inventaire a)
| Doc | Lot | Changement |
|---|---|---|
20_Chaine_Animations.md |
DC1, DC2 | module LPAnimCore, commandlets dans LPModTools |
21_Sandbox_Addon.md |
chaque lot | graphe de modules, § « Rupture du couplage » (corriger l'appel SetUALRoot périmé), registre des reports, pin |
07_Architecture_5.5.md |
DC1 | plugin LPAnimCore |
09_Commandes_Utiles.md |
DC2, DC3 | commandes de mods depuis <Sb>, § 7 publication |
08_Guide_Developpeur.md |
DC2, DC4 | prérequis : la sandbox n'est requise que pour l'atelier de mods |
13_Protocole_Coiffure.md, 16_H3_Mods_Paquets.md |
DC3 | chemins des scripts |
10_Protocole_Operations.md, 23_Cycle_De_Vie_Mod.md, Docs/Migration/README.md |
DC3 | chemins des scripts, ModSources dans l'addon |
Docs/Modding/ShortGuides/explanation.lpmod |
DC3 | NewMod/BuildMod cités dans le dépôt de l'addon |
commentaires LPModInfoSubsystem.h:8, BuildDebug.ps1:39 |
DC3 | chemin de BuildMod |
| README du jeu, README de l'addon | DC3, DC4 | guide déplacé, atelier des mods |
7. Ordre d'exécution et état compilable
| Après | Jeu avec sandbox | Jeu sans sandbox |
|---|---|---|
| DC1 | compile | non (LifePlayEditorTools → LPAnimMeasure) |
| DC2 | compile | compile |
| DC3 | compile | compile ; outillage de mods disponible seulement avec la sandbox |