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>
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 structsFPairSandboxMenu(l. 57-77) etPairSandbox::*(l. 79-823, machine virtuellelpaction, 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
- Namespaces anonymes partages :
PairSandboxAutoetPairSandboxToursont utilises par Auto, Tour, Capture et Scene. A deplacer dansLPMeasureShared.heninline constexpr/ fonctionsinline, sinon duplication ODR entre .cpp. - Globales
PairSandbox::Catalog / PlaceChoices / WhenChoices: definies dansLPSandboxActionCatalog.cpp,externdansLPSandboxActionVM.h. - Lambdas a pointeur de membre : le lambda
Flag(bool ALPPairSandboxCharacter::*) exige l'acces prive :BuildFilterPaneldoit etre une methode membre, pas une fonction libre. static bool bPoseWritten(ShowFormulaDefault, 1918) : reste local au .cpp Tour, ne pas dupliquer.- Unity build : le module a
PCHUsage = UseExplicitOrSharedPCHs; verifier avec et sans unity (bUseUnity=false) que les includes de chaque nouveau .cpp suffisent. - Doublon connu :
LPInteractionSandbox.cpp(441 LOC) reimplementeLoadChat,ShowChat,HideChat. A ne pas fusionner dans S4 (hors perimetre), maisLPChatUI.cpppourra servir de base a un dedoublonnage ulterieur. - 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)
- Extraire
LPSandboxActionVM.h/.cppetLPSandboxActionCatalog.cpp(code libre, sans UObject : risque minimal). - Extraire
LPSandboxWorldFilepuisBuildRoom/BuildLighting(RoomBuilder). - Extraire CoupleSim (
LPCoupleSim,LPCoupleBox,LPSandboxBodies). - Extraire
LPChatUI,LPInteractionMode. - Extraire
LPMeasureShared.hpuis Capture, Tour, Auto, Overlay, Cameras. - Decouper
BeginMeasure(RunMeasureClip,SpawnMeasureCameras) etShowAnimMenu(BuildMeasurePanel,BuildFilterPanel), puisTick. - Verifier : build Win64 Development, lancement des 3 modes (Pair, Interaction, Mesure), comparaison de
Saved/Measurement/tour.csvet d'une vignette avant / apres.