59 lines
4.5 KiB
Markdown
59 lines
4.5 KiB
Markdown
|
|
# S7-T1 - Contrat d'isolation du plugin `LPSandbox` (jeu <-> addon)
|
||
|
|
|
||
|
|
- **Fiche :** S7-T1 | **Role :** A-ARCH | **Date :** 2026-10-06
|
||
|
|
- **Perimetre :** specification. Les controles sont rejoues en `S7-CART.md` (S7-T3), l'implementation est en `S7-T2`.
|
||
|
|
- **Amont :** `21_Sandbox_Addon.md` (S1 contrat de config, S2 module `LPAnimMeasure`, S3 liaison sibling, S5 `LPCoupleSim`).
|
||
|
|
- **Plugin :** `D:\Game\LifePlay-Sandbox\Plugins\LPSandbox\` (modules `LPSandbox`, `LPAnimMeasure`).
|
||
|
|
|
||
|
|
Le plugin doit rester **sans connaissance compilee du jeu** : le jeu depend du plugin (`LifePlay.Build.cs` -> `LPAnimMeasure`), jamais l'inverse.
|
||
|
|
Toute information du jeu consommee par le plugin passe par un chemin d'asset (config) ou par la reflexion UE.
|
||
|
|
|
||
|
|
## Checklist de contrat (a verifier a chaque lot touchant l'addon)
|
||
|
|
|
||
|
|
### C1 - Aucun `include` / lien vers `LifePlay` dans le plugin
|
||
|
|
|
||
|
|
- [ ] Aucun `#include "LifePlay.h"` ni header du module `LifePlay` (`LPShowCoupleSubsystem.h`, `LPDirectControlSubsystem.h`, ...).
|
||
|
|
- [ ] Aucun symbole `LIFEPLAY_API` (ni export, ni usage).
|
||
|
|
- [ ] Aucune entree `"LifePlay"` / `"LifePlayEditorTools"` dans `PublicDependencyModuleNames`, `PrivateDependencyModuleNames`, `DynamicallyLoadedModuleNames` des `*.Build.cs` du plugin.
|
||
|
|
- [ ] Aucun chemin `Source/LifePlay` dans le code (hors commentaires de provenance).
|
||
|
|
- [ ] Graphe de modules : `LPSandbox -> LPAnimMeasure` uniquement ; `LPAnimMeasure` ne depend ni de `LPSandbox` ni du jeu.
|
||
|
|
|
||
|
|
Verification : `rg` sur `Plugins/LPSandbox/Source` (motifs en `S7-CART.md`). Attendu : 0 resultat hors commentaires.
|
||
|
|
|
||
|
|
### C2 - Aucun chargement de graphe Blueprint `GI` / `Person` / `Room`
|
||
|
|
|
||
|
|
- [ ] Pas de reference a `GI`, `Room`, `BP_Room`, `GameInstance` du jeu (nom ou chemin `/Game/BPs/GI`, `/Game/BPs/Room`).
|
||
|
|
- [ ] Le seul Blueprint du jeu touche est **`Person`**, uniquement pour **lire le CDO** de la classe (rayon / demi-hauteur de capsule, profil et reponses de collision) :
|
||
|
|
`LoadObject<UClass>(PersonBP)` puis `GetDefaultObject()`. Aucune instance (`SpawnActor<Person>`), aucun appel de fonction Blueprint, aucun `ProcessEvent`.
|
||
|
|
- [ ] Le chemin du Blueprint vient de `Config/LPSandbox.ini` (`[Sandbox.Assets] PersonBP`), jamais d'un `StaticClass()` / include C++.
|
||
|
|
- [ ] Le lanceur neutralise l'instance de jeu du Blueprint : `-ini:Engine:[/Script/EngineSettings.GameMapsSettings]:GameInstanceClass=/Script/Engine.GameInstance` (deja dans `Tools/debug/LifePlay_pair_sandbox.bat`).
|
||
|
|
|
||
|
|
Remarque : `LoadObject` sur `Person.Person_C` charge le package du Blueprint (donnees serialisees) ; le contrat interdit l'**execution** de ses graphes, pas la lecture du CDO.
|
||
|
|
|
||
|
|
### C3 - `SoftObjectPath` / config uniquement
|
||
|
|
|
||
|
|
- [ ] Tout asset du jeu (`/Game/...`) est reference par chaine de `Config/LPSandbox.ini` (19 cles, 6 sections, `S1-SPEC.md`) ou par decouverte `AssetRegistry` (`GetSoftObjectPath().ToString()`).
|
||
|
|
- [ ] Aucun `TSubclassOf<>` / `TObjectPtr<>` / `ConstructorHelpers` vers un type ou un asset du jeu en dur.
|
||
|
|
- [ ] Defaut en code = litteral historique ; fichier ou cle absents => comportement identique (repli S1).
|
||
|
|
- [ ] Un asset introuvable journalise (`LogLPSandbox` / `LogLPAnimMeasure`), sans repli silencieux ni crash.
|
||
|
|
|
||
|
|
### C4 - Montage sibling documente
|
||
|
|
|
||
|
|
- [ ] Jeu et addon sont deux depots **voisins** : `D:\Game\LifePlay-master 5.5\` et `D:\Game\LifePlay-Sandbox\` (pas de submodule imbrique).
|
||
|
|
- [ ] `LifePlay.uproject` : `"AdditionalPluginDirectories": ["../LifePlay-Sandbox/Plugins"]` et plugin `LPSandbox` declare (`Enabled: true`, `Optional: true`, voir S7-T2).
|
||
|
|
- [ ] Pin d'addon consigne a la main (`S3-INT.md`, README de l'addon) a chaque evolution consommee par le jeu.
|
||
|
|
- [ ] Documente dans `21_Sandbox_Addon.md` (section S3) et le README de `LifePlay-Sandbox` (layout, clone sibling, pin).
|
||
|
|
- [ ] Addon seul (`LPSandbox.uproject`) : `Content` du jeu monte par junction NTFS (documente S3).
|
||
|
|
|
||
|
|
### C5 - Configurations de build (S7-T2)
|
||
|
|
|
||
|
|
- [ ] `LPSandbox.uplugin` : `SupportedTargetPlatforms: ["Win64"]`.
|
||
|
|
- [ ] Module `LPSandbox` : `TargetConfigurationDenyList: ["Shipping"]` (le sandbox tourne en `-game` avec l'editeur en Development / DebugGame, jamais en Shipping).
|
||
|
|
- [ ] Module `LPAnimMeasure` : **pas** de deny-list (le module jeu `LifePlay` en depend : `LPCoupleSim`, `LPAnimRedirect`).
|
||
|
|
- [ ] Aucun `TargetAllowList: ["Editor"]` sur `LPSandbox` : trop strict, le sandbox tourne aussi en cible Game Development.
|
||
|
|
|
||
|
|
## Hors perimetre
|
||
|
|
|
||
|
|
- Staging de `LPSandbox.ini` pour un jeu empaquete (reste ouvert depuis S1).
|
||
|
|
- Show complet en jeu / alignement du plancher (`S5-VAL.md` §4).
|