LifePlay-Revival/Docs/Migration/etat/OPT/REFAC/REFAC-INDEX-C1a.md
edujiro5972 8084622450 LifePlay UE 5.8 : état de développement au 2026-10-19
Tickets : REP1-T4

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 22:57:42 +02:00

16 KiB

REFAC-INDEX-C1a : inventaire des fonctions C++ et graphe d'appels (lecture seule)

Fiche C1a, relevé du 2026-10-15. Aucune écriture dans le code, aucun build, aucun éditeur, aucun MCP, aucun git qui écrit. Outil : refac.py (scratchpad de session), analyse lexicale.

Livrables : REFAC-FONCTIONS.csv, REFAC-APPELS.csv (séparateur ;, UTF-8), REFAC-SANS-APPELANT.csv (complément, liste complète des fonctions sans appelant interne avec la réserve), ce fichier.

1. Comptes bruts

Mesure Valeur Preuve
Fichiers .h/.cpp/.inl suivis analysés 176 git ls-files des deux dépôts, filtre de périmètre, hors fichiers modifiés ou non suivis
Fichiers contenant au moins une définition 97 script
Définitions de fonctions 1011 établi pour le comptage par le script, voir § 6 et § 7
UFUNCTION exposées au Blueprint (définies) 30 estimé : drapeau lu sur la déclaration d'en-tête
Fonctions statiques 67
Tick / TickComponent 17
Arêtes d'appel (sites d'appel) 12256
dont internes (cible dans l'inventaire) 3169 estimé
dont moteur (cible hors inventaire) 9087 estimé : inclut constructeurs, macros non reconnues, fonctions libres du moteur
dont internes ambiguës (nom partagé par plusieurs classes) 1210 colonne ambigu=oui

Par module (définitions) :

Module Définitions
LifePlay 485
LPSandbox 132
StreetMapRuntime 93
LPModTools 82
LPAnimMeasure 77
LifePlayEditorTools 68
StreetMapImporting 43
LPAnimCore 31

2. Les 15 fonctions les plus appelées (appels internes non ambigus)

# Classe::Fonction Sites d'appel
1 FStreetMapNode::GetLocation 70
2 At 61
3 IndexOf 60
4 Live 34
5 BoneOf 31
6 FWhoEval::Bool 28
7 SandboxCfgReadString 27
8 TintBrush 23
9 FLPSkeletonProfile::Bone 23
10 PromptState 22
11 FEditor::Link 21
12 Direction 17
13 FWhoEval::Eat 17
14 Append 16
15 Intern 16

3. Fonctions sans appelant interne (candidates à code mort)

Total sans aucune arête entrante interne (ambiguës comptées pour toutes leurs classes candidates) : 364 sur 1011. Sans réserve de cycle de vie ni d'exposition : 176 ; les autres (188) portent une réserve (colonne reserve_moteur_ou_blueprint du CSV complémentaire).

Réserve forte : une UFUNCTION, un virtual/override, un Tick, un constructeur, un cycle de vie moteur ou un _Implementation est appelé par le moteur, un Blueprint ou une réflexion, jamais visible dans ce graphe. Même une fonction « sans réserve » peut être appelée par un Blueprint (hors périmètre), un commandlet via nom de chaîne, un délégué lié par AddDynamic/BindUObject (le nom n'est pas suivi d'une parenthèse) ou depuis un fichier non suivi/modifié. Aucune n'est à supprimer sur cette seule liste.

Les 60 premières sans réserve (ordre module, fichier) :

Module Fichier:ligne Classe::Fonction
LPAnimCore Plugins/LPAnimCore/Source/LPAnimCore/LPAnimRedirect.cpp:21 ::SetUALRoot
LPAnimCore Plugins/LPAnimCore/Source/LPAnimCore/LPAnimRedirect.cpp:34 ::IsGameTarget
LPAnimCore Plugins/LPAnimCore/Source/LPAnimCore/LPAnimRedirect.cpp:52 ::SetBodyRoot
LPAnimCore Plugins/LPAnimCore/Source/LPAnimCore/LPAnimRedirect.cpp:57 ::BodyClipPath
LPAnimCore Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSim.h:185 FSweepOptions::Sandbox
LPAnimCore Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:20 ::MeshToActor
LPAnimCore Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:60 ::FitFromAnimBounds
LPAnimCore Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:80 ::FitFromLiveBounds
LPAnimCore Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:106 ::CapsuleHalfOf
LPAnimCore Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:112 ::AccumulateAnimBounds
LPAnimCore Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:178 ::AccumulateLiveBody
LPAnimCore Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:223 ::EnsureBox
LPAnimCore Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:245 ::ApplyBoxFit
LPAnimCore Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:256 ::PlaceBodyMesh
LPAnimCore Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:265 ::SaveAndFreeze
LPAnimCore Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:283 ::RestoreMove
LPAnimCore Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:294 ::AttachPartner
LPAnimCore Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:308 ::Unweld
LPAnimCore Plugins/LPAnimCore/Source/LPAnimCore/LPCoupleSimCore.cpp:431 ::ResolveCoupleMove
LPAnimMeasure Plugins/LPSandbox/Source/LPAnimMeasure/LPAnimMeasurePaths.cpp:25 ::ToolsAnimDir
LPAnimMeasure Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:57 ::SetMethod
LPAnimMeasure Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:83 ::MethodForProfile
LPAnimMeasure Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:979 ::TPoses
LPAnimMeasure Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:995 ::TFitResult
LPAnimMeasure Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:1014 ::TFitReport
LPAnimMeasure Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:1023 ::WriteRetargetPose
LPAnimMeasure Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:1161 ::TransferPose
LPAnimMeasure Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:1263 ::Sample
LPAnimMeasure Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:1449 ::AlignToReference
LPAnimMeasure Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:1474 ::FormatPassage
LPAnimMeasure Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:1487 ::FormatKept
LPAnimMeasure Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:1503 ::FormatSnapshot
LPAnimMeasure Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:1618 ::KeyBones
LPAnimMeasure Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:1634 ::LogReport
LPAnimMeasure Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseOrchestrator.cpp:230 ::SampleAt
LPAnimMeasure Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseOrchestrator.cpp:249 ::Restore
LPAnimMeasure Plugins/LPSandbox/Source/LPAnimMeasure/LPSkeletonProfile.cpp:129 ::Identify
LPAnimMeasure Plugins/LPSandbox/Source/LPAnimMeasure/LPSkeletonProfile.h:29 FLPSkeletonProfile::Has
LPModTools Plugins/LPSandbox/Source/LPModTools/LPAnimChecks.cpp:162 ::TrunkCapsules
LPModTools Plugins/LPSandbox/Source/LPModTools/LPAnimChecks.cpp:210 ::SelfTest
LPModTools Plugins/LPSandbox/Source/LPModTools/LPAnimChecks.cpp:226 ::CheckClip
LPSandbox Plugins/LPSandbox/Source/LPSandbox/LPSandboxActionVM.cpp:46 ::MakePerson
LPSandbox Plugins/LPSandbox/Source/LPSandbox/LPSandboxActionVM.cpp:517 ::LoadActions
LPSandbox Plugins/LPSandbox/Source/LPSandbox/LPSandboxActionVM.cpp:586 ::ReadInteractKey
LPSandbox Plugins/LPSandbox/Source/LPSandbox/LPSandboxActionVM.cpp:627 ::CollectActions
LPSandbox Plugins/LPSandbox/Source/LPSandbox/LPSandboxCamera.cpp:50 FLPSandboxCamera::ResetView
LPSandbox Plugins/LPSandbox/Source/LPSandbox/LPSandboxInteraction.cpp:147 ULPSandboxInteractionMod::BuildPanel
LPSandbox Plugins/LPSandbox/Source/LPSandbox/LPSandboxInteraction.cpp:164 ULPSandboxInteractionMod::TickInput
LPSandbox Plugins/LPSandbox/Source/LPSandbox/LPSandboxInteraction.cpp:261 ULPSandboxInteractionMod::OnFellOff
LPSandbox Plugins/LPSandbox/Source/LPSandbox/LPSandboxInteraction.cpp:267 ULPSandboxInteractionMod::OnBodyChanged
LPSandbox Plugins/LPSandbox/Source/LPSandbox/LPSandboxMeasure.cpp:689 ULPSandboxMeasureMod::BuildPanel
LPSandbox Plugins/LPSandbox/Source/LPSandbox/LPSandboxMeasure.cpp:837 ULPSandboxMeasureMod::TickInput
LPSandbox Plugins/LPSandbox/Source/LPSandbox/LPSandboxMeasureMod.h:51 ULPSandboxMeasureMod::OnFellOff
LPSandbox Plugins/LPSandbox/Source/LPSandbox/LPSandboxMeasureMod.h:53 ULPSandboxMeasureMod::OnBodyChanged
LPSandbox Plugins/LPSandbox/Source/LPSandbox/LPSandboxMeasureTour.cpp:571 ULPSandboxMeasureMod::SaveVignette
LPSandbox Plugins/LPSandbox/Source/LPSandbox/LPSandboxMeasureTour.cpp:611 ULPSandboxMeasureMod::SavePlancheFrame
LPSandbox Plugins/LPSandbox/Source/LPSandbox/LPSandboxModRegistry.cpp:64 ::SettingsPath
LPSandbox Plugins/LPSandbox/Source/LPSandbox/LPSandboxModRegistry.cpp:76 FLPSandboxModRegistry::RegisterFactory
LPSandbox Plugins/LPSandbox/Source/LPSandbox/LPSandboxModRegistry.cpp:589 FLPSandboxModRegistry::SetEnabled
LPSandbox Plugins/LPSandbox/Source/LPSandbox/LPSandboxModRegistry.cpp:614 FLPSandboxModRegistry::Move

Liste complète : REFAC-SANS-APPELANT.csv (364 lignes).

4. Les 20 fonctions les plus longues (lignes, accolades comprises)

# Lignes Fichier:ligne Classe::Fonction
1 622 Plugins/StreetMap/Source/StreetMapImporting/StreetMapFactory.cpp:49 UStreetMapFactory::LoadFromOpenStreetMapXMLFile
2 348 Plugins/LPSandbox/Source/LPSandbox/LPSandboxMeasure.cpp:106 ULPSandboxMeasureMod::BeginMeasure
3 337 Source/LifePlay/LPCameraModeSubsystem.cpp:1389 ULPCameraModeSubsystem::TickCoupleMouse
4 332 Plugins/StreetMap/Source/StreetMapImporting/OSMFile.cpp:128 FOSMFile::ProcessAttribute
5 322 Plugins/StreetMap/Source/StreetMapRuntime/StreetMapComponent.cpp:206 UStreetMapComponent::GenerateMesh
6 314 Source/LifePlayEditorTools/LPPairCollisionTestCommandlet.cpp:206 ULPPairCollisionTestCommandlet::Main
7 302 Plugins/LPSandbox/Source/LPModTools/LPAuditBlueprintCallsCommandlet.cpp:677 ULPAuditBlueprintCallsCommandlet::Main
8 298 Plugins/LPSandbox/Source/LPModTools/LPAnimEvalCommandlet.cpp:253 ULPAnimEvalCommandlet::Main
9 260 Plugins/LPSandbox/Source/LPModTools/LPHairFromStaticMeshCommandlet.cpp:203 ULPHairFromStaticMeshCommandlet::Main
10 254 Source/LifePlayEditorTools/LPTitleModManagerCommandlet.cpp:150 ULPTitleModManagerCommandlet::Main
11 251 Source/LifePlay/LPDebugSubsystem.cpp:339 ::WritePersonsDump
12 235 Source/LifePlay/LPModGuard.cpp:244 FLPModGuard::Run
13 206 Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseOrchestrator.cpp:281 ::Run
14 198 Source/LifePlay/LPOutdoorRoomSubsystem.cpp:346 ULPOutdoorRoomSubsystem::LiftSunkPersons
15 192 Source/LifePlay/LPSettingsSubsystem.cpp:562 ULPSettingsSubsystem::PlaceSettingsButton
16 184 Source/LifePlay/LPHairstyleSubsystem.cpp:429 ULPHairstyleSubsystem::Sync
17 171 Plugins/LPSandbox/Source/LPSandbox/LPSandboxModRegistry.cpp:304 FLPSandboxModRegistry::Evaluate
18 169 Source/LifePlayEditorTools/LPEditWidgetCommandlet.cpp:72 ULPEditWidgetCommandlet::Main
19 167 Source/LifePlay/LPDirectControlSubsystem.cpp:1072 ULPDirectControlSubsystem::FitPersonBounds
20 167 Plugins/LPSandbox/Source/LPAnimMeasure/LPPoseMeasure.cpp:212 ::TablesFor

(Longueur = ligne de fermeture moins ligne du nom + 1 ; commentaires et lignes vides inclus.)

5. Fichiers de l'addon modifiés ou non suivis, non analysés (16)

Relevé git status --porcelain -uall dans D:\Game\LifePlay-Sandbox-5.8 (et dans le jeu : aucun fichier source concerné), filtré sur Plugins/LPSandbox/Source/*.{h,cpp,inl}. Ces fichiers sont absents de l'inventaire : leurs fonctions et leurs appels manquent donc aussi au graphe (le module LPSandbox est sous-compté).

Statut Fichier
M Plugins/LPSandbox/Source/LPSandbox/LPPairSandbox.cpp
M Plugins/LPSandbox/Source/LPSandbox/LPPairSandbox.h
M Plugins/LPSandbox/Source/LPSandbox/LPPairSandboxMenu.h
M Plugins/LPSandbox/Source/LPSandbox/LPSandboxActors.cpp
M Plugins/LPSandbox/Source/LPSandbox/LPSandboxActors.h
?? Plugins/LPSandbox/Source/LPSandbox/LPSandboxCharGenMod.cpp
?? Plugins/LPSandbox/Source/LPSandbox/LPSandboxCharGenMod.h
M Plugins/LPSandbox/Source/LPSandbox/LPSandboxCoupleMod.cpp
M Plugins/LPSandbox/Source/LPSandbox/LPSandboxCoupleMod.h
M Plugins/LPSandbox/Source/LPSandbox/LPSandboxMod.h
M Plugins/LPSandbox/Source/LPSandbox/LPSandboxModWrappers.cpp
M Plugins/LPSandbox/Source/LPSandbox/LPSandboxScene.cpp
M Plugins/LPSandbox/Source/LPSandbox/LPSandboxScene.h
M Plugins/LPSandbox/Source/LPSandbox/LPSandboxSidebar.cpp
?? Plugins/LPSandbox/Source/LPSandbox/LPSandboxStage.cpp
?? Plugins/LPSandbox/Source/LPSandbox/LPSandboxStage.h

6. Limites de la méthode

  • Analyse lexicale sur le texte nettoyé (commentaires, chaînes et lignes # blanchis) : aucun préprocesseur, aucune résolution de types, aucun modèle.
  • Branches #if/#else : les deux branches sont lues ; une fonction définie dans les deux est comptée deux fois, et des accolades déséquilibrées entre branches peuvent fausser une portée (aucun contrôle d'équilibre n'est fait fichier par fichier).
  • Définitions écrites par macro (DEFINE_FUNCTION, DECLARE_*, IMPLEMENT_*) ou lambdas de portée globale : non comptées. Une initialisation par accolades dans l'en-tête d'un constructeur (: A{x}) peut faire manquer cette fonction.
  • Appels ->F( et .F( : rattachés par le nom seul à toutes les classes qui définissent F ; ambigu=oui si plusieurs classes, ou si le nom figure dans une liste de noms courants du moteur (Add, Contains, GetName, Num, Sort, Run… 28 noms, liste dans refac.py), ou si toutes les définitions internes du nom sont statiques (un appel par ./-> vise alors presque sûrement le moteur). Les arêtes ambiguës sont exclues du classement du § 2 mais comptées comme entrantes au § 3. Les autres noms qui coïncident avec ceux du moteur restent de faux internes possibles. La colonne appelé_classe d'une arête ambiguë liste les candidates séparées par |.
  • Appels sans qualificatif : résolus dans la classe de l'appelant et ses bases connues (héritage lu sur la déclaration class X : public Y), puis dans les fonctions libres ; un appel hérité d'une classe du moteur est « moteur ».
  • Appels Classe::F( : interne seulement si le couple est défini dans l'inventaire ; sinon moteur. Les appels par délégué, par nom de chaîne (FindFunction, ProcessEvent), par Blueprint ou par TFunction ne sont pas vus. Une déclaration Type Nom(args) est écartée par heuristique et peut être prise à tort pour un appel (ou l'inverse).
  • ufunction_bp, statique et virtual/override d'une définition .cpp sont lus sur la déclaration de l'en-tête (clé classe+nom, surcharges fusionnées par OU) : une surcharge non exposée peut hériter de l'exposition d'une sœur.
  • Périmètre : Source/, Plugins/StreetMap/Source, Plugins/LPAnimCore/Source du jeu ; Plugins/LPSandbox/Source de l'addon. Exclus : Plugins/ModdingExtra, Source/LPSandboxApp de l'addon, les .cs, les fichiers non suivis ou modifiés.
  • Aucun lien avec les Blueprints : une fonction « sans appelant » peut être appelée par un graphe Blueprint (voir OBA-T23 et la cartographie des nœuds).

7. Niveaux de preuve

Énoncé Niveau
Liste des fichiers du périmètre et fichiers modifiés de l'addon établi (sortie git)
Nombre de définitions, leur fichier et leur ligne estimé : script validé à la main sur 3 fichiers (voir le compte rendu), pas de comparaison à un analyseur de compilateur
Exposition Blueprint (ufunction_bp), statique estimé
Arêtes internes non ambiguës estimé (nom + classe de l'appelant, sans types)
Arêtes ambiguës, arêtes moteur incertain
« Sans appelant » = code mort incertain, jamais établi sur ce seul graphe
Longueurs de fonctions estimé (dépend de la détection de portée)