void AGameplayDebuggerReplicator::OnDebugAIDelegate(class UCanvas* Canvas, class APlayerController* PC)
{
#if WITH_EDITOR && ENABLED_GAMEPLAY_DEBUGGER
	if (!GIsEditor)
	{
		return;
	}

	if (!LocalPlayerOwner)
	{
		return;
	}

	UEditorEngine* EEngine = Cast<UEditorEngine>(GEngine);
	if (!EEngine || !EEngine->bIsSimulatingInEditor)
	{
		return;
	}

	if (!Canvas || !Canvas->SceneView || Canvas->SceneView->bIsGameView == false)
	{
		return;
	}

	FEngineShowFlags EngineShowFlags = Canvas && Canvas->SceneView && Canvas->SceneView->Family ? Canvas->SceneView->Family->EngineShowFlags : FEngineShowFlags(GIsEditor ? EShowFlagInitMode::ESFIM_Editor : EShowFlagInitMode::ESFIM_Game);
	if (!EngineShowFlags.DebugAI)
	{
		return;
	}

	EnableDraw(true);
	UWorld* World = GetWorld();
	if (World && Role == ROLE_Authority)
	{
		if (IsActorTickEnabled() == false)
		{
			SetActorTickEnabled(true);
		}

		// looks like Simulate in UE4 Editor - let's find selected Pawn to debug
		AActor* SelectedActor = nullptr;
		for (FSelectionIterator It = EEngine->GetSelectedActorIterator(); It; ++It)
		{
			SelectedActor = Cast<APawn>(*It); //we only work with pawns for now
			if (SelectedActor)
			{
				break;
			}
		}

		if (LastSelectedActorToDebug != SelectedActor)
		{
			MarkComponentsRenderStateDirty();
		}

		ServerSetActorToDebug(SelectedActor);
		DrawDebugData(Canvas, PC, true);
	}
#endif
}
FSkeletonEditor::~FSkeletonEditor()
{
	UEditorEngine* Editor = Cast<UEditorEngine>(GEngine);
	if (Editor != nullptr)
	{
		Editor->UnregisterForUndo(this);
	}
}
FSubstanceEditor::~FSubstanceEditor()
{
	UEditorEngine* Editor = (UEditorEngine*)GEngine;
	if (Editor != NULL)
	{
		Editor->UnregisterForUndo(this);
		Editor->OnObjectReimported().RemoveAll(this);
	}
}
Beispiel #4
0
/** Helper function for acquiring the appropriate FSceneViewport */
FSceneViewport* FindSceneViewport()
{
	if (!GIsEditor)
	{
		UGameEngine* GameEngine = Cast<UGameEngine>(GEngine);
		return GameEngine->SceneViewport.Get();
	}
#if WITH_EDITOR
	else
	{
		UEditorEngine* EditorEngine = Cast<UEditorEngine>(GEngine);
		return (FSceneViewport*)(EditorEngine->GetPIEViewport());
	}
#endif
	return nullptr;
}
UWorld* FLogVisualizer::GetWorld(UObject* OptionalObject)
{
    UWorld* World = OptionalObject != nullptr ? GEngine->GetWorldFromContextObject(OptionalObject, false) : nullptr;
#if WITH_EDITOR
    if (!World && GIsEditor)
    {
        UEditorEngine *EEngine = Cast<UEditorEngine>(GEngine);
        // lets use PlayWorld during PIE/Simulate and regular world from editor otherwise, to draw debug information
        World = EEngine != nullptr && EEngine->PlayWorld != nullptr ? EEngine->PlayWorld : EEngine->GetEditorWorldContext().World();

    }
    else
#endif
        if (!World && !GIsEditor)
        {

            World = GEngine->GetWorld();
        }

    if (World == nullptr)
    {
        World = GWorld;
    }

    return World;
}
SVisualLogger::~SVisualLogger()
{
	UWorld* World = NULL;
#if WITH_EDITOR
	FCategoryFiltersManager::Get().SavePresistentData();

	UEditorEngine *EEngine = Cast<UEditorEngine>(GEngine);
	if (GIsEditor && EEngine != NULL)
	{
		// lets use PlayWorld during PIE/Simulate and regular world from editor otherwise, to draw debug information
		World = EEngine->PlayWorld != NULL ? EEngine->PlayWorld : EEngine->GetEditorWorldContext().World();

	}
	else
#endif
	if (!GIsEditor)
	{
	World = GEngine->GetWorld();
	}

	if (World == NULL)
	{
		World = GWorld;
	}

	if (World)
	{
		for (TActorIterator<AVisualLoggerRenderingActor> It(World); It; ++It)
		{
			World->DestroyActor(*It);
		}
	}

	UDebugDrawService::Unregister(DrawOnCanvasDelegateHandle);
	VisualLoggerCanvasRenderer.Reset();

	FVisualLogger::Get().RemoveDevice(InternalDevice.Get());
	InternalDevice.Reset();
}
Beispiel #7
0
bool FOSVRHMD::EnableStereo(bool bStereo)
{
    bool bNewSteroEnabled = IsHMDConnected() ? bStereo : false;
    if (bNewSteroEnabled == bStereoEnabled)
    {
        return bStereoEnabled;
    }
    bStereoEnabled = bNewSteroEnabled;

    if (bStereoEnabled)
    {
        StartCustomPresent();
    }
    else
    {
        StopCustomPresent();
    }

    if (bHmdEnabled != bStereoEnabled)
    {
        EnableHMD(bStereoEnabled);
    }

    auto leftEye = HMDDescription.GetDisplaySize(OSVRHMDDescription::LEFT_EYE);
    auto rightEye = HMDDescription.GetDisplaySize(OSVRHMDDescription::RIGHT_EYE);
    auto width = leftEye.X + rightEye.X;
    auto height = leftEye.Y;

    GetRenderTargetSize_GameThread(width, height, width, height);

    // On Android, we currently use the resolution Unreal sets for us, bypassing OSVR
    // We may revisit once display plugins are added to OSVR-Core.
#if !PLATFORM_ANDROID
    FSystemResolution::RequestResolutionChange(width, height, EWindowMode::Windowed);
#endif


    FSceneViewport* sceneViewport;
    if (!GIsEditor)
    {
        //UE_LOG(OSVRHMDLog, Warning, TEXT("OSVR getting UGameEngine::SceneViewport viewport"));
        UGameEngine* gameEngine = Cast<UGameEngine>(GEngine);
        sceneViewport = gameEngine->SceneViewport.Get();
    }
#if WITH_EDITOR
    else
    {
        //UE_LOG(OSVRHMDLog, Warning, TEXT("OSVR getting editor viewport"));
        UEditorEngine* editorEngine = CastChecked<UEditorEngine>(GEngine);
        sceneViewport = (FSceneViewport*)editorEngine->GetPIEViewport();
        if (sceneViewport == nullptr || !sceneViewport->IsStereoRenderingAllowed())
        {
            sceneViewport = (FSceneViewport*)editorEngine->GetActiveViewport();
            if (sceneViewport != nullptr && !sceneViewport->IsStereoRenderingAllowed())
            {
                sceneViewport = nullptr;
            }
    }
}
#endif

    if (!sceneViewport)
    {
        UE_LOG(OSVRHMDLog, Warning, TEXT("OSVR scene viewport does not exist"));
        return false;
    }
    else
    {
        //UE_LOG(OSVRHMDLog, Warning, TEXT("OSVR scene viewport exists"));
#if !WITH_EDITOR
        auto window = sceneViewport->FindWindow();
#endif
        if (bStereo)
        {
            //UE_LOG(OSVRHMDLog, Warning, TEXT("OSVR bStereo was true"));
            // the render targets may be larger or smaller than the display resolution
            // due to renderOverfillFactor and renderOversampleFactor settings
            // The viewports should match the render target size not the display size
            //if (mCustomPresent)
            //{
            //uint32 iWidth, iHeight;
            //mCustomPresent->CalculateRenderTargetSize(iWidth, iHeight);
            //float screenScale = GetScreenScale();
            //width = float(iWidth) * (1.0f / screenScale);
            //height = float(iHeight) * (1.0f / screenScale);
            //}
            //else
            //{
            // temporary workaround. The above code doesn't work because when the game
            // is packaged, mCustomPresent is not initialized before this call. In the editor, it is.
            // calling CalculateRenderTargetSize when mCustomPresent isn't initialized
            // results in Initialize being called, which has to be done on the render thread.
            // The proper fix is to move the render target size API from render manager to OSVR-Core
            // so we don't need a graphics context to calculate them. In the meantime, we'll
            // implement this temporary workaround (parse the renderManagerConfig manually and
            // calculate the render target sizes ourselves).

            //}
            //UE_LOG(OSVRHMDLog, Warning, TEXT("OSVR Actually set viewport size"));
            sceneViewport->SetViewportSize(width, height);
#if !WITH_EDITOR
            if (window.IsValid())
            {
                window->SetViewportSizeDrivenByWindow(false);
            }
#endif
        }
#if !WITH_EDITOR
        else
        {
            if (window.IsValid())
            {
                auto size = sceneViewport->FindWindow()->GetSizeInScreen();
                sceneViewport->SetViewportSize(size.X, size.Y);
                window->SetViewportSizeDrivenByWindow(true);
            }
        }
#endif
    }

    GEngine->bForceDisableFrameRateSmoothing = bStereo;

    return bStereoEnabled;
}