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>
4.5 KiB
4.5 KiB
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 enS7-T2. - Amont :
21_Sandbox_Addon.md(S1 contrat de config, S2 moduleLPAnimMeasure, S3 liaison sibling, S5LPCoupleSim). - Plugin :
D:\Game\LifePlay-Sandbox\Plugins\LPSandbox\(modulesLPSandbox,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 moduleLifePlay(LPShowCoupleSubsystem.h,LPDirectControlSubsystem.h, ...). - Aucun symbole
LIFEPLAY_API(ni export, ni usage). - Aucune entree
"LifePlay"/"LifePlayEditorTools"dansPublicDependencyModuleNames,PrivateDependencyModuleNames,DynamicallyLoadedModuleNamesdes*.Build.csdu plugin. - Aucun chemin
Source/LifePlaydans le code (hors commentaires de provenance). - Graphe de modules :
LPSandbox -> LPAnimMeasureuniquement ;LPAnimMeasurene depend ni deLPSandboxni 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,GameInstancedu 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)puisGetDefaultObject(). Aucune instance (SpawnActor<Person>), aucun appel de fonction Blueprint, aucunProcessEvent. - Le chemin du Blueprint vient de
Config/LPSandbox.ini([Sandbox.Assets] PersonBP), jamais d'unStaticClass()/ include C++. - Le lanceur neutralise l'instance de jeu du Blueprint :
-ini:Engine:[/Script/EngineSettings.GameMapsSettings]:GameInstanceClass=/Script/Engine.GameInstance(deja dansTools/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 deConfig/LPSandbox.ini(19 cles, 6 sections,S1-SPEC.md) ou par decouverteAssetRegistry(GetSoftObjectPath().ToString()). - Aucun
TSubclassOf<>/TObjectPtr<>/ConstructorHelpersvers 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\etD:\Game\LifePlay-Sandbox\(pas de submodule imbrique). LifePlay.uproject:"AdditionalPluginDirectories": ["../LifePlay-Sandbox/Plugins"]et pluginLPSandboxdeclare (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 deLifePlay-Sandbox(layout, clone sibling, pin). - Addon seul (
LPSandbox.uproject) :Contentdu 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-gameavec l'editeur en Development / DebugGame, jamais en Shipping). - Module
LPAnimMeasure: pas de deny-list (le module jeuLifePlayen depend :LPCoupleSim,LPAnimRedirect). - Aucun
TargetAllowList: ["Editor"]surLPSandbox: trop strict, le sandbox tourne aussi en cible Game Development.
Hors perimetre
- Staging de
LPSandbox.inipour un jeu empaquete (reste ouvert depuis S1). - Show complet en jeu / alignement du plancher (
S5-VAL.md§4).