121 lines
3.1 KiB
C++
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;
|
|
};
|