// Copyright Epic Games, Inc. All Rights Reserved. #include "CoreMinimal.h" #include "Modules/ModuleManager.h" #include "UObject/Package.h" #include "UObject/WeakObjectPtr.h" #include "ILinuxTargetPlatformSettingsModule.h" #include "LinuxTargetSettings.h" #include "LinuxTargetPlatformSettings.h" #include "ISettingsModule.h" #define LOCTEXT_NAMESPACE "FLinuxTargetPlatformSettingsModule" /** * Module for the Linux target platform settings. */ class FLinuxTargetPlatformSettingsModule : public ILinuxTargetPlatformSettingsModule { public: virtual void GetTargetPlatformSettings(TArray& TargetPlatforms) override { // NoEditor TP ITargetPlatformSettings* NoEditorTP = new TLinuxTargetPlatformSettings>(); TargetPlatforms.Add(NoEditorTP); PlatformNameToPlatformSettings.Add(FLinuxPlatformProperties::PlatformName(), NoEditorTP); // Editor TP ITargetPlatformSettings* EditorTP = new TLinuxTargetPlatformSettings>(); TargetPlatforms.Add(EditorTP); PlatformNameToPlatformSettings.Add(FLinuxPlatformProperties::PlatformName(), EditorTP); // Server TP ITargetPlatformSettings* ServerTP = new TLinuxTargetPlatformSettings>(); TargetPlatforms.Add(ServerTP); PlatformNameToPlatformSettings.Add(FLinuxPlatformProperties::PlatformName(), ServerTP); // Client TP ITargetPlatformSettings* ClientTP = new TLinuxTargetPlatformSettings>(); TargetPlatforms.Add(ClientTP); PlatformNameToPlatformSettings.Add(FLinuxPlatformProperties::PlatformName(), ClientTP); } virtual void GetPlatformSettingsMaps(TMap& OutMap) override { OutMap = PlatformNameToPlatformSettings; } public: // IModuleInterface interface virtual void StartupModule() override { TargetSettings = NewObject(GetTransientPackage(), "LinuxTargetSettings", RF_Standalone); // We need to manually load the config properties here, as this module is loaded before the UObject system is setup to do this GConfig->GetArray(TEXT("/Script/LinuxTargetPlatform.LinuxTargetSettings"), TEXT("TargetedRHIs"), TargetSettings->TargetedRHIs, GEngineIni); TargetSettings->AddToRoot(); ISettingsModule* SettingsModule = FModuleManager::GetModulePtr("Settings"); if (SettingsModule != nullptr) { SettingsModule->RegisterSettings("Project", "Platforms", "Linux", LOCTEXT("TargetSettingsName", "Linux"), LOCTEXT("TargetSettingsDescription", "Settings for Linux target platform"), TargetSettings ); } } virtual void ShutdownModule() override { ISettingsModule* SettingsModule = FModuleManager::GetModulePtr("Settings"); if (SettingsModule != nullptr) { SettingsModule->UnregisterSettings("Project", "Platforms", "Linux"); } if (!GExitPurge) { // If we're in exit purge, this object has already been destroyed TargetSettings->RemoveFromRoot(); } else { TargetSettings = NULL; } } private: TMap PlatformNameToPlatformSettings; /** Holds the target settings. */ ULinuxTargetSettings* TargetSettings; }; #undef LOCTEXT_NAMESPACE IMPLEMENT_MODULE( FLinuxTargetPlatformSettingsModule, LinuxTargetPlatformSettings);