diff --git a/Source/NDisplayLaunchButton/Private/NDisplayLaunchButton.cpp b/Source/NDisplayLaunchButton/Private/NDisplayLaunchButton.cpp index aecc2ef83c528777eeaf0938ccc7948ebf262e99..fe6002f49b7bf3bed098b925bb81a3d5f7e969bc 100644 --- a/Source/NDisplayLaunchButton/Private/NDisplayLaunchButton.cpp +++ b/Source/NDisplayLaunchButton/Private/NDisplayLaunchButton.cpp @@ -45,6 +45,46 @@ void FNDisplayLaunchButtonModule::ShutdownModule() FNDisplayLaunchButtonCommands::Unregister(); } +/* + * Copied from DisplayClusterEditorSettings.cpp: + * Switches on the nDisplay Plugin and changes the Editor Runtime + */ +void FNDisplayLaunchButtonModule::ChangeNDisplayStateAndStoreConfig(bool NewState, bool& OldState) +{ + + static const FString PlatformName = FPlatformProperties::PlatformName(); + static const FString DefaultEnginePath = FString::Printf(TEXT("%s/DefaultEngine.ini"), *FPaths::SourceConfigDir()); + static const FString DefaultPlatformEnginePath = FString::Printf(TEXT("%s%s/%sEngine.ini"), *FPaths::SourceConfigDir(), *PlatformName, *PlatformName); + static const FString DefaultGamePath = FString::Printf(TEXT("%sDefaultGame.ini"), *FPaths::SourceConfigDir()); + + FString OldValue; + GConfig->GetString(TEXT("/Script/DisplayClusterEditor.DisplayClusterEditorSettings"), TEXT("bEnabled"), OldValue, DefaultEnginePath); + OldState = OldValue.ToBool(); + + if (NewState) + { + // DefaultEngine.ini + GConfig->SetString(TEXT("/Script/Engine.Engine"), TEXT("GameEngine"), TEXT("/Script/DisplayCluster.DisplayClusterGameEngine"), DefaultPlatformEnginePath); + GConfig->SetString(TEXT("/Script/Engine.Engine"), TEXT("UnrealEdEngine"), TEXT("/Script/DisplayClusterEditor.DisplayClusterEditorEngine"), DefaultPlatformEnginePath); + GConfig->SetString(TEXT("/Script/Engine.Engine"), TEXT("GameViewportClientClassName"), TEXT("/Script/DisplayCluster.DisplayClusterViewportClient"), DefaultPlatformEnginePath); + + // DefaultGame.ini + GConfig->SetString(TEXT("/Script/EngineSettings.GeneralProjectSettings"), TEXT("bUseBorderlessWindow"), TEXT("True"), DefaultGamePath); + } + else + { + GConfig->SetString(TEXT("/Script/Engine.Engine"), TEXT("GameEngine"), TEXT("/Script/Engine.GameEngine"), DefaultPlatformEnginePath); + GConfig->SetString(TEXT("/Script/Engine.Engine"), TEXT("UnrealEdEngine"), TEXT("/Script/UnrealEd.UnrealEdEngine"), DefaultPlatformEnginePath); + GConfig->SetString(TEXT("/Script/Engine.Engine"), TEXT("GameViewportClientClassName"), TEXT("/Script/Engine.GameViewportClient"), DefaultPlatformEnginePath); + + // DefaultGame.ini + GConfig->SetString(TEXT("/Script/EngineSettings.GeneralProjectSettings"), TEXT("bUseBorderlessWindow"), TEXT("False"), DefaultGamePath); + } + + GConfig->Flush(false, DefaultPlatformEnginePath); + GConfig->Flush(false, DefaultGamePath); +} + /** * Since some plugins interfere with nDisplay execution, this function can disable them * @param PluginName - Name of the plugin to enable/disable @@ -158,9 +198,10 @@ void FNDisplayLaunchButtonModule::PluginButtonClicked() if (Settings->TracehostIP.Len() > 0) InsightParameters.Append(FString::Printf(TEXT(" -tracehost=%s"), *Settings->TracehostIP)); } - /* Disable Plugins temporarily */ + /* Enable/Disable Plugins temporarily */ if(!ChangePluginStateAndStoreConfig("SteamVR", false, SteamVRState)) return; if(!ChangePluginStateAndStoreConfig("OculusVR", false, OculusVRState)) return; + ChangeNDisplayStateAndStoreConfig(true, nDisplayState); /* Trigger Editor save. Needed, else old version will be launched every time */ if (!UEditorLoadingAndSavingUtils::SaveDirtyPackagesWithDialog(true, true)) return; @@ -271,6 +312,7 @@ void FNDisplayLaunchButtonModule::PluginButtonClicked() /* Restore Plugin States */ ChangePluginStateAndStoreConfig("SteamVR", SteamVRState, SteamVRState); ChangePluginStateAndStoreConfig("OculusVR", OculusVRState, OculusVRState); + ChangeNDisplayStateAndStoreConfig(nDisplayState, nDisplayState); } /** diff --git a/Source/NDisplayLaunchButton/Public/NDisplayLaunchButton.h b/Source/NDisplayLaunchButton/Public/NDisplayLaunchButton.h index f36d47e10f9f479cfe56772793acab37a6e99a10..be25dd16869003b691785d495f2d6ffa20f194ec 100644 --- a/Source/NDisplayLaunchButton/Public/NDisplayLaunchButton.h +++ b/Source/NDisplayLaunchButton/Public/NDisplayLaunchButton.h @@ -20,6 +20,7 @@ public: /** IModuleInterface implementation */ virtual void StartupModule() override; virtual void ShutdownModule() override; + static void ChangeNDisplayStateAndStoreConfig(bool NewState, bool& OldState); bool ChangePluginStateAndStoreConfig(FString PluginName, bool NewState, bool& OldState) const; static FString GetEditorExecutableName(); static FString GetFilePathInProject(FString FileName); @@ -34,4 +35,5 @@ public: private: bool SteamVRState = false; bool OculusVRState = false; + bool nDisplayState = false; };