#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 MakeEditorViewportClient() override; virtual void OnFocusViewportToSelection() override; virtual bool IsVisible() const override; // End of SEditorViewport interface private: // The preview scene TSharedPtr PreviewScene; // The viewport client TSharedPtr ViewportClient; // The preview manager TObjectPtr PreviewManager; // The preview actor TObjectPtr 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& 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 ViewportWidget; // The preview manager TObjectPtr PreviewManager; };