// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved. #pragma once #include "IDesktopPlatform.h" #include "Json.h" #include "UProjectInfo.h" class FDesktopPlatformBase : public IDesktopPlatform { public: FDesktopPlatformBase(); // IDesktopPlatform Implementation virtual FString GetEngineDescription(const FString& Identifier) override; virtual FString GetCurrentEngineIdentifier() override; virtual void EnumerateLauncherEngineInstallations(TMap &OutInstallations) override; virtual void EnumerateLauncherSampleInstallations(TArray &OutInstallations) override; virtual void EnumerateLauncherSampleProjects(TArray &OutFileNames) override; virtual bool GetEngineRootDirFromIdentifier(const FString &Identifier, FString &OutRootDir) override; virtual bool GetEngineIdentifierFromRootDir(const FString &RootDir, FString &OutIdentifier) override; virtual bool GetDefaultEngineIdentifier(FString &OutIdentifier) override; virtual bool GetDefaultEngineRootDir(FString &OutRootDir) override; virtual bool IsPreferredEngineIdentifier(const FString &Identifier, const FString &OtherIdentifier); virtual bool IsStockEngineRelease(const FString &Identifier) override; virtual bool IsSourceDistribution(const FString &RootDir) override; virtual bool IsPerforceBuild(const FString &RootDir) override; virtual bool IsValidRootDirectory(const FString &RootDir) override; virtual bool SetEngineIdentifierForProject(const FString &ProjectFileName, const FString &Identifier) override; virtual bool GetEngineIdentifierForProject(const FString &ProjectFileName, FString &OutIdentifier) override; virtual bool OpenProject(const FString& ProjectFileName) override; virtual bool CleanGameProject(const FString& ProjectDir, FString& OutFailPath, FFeedbackContext* Warn) override; virtual bool CompileGameProject(const FString& RootDir, const FString& ProjectFileName, FFeedbackContext* Warn) override; virtual bool GenerateProjectFiles(const FString& RootDir, const FString& ProjectFileName, FFeedbackContext* Warn) override; virtual bool IsUnrealBuildToolAvailable() override; virtual bool InvokeUnrealBuildToolSync(const FString& InCmdLineParams, FOutputDevice &Ar, bool bSkipBuildUBT, int32& OutReturnCode, FString& OutProcOutput) override; virtual FProcHandle InvokeUnrealBuildToolAsync(const FString& InCmdLineParams, FOutputDevice &Ar, void*& OutReadPipe, void*& OutWritePipe, bool bSkipBuildUBT = false) override; virtual bool GetSolutionPath(FString& OutSolutionPath) override; virtual bool EnumerateProjectsKnownByEngine(const FString &Identifier, bool bIncludeNativeProjects, TArray &OutProjectFileNames) override; virtual FString GetDefaultProjectCreationPath() override; private: FString CurrentEngineIdentifier; FDateTime LauncherInstallationTimestamp; TMap LauncherInstallationList; TMap CachedProjectDictionaries; void ReadLauncherInstallationList(); void CheckForLauncherEngineInstallation(const FString &AppId, const FString &Identifier, TMap &OutInstallations); int32 ParseReleaseVersion(const FString &Version); TSharedPtr LoadProjectFile(const FString &FileName); bool SaveProjectFile(const FString &FileName, TSharedPtr Object); const FUProjectDictionary &GetCachedProjectDictionary(const FString& RootDir); void GetProjectBuildProducts(const FString& ProjectFileName, TArray &OutFileNames, TArray &OutDirectoryNames); FString GetUnrealBuildToolSourceCodePath() const; bool BuildUnrealBuildTool(FOutputDevice &Ar); protected: FString GetUnrealBuildToolExecutableFilename() const; };