EM_Task/UnrealEd/Public/ComponentVisualizerManager.h
Boshuang Zhao 5144a49c9b add
2026-02-13 16:18:33 +08:00

72 lines
3.1 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "InputCoreTypes.h"
#include "ComponentVisualizer.h"
class FEditorViewportClient;
class FViewport;
class SWidget;
struct FViewportClick;
/** Class that managed active component visualizer and routes input to it */
class UNREALED_API FComponentVisualizerManager
{
public:
FComponentVisualizerManager();
virtual ~FComponentVisualizerManager() {}
/** Activate a component visualizer given a clicked proxy */
bool HandleProxyForComponentVis(FEditorViewportClient* InViewportClient, HHitProxy* HitProxy, const FViewportClick& Click);
/** Activate a component visualizer given the specific visualizer */
bool SetActiveComponentVis(FEditorViewportClient* InViewportClient, TSharedPtr<FComponentVisualizer>& InVisualizer);
/** Clear active component visualizer */
void ClearActiveComponentVis();
/** Handle a click on the specified level editor viewport client */
bool HandleClick(FEditorViewportClient* InViewportClient, HHitProxy* HitProxy, const FViewportClick& Click);
/** Pass key input to active visualizer */
bool HandleInputKey(FEditorViewportClient* InViewportClient, FViewport* Viewport, FKey Key, EInputEvent Event) const;
/** Pass delta input to active visualizer */
bool HandleInputDelta(FEditorViewportClient* InViewportClient, FViewport* InViewport, FVector& InDrag, FRotator& InRot, FVector& InScale) const;
/** Pass box select input to active visualizer */
bool HandleBoxSelect(const FBox& InBox, FEditorViewportClient* InViewportClient, FViewport* InViewport) const;
/** Pass frustum select input to active visualizer */
bool HandleFrustumSelect(const FConvexVolume& InFrustum, FEditorViewportClient* InViewportClient, FViewport* InViewport) const;
/** Return whether focus on selection should focus on bounding box defined by active visualizer */
bool HasFocusOnSelectionBoundingBox(FBox& OutBoundingBox) const;
/** Pass snap input to active visualizer */
bool HandleSnapTo(const bool bInAlign, const bool bInUseLineTrace, const bool bInUseBounds, const bool bInUsePivot, AActor* InDestination);
/** Get widget location from active visualizer */
bool GetWidgetLocation(const FEditorViewportClient* InViewportClient, FVector& OutLocation) const;
/** Get custom widget coordinate system from active visualizer */
bool GetCustomInputCoordinateSystem(const FEditorViewportClient* InViewportClient, FMatrix& OutMatrix) const;
/** Generate context menu for the component visualizer */
TSharedPtr<SWidget> GenerateContextMenuForComponentVis() const;
/** Returns whether there is currently an active visualizer */
bool IsActive() const;
/** Returns whether the component being visualized is an archetype or not */
bool IsVisualizingArchetype() const;
private:
/** Currently 'active' visualizer that we should pass input to etc */
TWeakPtr<class FComponentVisualizer> EditedVisualizerPtr;
/** The viewport client for the currently active visualizer */
FEditorViewportClient* EditedVisualizerViewportClient;
};