// Check whether or not we have vertical sync enabled bool UBpVideoSettingsLib::IsVSyncEnabled() { UGameUserSettings* Settings = GetGameUserSettings(); if(!Settings) { return false; } return Settings->IsVSyncEnabled(); }
// Check whether or not we are currently running in fullscreen mode bool UBpVideoSettingsLib::IsInFullscreen() { UGameUserSettings* Settings = GetGameUserSettings(); if(!Settings) { return false; } return Settings->GetFullscreenMode() == EWindowMode::Fullscreen; }
void UGameEngine::CreateGameViewport( UGameViewportClient* GameViewportClient ) { check(GameViewportWindow.IsValid()); if( !GameViewportWidget.IsValid() ) { CreateGameViewportWidget( GameViewportClient ); } TSharedRef<SViewport> GameViewportWidgetRef = GameViewportWidget.ToSharedRef(); auto Window = GameViewportWindow.Pin(); Window->SetWidgetToFocusOnActivate( GameViewportWidgetRef ); Window->SetOnWindowClosed( FOnWindowClosed::CreateUObject( this, &UGameEngine::OnGameWindowClosed ) ); // SAVEWINPOS tells us to load/save window positions to user settings (this is disabled by default) int32 SaveWinPos; if (FParse::Value(FCommandLine::Get(), TEXT("SAVEWINPOS="), SaveWinPos) && SaveWinPos > 0 ) { // Get WinX/WinY from GameSettings, apply them if valid. FIntPoint PiePosition = GetGameUserSettings()->GetWindowPosition(); if (PiePosition.X >= 0 && PiePosition.Y >= 0) { int32 WinX = GetGameUserSettings()->GetWindowPosition().X; int32 WinY = GetGameUserSettings()->GetWindowPosition().Y; Window->MoveWindowTo(FVector2D(WinX, WinY)); } Window->SetOnWindowMoved( FOnWindowMoved::CreateUObject( this, &UGameEngine::OnGameWindowMoved ) ); } SceneViewport = MakeShareable( new FSceneViewport( GameViewportClient, GameViewportWidgetRef ) ); GameViewportClient->Viewport = SceneViewport.Get(); //GameViewportClient->CreateHighresScreenshotCaptureRegionWidget(); // Disabled until mouse based input system can be made to work correctly. // The viewport widget needs an interface so it knows what should render GameViewportWidgetRef->SetViewportInterface( SceneViewport.ToSharedRef() ); FViewportFrame* ViewportFrame = SceneViewport.Get(); GameViewport->SetViewportFrame(ViewportFrame); }
// Get currently set screen resolution FString UBpVideoSettingsLib::GetScreenResolution() { UGameUserSettings* Settings = GetGameUserSettings(); if(!Settings) { return FString(""); } FIntPoint Resolution = Settings->GetScreenResolution(); return FString::FromInt(Resolution.X) + "x" + FString::FromInt(Resolution.Y); }
UCWGameUserSettings* UBpVideoSettingsLib::GetCWGameUserSettings() { UGameUserSettings* Settings = GetGameUserSettings(); if(Settings == nullptr) { return nullptr; } return Cast<UCWGameUserSettings>(Settings); }
// Revert to original video settings bool UBpVideoSettingsLib::RevertVideoMode() { UGameUserSettings* Settings = GetGameUserSettings(); if(!Settings) { return false; } Settings->RevertVideoMode(); return true; }
// Set the vertical sync flag bool UBpVideoSettingsLib::SetVSyncEnabled(const bool VSync) { UGameUserSettings* Settings = GetGameUserSettings(); if(!Settings) { return false; } Settings->SetVSyncEnabled(VSync); return true; }
// Change the current screen resolution bool UBpVideoSettingsLib::ChangeScreenResolution(const int32 Width, const int32 Height, const bool Fullscreen) { UGameUserSettings* Settings = GetGameUserSettings(); if(!Settings) { return false; } EWindowMode::Type WindowMode = Fullscreen ? EWindowMode::Fullscreen : EWindowMode::Windowed; Settings->RequestResolutionChange(Width, Height, WindowMode, false); return true; }
// Set the desired screen resolution (does not change it yet) bool UBpVideoSettingsLib::SetScreenResolution(const int32 Width, const int32 Height, const bool Fullscreen) { UGameUserSettings* Settings = GetGameUserSettings(); if(!Settings) { return false; } Settings->SetScreenResolution(FIntPoint(Width, Height)); Settings->SetFullscreenMode(Fullscreen ? EWindowMode::Fullscreen : EWindowMode::Windowed); return true; }
// Confirm and save current video mode (resolution and fullscreen/windowed) bool UBpVideoSettingsLib::SaveVideoModeAndQuality() { UGameUserSettings* Settings = GetGameUserSettings(); if(!Settings) { return false; } Settings->ConfirmVideoMode(); Settings->ApplySettings(false); return true; }
// Get the current video quality settings bool UBpVideoSettingsLib::GetVideoQualitySettings(int32& AntiAliasing, int32& Effects, int32& PostProcess, int32& Resolution, int32& Shadow, int32& Texture, int32& ViewDistance) { UGameUserSettings* Settings = GetGameUserSettings(); if(!Settings) { return false; } AntiAliasing = Settings->ScalabilityQuality.AntiAliasingQuality; Effects = Settings->ScalabilityQuality.EffectsQuality; PostProcess = Settings->ScalabilityQuality.PostProcessQuality; Resolution = Settings->ScalabilityQuality.ResolutionQuality; Shadow = Settings->ScalabilityQuality.ShadowQuality; Texture = Settings->ScalabilityQuality.TextureQuality; ViewDistance = Settings->ScalabilityQuality.ViewDistanceQuality; return true; }
// Set the quality settings (not applied nor saved yet) bool UBpVideoSettingsLib::SetVideoQualitySettings(const int32 AntiAliasing, const int32 Effects, const int32 PostProcess, const int32 Resolution, const int32 Shadow, const int32 Texture, const int32 ViewDistance) { UGameUserSettings* Settings = GetGameUserSettings(); if(!Settings) { return false; } Settings->ScalabilityQuality.AntiAliasingQuality = AntiAliasing; Settings->ScalabilityQuality.EffectsQuality = Effects; Settings->ScalabilityQuality.PostProcessQuality = PostProcess; Settings->ScalabilityQuality.ResolutionQuality = Resolution; Settings->ScalabilityQuality.ShadowQuality = Shadow; Settings->ScalabilityQuality.TextureQuality = Texture; Settings->ScalabilityQuality.ViewDistanceQuality = ViewDistance; return true; }
bool UGameEngine::HandleApplyUserSettingsCommand( const TCHAR* Cmd, FOutputDevice& Ar ) { GetGameUserSettings()->ApplySettings(false); return true; }
void UGameEngine::Init(IEngineLoop* InEngineLoop) { DECLARE_SCOPE_CYCLE_COUNTER(TEXT("UGameEngine Init"), STAT_GameEngineStartup, STATGROUP_LoadTime); // Call base. UEngine::Init(InEngineLoop); #if USE_NETWORK_PROFILER FString NetworkProfilerTag; if( FParse::Value(FCommandLine::Get(), TEXT("NETWORKPROFILER="), NetworkProfilerTag ) ) { GNetworkProfiler.EnableTracking(true); } #endif // Load all of the engine modules that we need at startup that are not editor-related UGameEngine::LoadRuntimeEngineStartupModules(); // Load and apply user game settings GetGameUserSettings()->LoadSettings(); GetGameUserSettings()->ApplyNonResolutionSettings(); // Create game instance. For GameEngine, this should be the only GameInstance that ever gets created. { FStringClassReference GameInstanceClassName = GetDefault<UGameMapsSettings>()->GameInstanceClass; UClass* GameInstanceClass = (GameInstanceClassName.IsValid() ? LoadObject<UClass>(NULL, *GameInstanceClassName.ToString()) : UGameInstance::StaticClass()); GameInstance = NewObject<UGameInstance>(this, GameInstanceClass); GameInstance->InitializeStandalone(); } // // Creates the initial world context. For GameEngine, this should be the only WorldContext that ever gets created. // FWorldContext& InitialWorldContext = CreateNewWorldContext(EWorldType::Game); // Initialize the viewport client. UGameViewportClient* ViewportClient = NULL; if(GIsClient) { ViewportClient = NewObject<UGameViewportClient>(this, GameViewportClientClass); ViewportClient->Init(*GameInstance->GetWorldContext(), GameInstance); GameViewport = ViewportClient; GameInstance->GetWorldContext()->GameViewport = ViewportClient; } bCheckForMovieCapture = true; // Attach the viewport client to a new viewport. if(ViewportClient) { // This must be created before any gameplay code adds widgets bool bWindowAlreadyExists = GameViewportWindow.IsValid(); if (!bWindowAlreadyExists) { GameViewportWindow = CreateGameWindow(); } CreateGameViewport( ViewportClient ); if( !bWindowAlreadyExists ) { SwitchGameWindowToUseGameViewport(); } FString Error; if(ViewportClient->SetupInitialLocalPlayer(Error) == NULL) { UE_LOG(LogEngine, Fatal,TEXT("%s"),*Error); } UGameViewportClient::OnViewportCreated().Broadcast(); } GameInstance->StartGameInstance(); UE_LOG(LogInit, Display, TEXT("Game Engine Initialized.") ); // for IsInitialized() bIsInitialized = true; }
void UGameEngine::OnGameWindowMoved( const TSharedRef<SWindow>& WindowBeingMoved ) { const FSlateRect WindowRect = WindowBeingMoved->GetRectInScreen(); GetGameUserSettings()->SetWindowPosition(WindowRect.Left, WindowRect.Top); GetGameUserSettings()->SaveConfig(); }
void UGameEngine::Init(IEngineLoop* InEngineLoop) { DECLARE_SCOPE_CYCLE_COUNTER(TEXT("UGameEngine Init"), STAT_GameEngineStartup, STATGROUP_LoadTime); // Call base. UEngine::Init(InEngineLoop); #if USE_NETWORK_PROFILER FString NetworkProfilerTag; if( FParse::Value(FCommandLine::Get(), TEXT("NETWORKPROFILER="), NetworkProfilerTag ) ) { GNetworkProfiler.EnableTracking(true); } #endif // Load and apply user game settings GetGameUserSettings()->LoadSettings(); GetGameUserSettings()->ApplySettings(); // Creates the initial world context. For GameEngine, this should be the only WorldContext that ever gets created. FWorldContext &InitialWorldContext = CreateNewWorldContext(EWorldType::Game); // Initialize the viewport client. UGameViewportClient* ViewportClient = NULL; if(GIsClient) { ViewportClient = ConstructObject<UGameViewportClient>(GameViewportClientClass,this); ViewportClient->SetReferenceToWorldContext(InitialWorldContext); GameViewport = ViewportClient; InitialWorldContext.GameViewport = ViewportClient; } bCheckForMovieCapture = true; // Attach the viewport client to a new viewport. if(ViewportClient) { // This must be created before any gameplay code adds widgets bool bWindowAlreadyExists = GameViewportWindow.IsValid(); if (!bWindowAlreadyExists) { GameViewportWindow = CreateGameWindow(); } CreateGameViewport( ViewportClient ); if( !bWindowAlreadyExists ) { SwitchGameWindowToUseGameViewport(); } FString Error; if(!ViewportClient->Init(Error)) { UE_LOG(LogEngine, Fatal,TEXT("%s"),*Error); } } // Create default URL. // @note: if we change how we determine the valid start up map update LaunchEngineLoop's GetStartupMap() FURL DefaultURL; DefaultURL.LoadURLConfig( TEXT("DefaultPlayer"), GGameIni ); // Enter initial world. EBrowseReturnVal::Type BrowseRet = EBrowseReturnVal::Failure; FString Error; TCHAR Parm[4096]=TEXT(""); const TCHAR* Tmp = FCommandLine::Get(); #if UE_BUILD_SHIPPING // In shipping don't allow an override Tmp = TEXT(""); #endif // UE_BUILD_SHIPPING const UGameMapsSettings* GameMapsSettings = GetDefault<UGameMapsSettings>(); const FString& DefaultMap = GameMapsSettings->GetGameDefaultMap(); if (!FParse::Token(Tmp, Parm, ARRAY_COUNT(Parm), 0) || Parm[0] == '-') { FCString::Strcpy(Parm, *(DefaultMap + GameMapsSettings->LocalMapOptions)); } FURL URL( &DefaultURL, Parm, TRAVEL_Partial ); if( URL.Valid ) { BrowseRet = Browse(InitialWorldContext, URL, Error ); } // If waiting for a network connection, go into the starting level. if (BrowseRet != EBrowseReturnVal::Success && FCString::Stricmp(Parm, *DefaultMap) != 0) { const FText Message = FText::Format( NSLOCTEXT("Engine", "MapNotFound", "The map specified on the commandline '{0}' could not be found. Would you like to load the default map instead?"), FText::FromString( URL.Map ) ); // the map specified on the command-line couldn't be loaded. ask the user if we should load the default map instead if ( FCString::Stricmp(*URL.Map, *DefaultMap) != 0 && FMessageDialog::Open( EAppMsgType::OkCancel, Message ) != EAppReturnType::Ok) { // user canceled (maybe a typo while attempting to run a commandlet) FPlatformMisc::RequestExit( false ); return; } else { BrowseRet = Browse(InitialWorldContext, FURL(&DefaultURL, *(DefaultMap + GameMapsSettings->LocalMapOptions), TRAVEL_Partial), Error); } } // Handle failure. if( BrowseRet != EBrowseReturnVal::Success ) { UE_LOG(LogLoad, Fatal, TEXT("%s"), *FString::Printf( TEXT("Failed to enter %s: %s. Please check the log for errors."), Parm, *Error) ); } UE_LOG(LogInit, Display, TEXT("Game Engine Initialized.") ); // for IsInitialized() bIsInitialized = true; }