112 lines
3.9 KiB
C++
112 lines
3.9 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "LyraEditorEngine.h"
|
|
|
|
#include "Development/LyraDeveloperSettings.h"
|
|
#include "Development/LyraPlatformEmulationSettings.h"
|
|
#include "Engine/World.h"
|
|
#include "Framework/Commands/InputBindingManager.h"
|
|
#include "Framework/Commands/InputChord.h"
|
|
#include "Framework/Commands/UICommandInfo.h"
|
|
#include "Framework/Notifications/NotificationManager.h"
|
|
#include "GameModes/LyraWorldSettings.h"
|
|
#include "InputCoreTypes.h"
|
|
#include "Internationalization/Internationalization.h"
|
|
#include "Misc/AssertionMacros.h"
|
|
#include "Misc/Optional.h"
|
|
#include "PlayInEditorDataTypes.h"
|
|
#include "Settings/ContentBrowserSettings.h"
|
|
#include "Settings/LevelEditorPlaySettings.h"
|
|
#include "Templates/Casts.h"
|
|
#include "Templates/SharedPointer.h"
|
|
#include "UObject/ObjectPtr.h"
|
|
#include "Widgets/Notifications/SNotificationList.h"
|
|
|
|
class IEngineLoop;
|
|
|
|
#define LOCTEXT_NAMESPACE "LyraEditor"
|
|
|
|
ULyraEditorEngine::ULyraEditorEngine(const FObjectInitializer& ObjectInitializer)
|
|
: Super(ObjectInitializer)
|
|
{
|
|
}
|
|
|
|
void ULyraEditorEngine::Init(IEngineLoop* InEngineLoop)
|
|
{
|
|
Super::Init(InEngineLoop);
|
|
}
|
|
|
|
void ULyraEditorEngine::Start()
|
|
{
|
|
Super::Start();
|
|
}
|
|
|
|
void ULyraEditorEngine::Tick(float DeltaSeconds, bool bIdleMode)
|
|
{
|
|
Super::Tick(DeltaSeconds, bIdleMode);
|
|
|
|
FirstTickSetup();
|
|
}
|
|
|
|
void ULyraEditorEngine::FirstTickSetup()
|
|
{
|
|
if (bFirstTickSetup)
|
|
{
|
|
return;
|
|
}
|
|
|
|
bFirstTickSetup = true;
|
|
|
|
// Force show plugin content on load.
|
|
GetMutableDefault<UContentBrowserSettings>()->SetDisplayPluginFolders(true);
|
|
|
|
// Set PIE to default to Shift+Escape if no user overrides have been set.
|
|
{
|
|
FInputChord OutPrimaryChord, OutSecondaryChord;
|
|
FInputBindingManager::Get().GetUserDefinedChord("PlayWorld", "StopPlaySession", EMultipleKeyBindingIndex::Primary, OutPrimaryChord);
|
|
FInputBindingManager::Get().GetUserDefinedChord("PlayWorld", "StopPlaySession", EMultipleKeyBindingIndex::Secondary, OutSecondaryChord);
|
|
|
|
// Is there already a user setting for stopping PIE? Then don't do this.
|
|
if (!(OutPrimaryChord.IsValidChord() || OutSecondaryChord.IsValidChord()))
|
|
{
|
|
TSharedPtr<FUICommandInfo> StopCommand = FInputBindingManager::Get().FindCommandInContext("PlayWorld", "StopPlaySession");
|
|
if (ensure(StopCommand))
|
|
{
|
|
// Shift+Escape to exit PIE. Some folks like Ctrl+Q, if that's the case, change it here for your team.
|
|
StopCommand->SetActiveChord(FInputChord(EKeys::Escape, true, false, false, false), EMultipleKeyBindingIndex::Primary);
|
|
FInputBindingManager::Get().NotifyActiveChordChanged(*StopCommand, EMultipleKeyBindingIndex::Primary);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
FGameInstancePIEResult ULyraEditorEngine::PreCreatePIEInstances(const bool bAnyBlueprintErrors, const bool bStartInSpectatorMode, const float PIEStartTime, const bool bSupportsOnlinePIE, int32& InNumOnlinePIEInstances)
|
|
{
|
|
if (const ALyraWorldSettings* LyraWorldSettings = Cast<ALyraWorldSettings>(EditorWorld->GetWorldSettings()))
|
|
{
|
|
if (LyraWorldSettings->ForceStandaloneNetMode)
|
|
{
|
|
EPlayNetMode OutPlayNetMode;
|
|
PlaySessionRequest->EditorPlaySettings->GetPlayNetMode(OutPlayNetMode);
|
|
if (OutPlayNetMode != PIE_Standalone)
|
|
{
|
|
PlaySessionRequest->EditorPlaySettings->SetPlayNetMode(PIE_Standalone);
|
|
|
|
FNotificationInfo Info(LOCTEXT("ForcingStandaloneForFrontend", "Forcing NetMode: Standalone for the Frontend"));
|
|
Info.ExpireDuration = 2.0f;
|
|
FSlateNotificationManager::Get().AddNotification(Info);
|
|
}
|
|
}
|
|
}
|
|
|
|
//@TODO: Should add delegates that a *non-editor* module could bind to for PIE start/stop instead of poking directly
|
|
GetDefault<ULyraDeveloperSettings>()->OnPlayInEditorStarted();
|
|
GetDefault<ULyraPlatformEmulationSettings>()->OnPlayInEditorStarted();
|
|
|
|
//
|
|
FGameInstancePIEResult Result = Super::PreCreatePIEServerInstance(bAnyBlueprintErrors, bStartInSpectatorMode, PIEStartTime, bSupportsOnlinePIE, InNumOnlinePIEInstances);
|
|
|
|
return Result;
|
|
}
|
|
|
|
#undef LOCTEXT_NAMESPACE |