LifePlay-Revival/Source/LifePlay/LPModInfoSubsystem.h

49 lines
1.9 KiB
C
Raw Normal View History

// 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/<id>/<id>.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
// Tools/BuildMod.ps1), 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<FString>& Lines);
void CloseWarning();
/** Module -> (cle en majuscules -> valeur). */
TMap<FString, TMap<FString, FString>> Metadata;
FString GameVersion;
TSet<FString> Warned;
TSharedPtr<SWidget> Popup;
FTSTicker::FDelegateHandle TickHandle;
double NextCheck = 0.0;
};