// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "SGraphNode.h" #include "Widgets/SBoxPanel.h" #include "Widgets/SInvalidationPanel.h" #include "SNiagaraOverviewStack.h" #include "ViewModels/NiagaraSystemScalabilityViewModel.h" class UNiagaraOverviewNode; class UNiagaraStackViewModel; class UNiagaraSystemSelectionViewModel; class FNiagaraEmitterHandleViewModel; class FAssetThumbnail; class UNiagaraStackEntry; class SNiagaraOverviewStackNode : public SGraphNode { public: enum class EDisplayMode : uint8 { Default, Summary }; SLATE_BEGIN_ARGS(SNiagaraOverviewStackNode) {} SLATE_END_ARGS() /** Constructs this widget with InArgs */ void Construct(const FArguments& InArgs, UNiagaraOverviewNode* InNode); virtual void Tick(const FGeometry& AllottedGeometry, const double InCurrentTime, const float InDeltaTime) override; virtual bool ShouldAllowCulling() const override { return false; } virtual ~SNiagaraOverviewStackNode() override; protected: void BindEditorDataDelegates(); void UnbindEditorDataDelegates() const; virtual TSharedRef CreateTitleWidget(TSharedPtr NodeTitle) override; virtual TSharedRef CreateTitleRightWidget() override; virtual TSharedRef CreateNodeContentArea() override; TSharedRef CreateTopContentBar(); TSharedRef CreateTitleWidget_Default(TSharedPtr NodeTitle); TSharedRef CreateTitleRightWidget_Default(); TSharedRef CreateNodeContentArea_Default(); TSharedRef CreateTopContentBar_Default(); TSharedRef CreateTitleWidget_Summary(TSharedPtr NodeTitle); TSharedRef CreateTitleRightWidget_Summary(); TSharedRef CreateNodeContentArea_Summary(); TSharedRef CreateTopContentBar_Summary(); virtual bool IsHidingPinWidgets() const override { return UseLowDetailNodeContent(); } bool UseLowDetailNodeContent() const; FVector2D GetLowDetailDesiredSize() const; FOptionalSize GetLowDetailDesiredWidth() const; FOptionalSize GetLowDetailDesiredHeight() const; FText GetLowDetailNodeTitle() const; TSharedRef CreateEnabledCheckbox(); TSharedRef CreateIsolateButton(); TSharedRef CreateEmitterThumbnail(); TSharedRef CreateEmitterRendererThumbnails(); TSharedRef CreateSummaryViewToggle(); TSharedRef CreateLocalSpaceToggle(); TSharedRef CreateCaptureThumbnailButton(); TSharedRef CreateOpenParentButton(); TSharedRef CreateVersionSelectorButton(); TSharedRef CreateScalabilityControls(); TSharedRef CreateSimTargetToggle(); TSharedRef CreateDeterminismToggle(); TSharedRef CreatePropertiesButton(); virtual void UpdateGraphNode() override; private: void RefreshEmitterThumbnailPreview(); virtual TOptional GetNameOverflowPolicy() const override; EVisibility GetIssueIconVisibility() const; EVisibility GetEnabledCheckBoxVisibility() const; ECheckBoxState GetEnabledCheckState() const; const FSlateBrush* GetEnabledImage() const; void OnEnabledCheckStateChanged(ECheckBoxState InCheckState); EVisibility GetShouldShowSummaryControls() const; FReply OnCaptureThumbnailButtonClicked(); FReply OnRendererThumbnailClicked(class UNiagaraStackRendererItem* StackRendererItem); FReply OnPropertiesButtonClicked() const; FText GetToggleIsolateToolTip() const; FReply OnToggleIsolateButtonClicked(); EVisibility GetToggleIsolateVisibility() const; const FSlateBrush* GetToggleIsolateImage() const; FSlateColor GetToggleIsolateImageColor() const; EVisibility GetScalabilityIndicatorVisibility() const; FSlateColor GetScalabilityTintAlpha() const; void OnScalabilityModeChanged(bool bActive); EVisibility ShowExcludedOverlay() const; float GetGraphZoomDistanceAlphaMultiplier() const; FText GetSpawnCountScaleText() const; FText GetSpawnCountScaleTooltip() const; EVisibility GetSpawnCountScaleTextVisibility() const; ECheckBoxState IsScalabilityModeActive() const; void OnScalabilityModeStateChanged(ECheckBoxState CheckBoxState); FReply OnCycleThroughIssues(); FReply OpenParentEmitter(); FText OpenParentEmitterTooltip() const; EVisibility GetOpenParentEmitterVisibility() const; EVisibility GetVersionSelectorVisibility() const; FSlateColor GetVersionSelectorColor() const; TSharedRef GetVersionSelectorDropdownMenu(); void SwitchToVersion(FNiagaraAssetVersion Version); UNiagaraOverviewNode* OverviewStackNode = nullptr; UNiagaraStackViewModel* StackViewModel = nullptr; UNiagaraSystemSelectionViewModel* OverviewSelectionViewModel = nullptr; TWeakObjectPtr ScalabilityViewModel; TWeakPtr EmitterHandleViewModelWeak; TSharedPtr ScalabilityWrapper; TSharedPtr ContentAreaWidget; TArray RendererPreviewStackEntries; int32 CurrentIssueIndex = 0; bool bScalabilityModeActive = false; EDisplayMode DisplayMode = EDisplayMode::Default; /** Cached size from when we last drew at high detail */ FVector2D LastHighDetailSize = FVector2D::ZeroVector; int32 GeometryTickForSize = 3; mutable TPair LowDetailTitleCache; TSharedPtr ThumbnailContainer; TSharedPtr PreviewThumbnail; };