Files
UnrealEngine/Engine/Source/Editor/AdvancedPreviewScene/Public/AdvancedPreviewScene.h
2025-05-18 13:04:45 +08:00

129 lines
4.4 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
/*=============================================================================
PrettyPreviewScene.h: Pretty preview scene definitions.
=============================================================================*/
#pragma once
#include "CoreMinimal.h"
#include "AssetViewerSettings.h"
#include "UnrealClient.h"
#include "Stats/Stats.h"
#include "InputCoreTypes.h"
#include "PreviewScene.h"
#include "TickableEditorObject.h"
class FViewport;
class UAssetViewerSettings;
class UMaterialInstanceConstant;
class UPostProcessComponent;
class USkyLightComponent;
class UStaticMeshComponent;
class USphereReflectionCaptureComponent;
struct FPreviewSceneProfile;
class FUICommandList;
class ADVANCEDPREVIEWSCENE_API FAdvancedPreviewScene : public FPreviewScene, public FTickableEditorObject
{
public:
/** An event for when a profile changes. Includes the changed profile and (optionally) the name of the property in the profile that changed. */
DECLARE_MULTICAST_DELEGATE_TwoParams(FOnProfileChanged, const FPreviewSceneProfile&, FName);
FAdvancedPreviewScene(ConstructionValues CVS, float InFloorOffset = 0.0f);
~FAdvancedPreviewScene();
void UpdateScene(FPreviewSceneProfile& Profile, bool bUpdateSkyLight = true, bool bUpdateEnvironment = true, bool bUpdatePostProcessing = true, bool bUpdateDirectionalLight = true);
/** Begin FPreviewScene */
virtual FLinearColor GetBackgroundColor() const override;
/** End FPreviewScene */
/* Begin FTickableEditorObject */
virtual void Tick(float DeltaTime) override;
virtual ETickableTickType GetTickableTickType() const override { return ETickableTickType::Always; }
virtual TStatId GetStatId() const override;
/* End FTickableEditorObject */
FOnProfileChanged& OnProfileChanged() { return OnProfileChangedDelegate; }
const bool HandleViewportInput(FViewport* InViewport, FInputDeviceId DeviceId, FKey Key, float Delta, float DeltaTime, int32 NumSamples, bool bGamepad);
const bool HandleInputKey(const FInputKeyEventArgs& EventArgs);
void SetSkyRotation(const float SkyRotation);
/* Sets the visiblity state for the floor/environment by storing it in the scene profile and refreshing the scene, in case bDirect is true it sets the visibility directly and leaves the profile untouched. */
bool GetFloorVisibility() const;
void SetFloorVisibility(const bool bVisible, const bool bDirect = false);
void SetEnvironmentVisibility(const bool bVisible, const bool bDirect = false);
float GetFloorOffset() const;
void SetFloorOffset(const float InFloorOffset);
void SetProfileIndex(const int32 InProfileIndex);
FPreviewSceneProfile* GetCurrentProfile() const;
const UStaticMeshComponent* GetFloorMeshComponent() const;
const float GetSkyRotation() const;
const int32 GetCurrentProfileIndex() const;
const bool IsUsingPostProcessing() const;
TSharedPtr<FUICommandList> GetCommandList() const { return UICommandList; }
/** Toggle the sky sphere on and off */
void HandleToggleEnvironment();
/** Whether the sky sphere is on. */
bool IsEnvironmentEnabled() const;
/** Toggle the floor mesh on and off */
void HandleToggleFloor();
/** Whether the floor is on */
bool IsFloorEnabled() const;
/** Toggle the grid on and off. */
void HandleToggleGrid();
/** Whether the grid is enabled. */
bool IsGridEnabled() const;
/** Toggle post processing on and off */
void HandleTogglePostProcessing();
/** Whether post processing is enabled */
bool IsPostProcessingEnabled() const;
protected:
/** Create and map the command list. */
virtual void BindCommands();
/** Add commands to a provided command list. */
virtual TSharedRef<FUICommandList> CreateCommandList();
/** Handle refreshing the scene when settings change */
void OnAssetViewerSettingsRefresh(const FName& InPropertyName);
protected:
FOnProfileChanged OnProfileChangedDelegate;
UStaticMeshComponent* SkyComponent;
UMaterialInstanceConstant* InstancedSkyMaterial;
UPostProcessComponent* PostProcessComponent;
UStaticMeshComponent* FloorMeshComponent;
UAssetViewerSettings* DefaultSettings;
bool bRotateLighting;
float CurrentRotationSpeed;
float PreviousRotation;
float UILightingRigRotationDelta;
bool bSkyChanged;
bool bPostProcessing;
int32 CurrentProfileIndex;
/** Command list for input handling */
TSharedPtr<FUICommandList> UICommandList;
/** Delegate handle used to refresh the scene when settings change */
FDelegateHandle RefreshDelegate;
};