Files
FLESH/Source/FLESHEditor/Public/DismembermentGraph/SDismembermentPreviewViewport.h
2025-04-17 23:59:17 +08:00

121 lines
3.1 KiB
C++

#pragma once
#include "CoreMinimal.h"
#include "Widgets/SCompoundWidget.h"
#include "EditorViewportClient.h"
#include "SEditorViewport.h"
class UDismembermentPreviewManager;
class USkeletalMesh;
class AActor;
class FPreviewScene;
class SDismembermentPreviewViewportClient;
/**
* Viewport for previewing dismemberment effects
*/
class FLESHEDITOR_API SDismembermentPreviewViewport : public SEditorViewport
{
public:
SLATE_BEGIN_ARGS(SDismembermentPreviewViewport)
{}
SLATE_END_ARGS()
/**
* Constructs the viewport widget
*/
void Construct(const FArguments& InArgs);
/**
* Destructor
*/
virtual ~SDismembermentPreviewViewport();
/**
* Set the preview manager
* @param InPreviewManager - The preview manager to use
*/
void SetPreviewManager(UDismembermentPreviewManager* InPreviewManager);
/**
* Set the preview skeletal mesh
* @param InSkeletalMesh - The skeletal mesh to preview
*/
void SetPreviewSkeletalMesh(USkeletalMesh* InSkeletalMesh);
/**
* Get the preview actor
* @return The preview actor
*/
AActor* GetPreviewActor() const;
/**
* Refresh the viewport
*/
void RefreshViewport();
protected:
// SEditorViewport interface
virtual TSharedRef<FEditorViewportClient> MakeEditorViewportClient() override;
virtual void OnFocusViewportToSelection() override;
virtual bool IsVisible() const override;
// End of SEditorViewport interface
private:
// The preview scene
TSharedPtr<FPreviewScene> PreviewScene;
// The viewport client
TSharedPtr<SDismembermentPreviewViewportClient> ViewportClient;
// The preview manager
TObjectPtr<UDismembermentPreviewManager> PreviewManager;
// The preview actor
TObjectPtr<AActor> PreviewActor;
// Create the preview actor
void CreatePreviewActor();
// Update the preview actor
void UpdatePreviewActor();
};
/**
* Viewport client for previewing dismemberment effects
*/
class SDismembermentPreviewViewportClient : public FEditorViewportClient
{
public:
/**
* Constructor
* @param InPreviewScene - The preview scene
* @param InViewportWidget - The viewport widget
*/
SDismembermentPreviewViewportClient(FPreviewScene* InPreviewScene, const TWeakPtr<SDismembermentPreviewViewport>& InViewportWidget);
/**
* Destructor
*/
virtual ~SDismembermentPreviewViewportClient();
// FEditorViewportClient interface
virtual void Tick(float DeltaSeconds) override;
virtual void Draw(const FSceneView* View, FPrimitiveDrawInterface* PDI) override;
virtual void DrawCanvas(FViewport& InViewport, FSceneView& View, FCanvas& Canvas) override;
// End of FEditorViewportClient interface
/**
* Set the preview manager
* @param InPreviewManager - The preview manager to use
*/
void SetPreviewManager(UDismembermentPreviewManager* InPreviewManager);
private:
// The viewport widget
TWeakPtr<SDismembermentPreviewViewport> ViewportWidget;
// The preview manager
TObjectPtr<UDismembermentPreviewManager> PreviewManager;
};