// Portage UE 5.5 - lot H3d (metadonnees des modules, Docs/Migration/16_H3_Mods_Paquets.md ยง8). // // Lit les metadonnees de chaque module (Content/Modules//.lpmod, lignes "CLE: valeur"). Le jeu (GI) ne lit que // les trois premieres lignes, par position (MODULE_UNIQUEID, MODULE_NAME, MODULE_AUTHOR) ; le gestionnaire de mods // affiche le fichier entier. Cles ajoutees (facultatives, apres la ligne 3) : // MODULE_VERSION, MODULE_CREATED, MODULE_PACKAGED (dates AAAA-MM-JJ), MODULE_LICENSE, MODULE_AUTHOR_LINK, // MODULE_PRICE, MODULE_GAME_VERSION (version du jeu contre laquelle les assets du mod ont ete cuits, ecrite par // LifePlay-Sandbox/Tools/BuildMod.ps1, atelier de mods de l'addon), MODULE_DEFAULT_ENABLED (lu par LPHairstyleSubsystem). // // Avertissement : un module ACTIF dont MODULE_GAME_VERSION differe de la version du jeu (ProjectVersion) declenche une // fenetre (Slate, independante des Blueprints, aussi sur l'ecran titre), une fois par module et par session. #pragma once #include "CoreMinimal.h" #include "Containers/Ticker.h" #include "Subsystems/GameInstanceSubsystem.h" #include "LPModInfoSubsystem.generated.h" class SWidget; UCLASS() class LIFEPLAY_API ULPModInfoSubsystem : public UGameInstanceSubsystem { GENERATED_BODY() public: virtual void Initialize(FSubsystemCollectionBase& Collection) override; virtual void Deinitialize() override; /** Valeur d'une cle du .lpmod d'un module (vide si absente). */ UFUNCTION(BlueprintCallable, Category = "LifePlay|Mods") FString GetModuleMetadata(const FString& Module, const FString& Key) const; private: bool Tick(float DeltaTime); bool IsModuleEnabled(const FString& Module) const; void ShowWarning(const TArray& Lines); void CloseWarning(); /** Module -> (cle en majuscules -> valeur). */ TMap> Metadata; FString GameVersion; TSet Warned; TSharedPtr Popup; FTSTicker::FDelegateHandle TickHandle; double NextCheck = 0.0; };