LifePlay-Revival/Docs/Migration/etat/sandbox/S4/S4-CART.md
edujiro5972 04b053554f Sandbox addon : brancher le jeu sur LifePlay-Sandbox (plugin LPSandbox).
Charge le plugin via AdditionalPluginDirectories, conserve ShowCouple et les commandlets anim côté jeu, et documente les lots S0–S8 (CHG-212 à CHG-220).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-06 21:10:53 +02:00

13 KiB

S4-T1 : cartographie de LPPairSandbox.cpp

Role A-CART. Lecture seule : aucun fichier du plugin n'a ete modifie.

Source : D:\Game\LifePlay-Sandbox\Plugins\LPSandbox\Source\LPSandbox\LPPairSandbox.cpp Taille mesuree : 4274 lignes (LPPairSandbox.h : 322 lignes, LPInteractionSandbox.cpp : 441, LPSandboxConfig.cpp : 73). Objectif : aucun fichier > ~800 LOC.

1. Constat

  • Le .cpp contient 4 classes (UCLASS dans le .h) : ALPPairSandboxStage, ALPPairSandboxCharacter, ALPPairSandboxGameMode, plus les structs FPairSandboxMenu (l. 57-77) et PairSandbox::* (l. 79-823, machine virtuelle lpaction, catalogue, lecture .lpworld).
  • Les UCLASS restent dans LPPairSandbox.h : seul le .cpp se decoupe, sans toucher a UHT. Les membres prives restent accessibles car chaque nouveau .cpp n'implemente que des methodes des memes classes.
  • Quatre fonctions depassent 150 lignes et doivent etre decoupees en sous-methodes, sinon l'objectif ~800 LOC reste tenable mais la lisibilite non :
Fonction Lignes Taille
ALPPairSandboxCharacter::ShowAnimMenu 3363-3939 577
ALPPairSandboxStage::BeginMeasure 1290-1664 375
ALPPairSandboxCharacter::Tick 3940-4247 308
ALPPairSandboxStage::Build 831-1042 213
ALPPairSandboxStage::TickTour 2068-2196 ~130

2. Carte par unite (lignes actuelles)

2.1 RoomBuilder (lpworld, murs, mobilier, eclairage)

Bloc Lignes LOC Contenu
FProp, Token, LoadWorldFile 748-823 76 lecture work___vin01.lpworld (echelle, props)
Stage::Stage() (ctor) 825-829 5 RootComponent
Build partie piece 831-953 123 meubles StaticMeshComponent, lambda Shell (4 murs + plafond + sol), capsule Person, recherche du point de depart libre
Build partie eclairage 954-1040 87 2 directionnelles, SkyLight, SkyAtmosphere, BP_Sky_Sphere
Build fin 1041-1042 2 appel LoadChat, LoadActions (reste dans l'orchestrateur)

Total source : ~290 LOC.

2.2 CoupleSim (box, weld, capsule, animation de paire)

Bloc Lignes LOC Contenu
PlayIdle, ConfigureCapsule, Weld, Apply, ToggleFurniture, ToggleCapsules 1072-1165 94 idle Daz, capsule copiee de Person, soudure partenaire, collisions
PlayPair, MoveCouple 2528-2599 72 animation de paire, deplacement avec blocage par la box
FitCoupleBox 2600-2712 113 boite englobante du couple (lambda Accumulate 2609-2661)
Character::LoadQuaternius, SelectBody, ApplyBody 2958-3060 103 corps Quaternius / Bridget / Michael / mannequin
Character::RefreshPose, PlayWalk 3063-3135 73 pose d'interaction, marche

Total source : ~455 LOC.

2.3 InteractionFilters (VM lpaction, catalogue, chat)

Bloc Lignes LOC Contenu
Types FAction, FPerson, FVal, FEnv, EKind, FTok, globales Catalog, PlaceChoices, WhenChoices, MakePerson 79-153 ~75 modele de donnees
Tokenize + FWhoEval (Eat, Resolve, Call, ReadArgs, Primary, Unary, Add, Compare, And, Expr) 155-548 394 analyseur et evaluateur des conditions WHO
WhoAllows, WhereHas, LoadActions, CollectActions 549-685 et 727-747 ~158 filtrage du catalogue .lpaction
ReadInteractKey 686-726 41 touche d'interaction depuis l'ini d'entree
Stage::LoadChat 1044-1070 27 chat.lpaction
Stage::BeginInteraction 1167-1208 42 entree dans le mode Interaction
Character::ApplyInteractionView 3136-3178 43 vues interaction / dessus / yeux
Character::ApplyFilters 2950-2957 8 rafraichit le chat
ShowChat, HideChat 3179-3274 96 liste des actions filtrees (Slate)
RefreshInteractKey, ShowKeyMark, HideKeyMark, PlaceKeyMark 3275-3362 88 pastille de touche
Panneau filtres (flags WHO1 / WHO2, combos lieu / heure / race) 3560-3641, 3642-3676, 3845-3890 ~170 partie de ShowAnimMenu
Bloc interaction de Tick 4017-4119 103 marche, distance, touche E

Total source : ~1290 LOC.

2.4 MeasureUI (mesure, tournee, vignettes, planches, panneau Slate)

Bloc Lignes LOC Contenu
EndMeasure 1209-1289 81 nettoyage de la scene de mesure
BeginMeasure 1290-1664 375 scene, lambda Place (1370-1445), lambda RunClip (1446-1593), anneau de 6 cameras (1601-1642), score des vues
ReplayMeasure, ShowBestModel 1665-1678 14
Namespace PairSandboxAuto 1679-1698 20 constantes et chemins des captures auto
ToggleRaw, ToggleFormula, ToggleT, SetAutoRun, TickAuto 1700-1851 152 boucle automatique
Namespace PairSandboxTour 1853-1888 36 constantes tournee, vignettes, planches
GetMeasureClips, ShowFormulaDefault, BrowseClip, BrowseTime 1890-1988 99 clips, vue par defaut
StartTour, TickTour 1989-2196 208 tournee des clips
SaveVignette, SavePlancheFrame, WritePlanche 2197-2307 111 PNG 512 px, JPEG 256 px
GetMeasureCameraName, UseMeasureCamera, SetFreeView, MoveFreeView 2309-2399 91 cameras fixes et libre
DrawMeasureFigures, ScoreMeasureViews 2400-2527 128 calques, squelettes, ecart par camera
Panneau Mesure (MeasureHolder, boutons, Auto, Tournee) 3706-3832 127 partie de ShowAnimMenu
Branche Mesure de SelectMode 2877-2906 ~30
Entrees clavier Mesure de Tick (0-9, R, M, T, F, N, P, PgUp, PgDn, camera libre) 4125-4211 87
Libelles flottants Mesure de Tick 4212-4240 ~29

Total source : ~1590 LOC.

2.5 Stage / GameMode / Character (reste)

Bloc Lignes LOC Contenu
Includes + FPairSandboxMenu 1-77 77
Stage::Possess 2713-2745 33
Character ctor 2746-2768 23 spring arm, camera
SetStage, EndPlay, ResetView 2769-2824 56
SelectAnim, SelectMode (hors Mesure), SelectView, SelectWalk 2825-2949 ~100
ShowAnimMenu : preparation, combos, ossature Slate, fin (mode persistant) 3363-3705, 3833-3844, 3876-3939 ~420
Tick commun (souris, ZQSD, chute, Echap) 3940-4016, 4120-4124 ~82
GameMode 4240-4274 ~35

Total source : ~830 LOC.

Controle : 290 + 455 + 1290 + 1590 + 830 = 4455, soit un ecart de ~180 lignes avec 4274 : les chevauchements (ShowAnimMenu et Tick sont comptes dans plusieurs unites par tranche, bornes approximatives).

3. Plan de fichiers propose

Dossier plat conserve (PublicIncludePaths.Add(ModuleDirectory) dans LPSandbox.Build.cs) : aucun changement de .Build.cs necessaire, UBT ramasse les nouveaux .cpp du dossier. Les LOC estimes incluent ~20-35 lignes d'includes par fichier (le .cpp d'origine en porte 55).

3.1 Fichiers conserves

Fichier LOC estime Role
LPPairSandbox.h ~340 UCLASS inchangees ; +4 declarations privees (BuildRoom, BuildLighting, RunMeasureClip, BuildMenuPanels) ; FLPMeasureFigure y reste
LPPairSandbox.cpp ~150 ctor Stage, Build (orchestrateur), Possess, GameMode
LPPairSandboxCharacter.cpp (nouveau) ~330 ctor, SetStage, EndPlay, ResetView, Select*, Tick commun

3.2 Unite RoomBuilder

Fichier LOC estime Contenu
LPSandboxWorldFile.h ~30 FProp, LoadWorldFile
LPSandboxWorldFile.cpp ~100 Token, LoadWorldFile (748-823)
LPSandboxRoomBuilder.cpp ~160 Stage::BuildRoom (831-953)
LPSandboxLighting.cpp ~120 Stage::BuildLighting (954-1040)

3.3 Unite CoupleSim

Fichier LOC estime Contenu
LPCoupleSim.cpp ~200 1072-1165 + 2528-2599
LPCoupleBox.cpp ~150 FitCoupleBox (2600-2712)
LPSandboxBodies.cpp ~215 2958-3135 (corps, pose, marche)

3.4 Unite InteractionFilters

Fichier LOC estime Contenu
LPSandboxActionVM.h ~110 types PairSandbox::* (79-153) + declarations (MakePerson, WhoAllows, CollectActions, ReadInteractKey, LoadActions) + extern des globales
LPSandboxActionVM.cpp ~430 Tokenize + FWhoEval (155-548)
LPSandboxActionCatalog.cpp ~260 549-747 + Stage::LoadChat
LPInteractionMode.cpp ~230 BeginInteraction, ApplyInteractionView, ApplyFilters, bloc interaction du Tick (extrait en TickInteraction)
LPChatUI.cpp ~210 ShowChat, HideChat, pastille de touche (3179-3362)
LPFilterPanel.cpp ~190 panneau WHO1 / WHO2 / lieu / heure (extrait de ShowAnimMenu)

3.5 Unite MeasureUI

Fichier LOC estime Contenu
LPMeasureShared.h ~70 constantes et chemins de PairSandboxAuto et PairSandboxTour (en inline constexpr / inline pour partage)
LPMeasureScene.cpp ~350 EndMeasure, BeginMeasure (hors RunClip et cameras), ReplayMeasure, ShowBestModel
LPMeasureClip.cpp ~190 RunMeasureClip (lambdas Place + RunClip, 1370-1593)
LPMeasureAuto.cpp ~185 1700-1851
LPMeasureTour.cpp ~340 1890-2196
LPMeasureCapture.cpp ~150 vignettes, planches (2197-2307)
LPMeasureCameras.cpp ~170 2309-2399 + anneau de cameras (1601-1642, extrait en SpawnMeasureCameras)
LPMeasureOverlay.cpp ~165 DrawMeasureFigures, ScoreMeasureViews
LPMeasurePanel.cpp ~300 panneau Slate (3706-3832), touches (4125-4211), libelles (4212-4240), branche Mesure de SelectMode

3.6 Menu (partage entre unites)

Fichier LOC estime Contenu
LPPairSandboxMenu.h ~30 FPairSandboxMenu (57-77)
LPSandboxMenu.cpp ~470 ShowAnimMenu : liste des animations, Modes / Vues / Marche / Corps, ossature Slate ; appelle BuildMeasurePanel et BuildFilterPanel

4. Totaux et verification de l'objectif

Unite Fichiers LOC estime Plus gros fichier
RoomBuilder 4 ~410 160
CoupleSim 3 ~565 215
InteractionFilters 6 ~1430 430
MeasureUI 9 ~1920 350
Stage / GameMode / Character 3 + 2 menu ~1020 470
Total 27 ~5350 470
  • Plus gros fichier : LPSandboxMenu.cpp (~470). Marge d'environ 40 % sous 800 LOC.
  • Le total passe de 4274 a ~5350 : surcout de ~1000 lignes, imputable aux includes repetes (~25 fichiers x ~25 lignes), aux en-tetes internes et aux signatures des fonctions extraites.
  • Les UCLASS ne bougent pas : aucun risque de regeneration UHT incoherente.

5. Risques et points d'attention

  1. Namespaces anonymes partages : PairSandboxAuto et PairSandboxTour sont utilises par Auto, Tour, Capture et Scene. A deplacer dans LPMeasureShared.h en inline constexpr / fonctions inline, sinon duplication ODR entre .cpp.
  2. Globales PairSandbox::Catalog / PlaceChoices / WhenChoices : definies dans LPSandboxActionCatalog.cpp, extern dans LPSandboxActionVM.h.
  3. Lambdas a pointeur de membre : le lambda Flag (bool ALPPairSandboxCharacter::*) exige l'acces prive : BuildFilterPanel doit etre une methode membre, pas une fonction libre.
  4. static bool bPoseWritten (ShowFormulaDefault, 1918) : reste local au .cpp Tour, ne pas dupliquer.
  5. Unity build : le module a PCHUsage = UseExplicitOrSharedPCHs ; verifier avec et sans unity (bUseUnity=false) que les includes de chaque nouveau .cpp suffisent.
  6. Doublon connu : LPInteractionSandbox.cpp (441 LOC) reimplemente LoadChat, ShowChat, HideChat. A ne pas fusionner dans S4 (hors perimetre), mais LPChatUI.cpp pourra servir de base a un dedoublonnage ulterieur.
  7. Tick : l'ordre des blocs (souris, deplacement, interaction, Echap, mesure, libelles) doit etre conserve exactement lors de l'extraction en TickInteraction / TickMeasureInput / TickMeasureLabels.

6. Ordre de migration recommande (un commit par etape, build + capture de reference entre chaque)

  1. Extraire LPSandboxActionVM.h/.cpp et LPSandboxActionCatalog.cpp (code libre, sans UObject : risque minimal).
  2. Extraire LPSandboxWorldFile puis BuildRoom / BuildLighting (RoomBuilder).
  3. Extraire CoupleSim (LPCoupleSim, LPCoupleBox, LPSandboxBodies).
  4. Extraire LPChatUI, LPInteractionMode.
  5. Extraire LPMeasureShared.h puis Capture, Tour, Auto, Overlay, Cameras.
  6. Decouper BeginMeasure (RunMeasureClip, SpawnMeasureCameras) et ShowAnimMenu (BuildMeasurePanel, BuildFilterPanel), puis Tick.
  7. Verifier : build Win64 Development, lancement des 3 modes (Pair, Interaction, Mesure), comparaison de Saved/Measurement/tour.csv et d'une vignette avant / apres.