71 lines
5.1 KiB
Markdown
71 lines
5.1 KiB
Markdown
|
|
# S7-T3 - Cartographie de conformite du plugin `LPSandbox` (contrat S7-SPEC)
|
||
|
|
|
||
|
|
- **Fiche :** S7-T3 | **Role :** CART | **Date :** 2026-10-06
|
||
|
|
- **Cible :** `D:\Game\LifePlay-Sandbox\Plugins\LPSandbox\Source` (modules `LPSandbox`, `LPAnimMeasure`)
|
||
|
|
- **Outil :** `rg` (ripgrep). Compte hors commentaires precise quand applicable.
|
||
|
|
|
||
|
|
## Resultats des grep exiges
|
||
|
|
|
||
|
|
| # | Motif | Portee | Resultats | Attendu |
|
||
|
|
|---|---|---|---:|---:|
|
||
|
|
| 1 | `#include <LifePlay.h>` / `"LifePlay.h"` | `Source/**` | **0** | 0 |
|
||
|
|
| 2 | `LIFEPLAY_API` | `Source/**` | **0** | 0 |
|
||
|
|
| 3 | `"LifePlay"` ou `"LifePlayEditorTools"` (module) | `*.Build.cs` | **0** | 0 |
|
||
|
|
| 4 | `^\s*#include.*LifePlay` (tout include mentionnant LifePlay) | `Source/**` | **0** | 0 |
|
||
|
|
| 5 | `LifePlay` (mot, tous contextes) | `Source/**` | 16 | commentaires + 1 nom de section ini (voir ci-dessous) |
|
||
|
|
| 6 | `SpawnActor.*Person`, `ConstructorHelpers`, `TSubclassOf<`, `TObjectPtr<APerson` | `Source/**` | **0** | 0 |
|
||
|
|
|
||
|
|
Detail #5 (16 hits) : 15 sont des **commentaires** (provenance, regles de dependance ; ex. `LPAnimMeasure.Build.cs:3`, `LPCoupleSim.h:11`). Le 16e est `LPAnimRedirect.cpp:37` :
|
||
|
|
`GConfig->GetString(TEXT("LifePlay.Anim"), TEXT("Target"), ...)` : **nom de section d'un fichier `.ini`** (donnee), pas une dependance de code.
|
||
|
|
|
||
|
|
## Cases du contrat
|
||
|
|
|
||
|
|
### C1 - Aucun lien vers `LifePlay`
|
||
|
|
|
||
|
|
- [x] Aucun `#include "LifePlay.h"` ni header du module jeu (grep #1, #4 : 0).
|
||
|
|
- [x] Aucun `LIFEPLAY_API` (grep #2 : 0).
|
||
|
|
- [x] Aucune dependance de module `LifePlay` / `LifePlayEditorTools` dans les `*.Build.cs` (grep #3 : 0 ; `LPSandbox` -> `Core`, `CoreUObject`, `Engine`, `InputCore`, `SlateCore`, `LPAnimMeasure`, `Slate`, `ImageWrapper`, `AssetRegistry`, `Json` ; `LPAnimMeasure` -> `Core`, `CoreUObject`, `Engine`, `Json`).
|
||
|
|
- [x] Aucun chemin `Source/LifePlay` hors commentaires.
|
||
|
|
- [x] Graphe acyclique `LPSandbox -> LPAnimMeasure` ; `LPAnimMeasure` sans dependance vers `LPSandbox` (verifie dans `LPAnimMeasure.Build.cs`).
|
||
|
|
|
||
|
|
### C2 - Aucun chargement de graphe `GI` / `Person` / `Room`
|
||
|
|
|
||
|
|
- [x] Aucune reference a `GI` du jeu : `\bGI\b`, `BPs/GI`, `BPs/Room`, `BP_Room` -> **0** sur le code (le motif `\bRoom\b` donne 66 hits : tous des **variables locales** `ALPPairSandboxStage* Room`, type du plugin, aucune relation avec le Blueprint `Room` du jeu).
|
||
|
|
- [x] `Person` : lecture de CDO uniquement. Deux sites, tous deux `LoadObject<UClass>(nullptr, *FLPSandboxConfig::Get().PersonBP)` puis `GetDefaultObject()` :
|
||
|
|
- `LPSandboxRoomBuilder.cpp:119-120` ;
|
||
|
|
- `LPCoupleSim.cpp:39-40`.
|
||
|
|
Aucun `SpawnActor` de `Person`, aucun `CallFunctionByName`. Le seul `ProcessEvent` du plugin (`LPSandboxRoomBuilder.cpp:308`) vise `BP_Sky_Sphere` du **moteur**.
|
||
|
|
- [x] Chemin du Blueprint : `Config/LPSandbox.ini` `[Sandbox.Assets] PersonBP` (defaut `/Game/BPs/Person.Person_C`, `LPSandboxConfig.h:15`).
|
||
|
|
- [x] Lanceur : `GameInstanceClass=/Script/Engine.GameInstance` (`Tools/debug/LifePlay_pair_sandbox.bat`) ; le journal runtime confirme `Game class is 'LPPairSandboxGameMode'` et « profil Person lu ». L'unique `LogLifePlay: Error: Coiffures : GI.HairstyleTable ...` est emis par le **module jeu** (categorie `LogLifePlay`, pas `LogLPSandbox`) : erreur connue (S3-VAL, S4-VAL, S5-VAL), non liee au plugin.
|
||
|
|
|
||
|
|
### C3 - `SoftObjectPath` / config seulement
|
||
|
|
|
||
|
|
- [x] Aucun `ConstructorHelpers`, `TSubclassOf<>` ni `TObjectPtr<>` vers un type du jeu (grep #6 : 0).
|
||
|
|
- [x] Un seul litteral `/Game/` hors config : `LPAnimRedirect.cpp:17` (`/Game/Quaternius/UAL`), **defaut interne** documente (S2), surcharge par `LPAnimRedirect::SetUALRoot` (poussee par le module jeu depuis la config) ; asset de contenu tiers, pas de code du jeu.
|
||
|
|
- [x] `LoadObject` par chaine (config) et `AssetRegistry` + `GetSoftObjectPath().ToString()` (`LPCoupleSim.cpp:227,236`) pour Quaternius.
|
||
|
|
- [x] Repli au litteral historique si fichier/cle absents (S1) ; journal `LogLPSandbox` sur asset introuvable.
|
||
|
|
|
||
|
|
### C4 - Montage sibling documente
|
||
|
|
|
||
|
|
- [x] Layout sibling + decision « pas de submodule » : `21_Sandbox_Addon.md` (section S3) et `S3-INT.md`.
|
||
|
|
- [x] `LifePlay.uproject` : `AdditionalPluginDirectories` = `../LifePlay-Sandbox/Plugins` ; `LPSandbox` `Enabled: true`, `Optional: true` (S7-T2).
|
||
|
|
- [x] Pin consigne : `S3-INT.md` (maj S7-T4 -> `f09c42e`).
|
||
|
|
- [x] README de l'addon : layout, clone sibling, junction `Content` (S3).
|
||
|
|
|
||
|
|
### C5 - Configurations
|
||
|
|
|
||
|
|
- [x] `SupportedTargetPlatforms: ["Win64"]`.
|
||
|
|
- [x] `LPSandbox` : `TargetConfigurationDenyList: ["Shipping"]`.
|
||
|
|
- [x] `LPAnimMeasure` : aucune deny-list.
|
||
|
|
- [x] Pas de `TargetAllowList: ["Editor"]`.
|
||
|
|
|
||
|
|
## Ecarts / observations
|
||
|
|
|
||
|
|
| # | Observation | Gravite |
|
||
|
|
|---|---|---|
|
||
|
|
| 1 | `LoadObject<UClass>(PersonBP)` charge le **package** `Person` (donnees serialisees) : le contrat C2 interdit l'execution, pas ce chargement ; inevitable pour lire le CDO. | Info |
|
||
|
|
| 2 | Section ini `[LifePlay.Anim]` lue par `LPAnimRedirect` : couplage de **nom** (donnee), pas de code. | Info |
|
||
|
|
| 3 | `Optional: true` ne dispense pas du clone sibling pour compiler le jeu (`LifePlay.Build.cs` -> `LPAnimMeasure`). | Limite (documentee S7-IMPL-L) |
|
||
|
|
|
||
|
|
**Verdict CART : conforme (0 ecart bloquant).**
|