// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Containers/Map.h" #include "Framework/Commands/Commands.h" #include "Framework/Commands/UICommandInfo.h" #include "Framework/MultiBox/MultiBoxBuilder.h" #include "HAL/Platform.h" #include "Templates/SharedPointer.h" #include "UObject/NameTypes.h" #define UE_API COMMONMENUEXTENSIONS_API class FEditorViewportClient; class FMenuBuilder; class FUICommandInfo; class FUICommandList; UE_DECLARE_TCOMMANDS(class FVirtualShadowMapVisualizationMenuCommands, UE_API) class FVirtualShadowMapVisualizationMenuCommands : public TCommands { public: // Re-sort into categories for the menu enum class FVirtualShadowMapVisualizationType : uint8 { Standard, Advanced, }; struct FVirtualShadowMapVisualizationRecord { FName Name; TSharedPtr Command; FVirtualShadowMapVisualizationType Type; FVirtualShadowMapVisualizationRecord() : Name() , Command() , Type(FVirtualShadowMapVisualizationType::Standard) { } }; typedef TMultiMap TVirtualShadowMapVisualizationModeCommandMap; typedef TVirtualShadowMapVisualizationModeCommandMap::TConstIterator TCommandConstIterator; UE_API FVirtualShadowMapVisualizationMenuCommands(); UE_API TCommandConstIterator CreateCommandConstIterator() const; static UE_API void BuildVisualisationSubMenu(FMenuBuilder& Menu); UE_API virtual void RegisterCommands() override; UE_API void BindCommands(FUICommandList& CommandList, const TSharedPtr& Client) const; inline bool IsPopulated() const { return CommandMap.Num() > 0; } private: void BuildCommandMap(); bool AddCommandTypeToMenu(FMenuBuilder& Menu, const FVirtualShadowMapVisualizationType Type, bool bSeparatorBefore = false) const; static void ChangeVirtualShadowMapVisualizationMode(TWeakPtr WeakClient, FName InName); static bool IsVirtualShadowMapVisualizationModeSelected(TWeakPtr WeakClient, FName InName); private: TVirtualShadowMapVisualizationModeCommandMap CommandMap; TSharedPtr ShowStatsCommand; TSharedPtr VisualizeNextLightCommand; TSharedPtr VisualizePrevLightCommand; }; #undef UE_API