LifePlay-Revival/Docs/Migration/etat/sandbox/DC0/DC0-SPEC.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

11 KiB
Raw Blame History

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é avant LifePlay (Default) ; la dépendance Build.cs suffirait, 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 } ; LPSandbox reste Enabled + Optional ; AdditionalPluginDirectories inchangé.
  • Source/LifePlay/LifePlay.Build.cs:43-45 : PublicDependencyModuleNames.Add("LPAnimMeasure") → PublicDependencyModuleNames.Add("LPAnimCore") (public : LPShowCoupleSubsystem.h inclut LPCoupleSim.h) ; commentaire mis à jour (lot DC1).
  • Source/LifePlayEditorTools/LifePlayEditorTools.Build.cs : inchangé en DC1 (garde LPAnimMeasure jusqu'à DC2).

1.4 Addon

  • LPSandbox.uplugin : ajouter "Plugins": [ { "Name": "LPAnimCore", "Enabled": true } ] ; description mise à jour (LPAnimMeasure n'est plus consommé par le jeu).
  • LPAnimMeasure : retirer LPAnimRedirect.*, LPCoupleSim.h, LPCoupleSimCore.cpp ; Build.cs : PrivateDependencyModuleNames.Add("LPAnimCore") (seul LPPoseOrchestrator.cpp inclut LPAnimRedirect.h) ; en-tête de LPAnimMeasure.h mis à 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 charger ModdingExtra/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 UCLASS gardent leur nom : -run=LPAnimEval etc. 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.uproject doit exister, sinon arrêt avec message explicite.
  • Chaque script reçoit un paramètre [string] $GameRoot = '' ; les usages de $Root sont répartis selon la table b4 de DC0-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-StrayMods adaptés.
  • Lanceurs .bat : PROJ = %LP_GAMEROOT%\LifePlay.uproject si 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 .gitignore de 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

  • AdditionalPluginDirectories vers 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).
  • LPSandbox Optional : absent → aucun message bloquant attendu ; à vérifier au même moment.
  • LPAnimRedirect sans sandbox : racine par défaut /Game/Quaternius/UAL, cible lue dans Saved/Config/Windows/LPAnimTarget.ini (défaut sandbox → 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