2022-01-27 15:49:31 -05:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
|
|
|
|
|
|
#include "VirtualShadowMapVisualizationMenuCommands.h"
|
2022-08-30 23:03:03 -04:00
|
|
|
|
|
|
|
|
#include "Delegates/Delegate.h"
|
2022-01-27 15:49:31 -05:00
|
|
|
#include "EditorViewportClient.h"
|
2022-08-30 23:03:03 -04:00
|
|
|
#include "Framework/Commands/InputChord.h"
|
|
|
|
|
#include "Framework/Commands/UIAction.h"
|
|
|
|
|
#include "Framework/Commands/UICommandInfo.h"
|
|
|
|
|
#include "Framework/Commands/UICommandList.h"
|
|
|
|
|
#include "Framework/MultiBox/MultiBoxBuilder.h"
|
|
|
|
|
#include "HAL/IConsoleManager.h"
|
|
|
|
|
#include "Internationalization/Internationalization.h"
|
|
|
|
|
#include "Internationalization/Text.h"
|
|
|
|
|
#include "Misc/AssertionMacros.h"
|
|
|
|
|
#include "Styling/AppStyle.h"
|
|
|
|
|
#include "UObject/UnrealNames.h"
|
|
|
|
|
#include "VirtualShadowMapVisualizationData.h"
|
2022-01-27 15:49:31 -05:00
|
|
|
|
|
|
|
|
int32 GVirtualShadowMapVisualizeAdvanced = 0;
|
|
|
|
|
static FAutoConsoleVariableRef CVarVirtualShadowMapVisualizeAdvanced(
|
|
|
|
|
TEXT("r.Shadow.Virtual.Visualize.Advanced"),
|
|
|
|
|
GVirtualShadowMapVisualizeAdvanced,
|
|
|
|
|
TEXT("")
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
#define LOCTEXT_NAMESPACE "VirtualShadowMapVisualizationMenuCommands"
|
|
|
|
|
|
|
|
|
|
FVirtualShadowMapVisualizationMenuCommands::FVirtualShadowMapVisualizationMenuCommands()
|
|
|
|
|
: TCommands<FVirtualShadowMapVisualizationMenuCommands>
|
|
|
|
|
(
|
|
|
|
|
TEXT("VirtualShadowMapVisualizationMenu"), // Context name for fast lookup
|
|
|
|
|
NSLOCTEXT("Contexts", "VirtualShadowMapVisualizationMenu", "VirtualShadowMa Visualization"), // Localized context name for displaying
|
|
|
|
|
NAME_None, // Parent context name.
|
2022-05-09 13:51:26 -04:00
|
|
|
FAppStyle::GetAppStyleSetName() // Icon Style Set
|
2022-01-27 15:49:31 -05:00
|
|
|
),
|
|
|
|
|
CommandMap()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FVirtualShadowMapVisualizationMenuCommands::BuildCommandMap()
|
|
|
|
|
{
|
|
|
|
|
const FVirtualShadowMapVisualizationData& VisualizationData = GetVirtualShadowMapVisualizationData();
|
|
|
|
|
const FVirtualShadowMapVisualizationData::TModeMap& ModeMap = VisualizationData.GetModeMap();
|
|
|
|
|
|
|
|
|
|
CommandMap.Empty();
|
|
|
|
|
for (FVirtualShadowMapVisualizationData::TModeMap::TConstIterator It = ModeMap.CreateConstIterator(); It; ++It)
|
|
|
|
|
{
|
|
|
|
|
const FVirtualShadowMapVisualizationData::FModeRecord& Entry = It.Value();
|
|
|
|
|
FVirtualShadowMapVisualizationRecord& Record = CommandMap.Add(Entry.ModeName, FVirtualShadowMapVisualizationRecord());
|
|
|
|
|
Record.Name = Entry.ModeName;
|
|
|
|
|
Record.Command = FUICommandInfoDecl(
|
|
|
|
|
this->AsShared(),
|
|
|
|
|
Entry.ModeName,
|
|
|
|
|
Entry.ModeText,
|
|
|
|
|
Entry.ModeDesc)
|
|
|
|
|
.UserInterfaceType(EUserInterfaceActionType::RadioButton)
|
|
|
|
|
.DefaultChord(FInputChord());
|
|
|
|
|
|
|
|
|
|
switch (Entry.ModeType)
|
|
|
|
|
{
|
2022-02-02 08:19:08 -05:00
|
|
|
case FVirtualShadowMapVisualizationData::FModeType::Standard:
|
|
|
|
|
Record.Type = FVirtualShadowMapVisualizationType::Standard;
|
|
|
|
|
break;
|
|
|
|
|
|
2022-01-27 15:49:31 -05:00
|
|
|
default:
|
2022-02-02 08:19:08 -05:00
|
|
|
case FVirtualShadowMapVisualizationData::FModeType::Advanced:
|
|
|
|
|
Record.Type = FVirtualShadowMapVisualizationType::Advanced;
|
2022-01-27 15:49:31 -05:00
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FVirtualShadowMapVisualizationMenuCommands::BuildVisualisationSubMenu(FMenuBuilder& Menu)
|
|
|
|
|
{
|
|
|
|
|
const bool bShowAdvanced = GVirtualShadowMapVisualizeAdvanced != 0;
|
|
|
|
|
|
|
|
|
|
const FVirtualShadowMapVisualizationMenuCommands& Commands = FVirtualShadowMapVisualizationMenuCommands::Get();
|
|
|
|
|
if (Commands.IsPopulated())
|
|
|
|
|
{
|
|
|
|
|
Menu.BeginSection("LevelViewportVirtualShadowMapVisualizationMode", LOCTEXT("VirtualShadowMapVisualizationHeader", "Visualization Mode"));
|
|
|
|
|
|
2022-02-02 08:19:08 -05:00
|
|
|
Commands.AddCommandTypeToMenu(Menu, FVirtualShadowMapVisualizationType::Standard, false);
|
2022-01-27 15:49:31 -05:00
|
|
|
if (bShowAdvanced)
|
|
|
|
|
{
|
2022-02-02 08:19:08 -05:00
|
|
|
Commands.AddCommandTypeToMenu(Menu, FVirtualShadowMapVisualizationType::Advanced, true);
|
2022-01-27 15:49:31 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Menu.EndSection();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-02-02 08:19:08 -05:00
|
|
|
bool FVirtualShadowMapVisualizationMenuCommands::AddCommandTypeToMenu(FMenuBuilder& Menu, const FVirtualShadowMapVisualizationType Type, bool bSeparatorBefore) const
|
2022-01-27 15:49:31 -05:00
|
|
|
{
|
|
|
|
|
bool bAddedCommands = false;
|
|
|
|
|
|
|
|
|
|
const TVirtualShadowMapVisualizationModeCommandMap& Commands = CommandMap;
|
|
|
|
|
for (TCommandConstIterator It = CreateCommandConstIterator(); It; ++It)
|
|
|
|
|
{
|
|
|
|
|
const FVirtualShadowMapVisualizationRecord& Record = It.Value();
|
|
|
|
|
if (Record.Type == Type)
|
|
|
|
|
{
|
2022-02-02 08:19:08 -05:00
|
|
|
if (!bAddedCommands && bSeparatorBefore)
|
|
|
|
|
{
|
|
|
|
|
Menu.AddMenuSeparator();
|
|
|
|
|
}
|
2022-01-27 15:49:31 -05:00
|
|
|
Menu.AddMenuEntry(Record.Command, NAME_None, Record.Command->GetLabel());
|
|
|
|
|
bAddedCommands = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return bAddedCommands;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FVirtualShadowMapVisualizationMenuCommands::TCommandConstIterator FVirtualShadowMapVisualizationMenuCommands::CreateCommandConstIterator() const
|
|
|
|
|
{
|
|
|
|
|
return CommandMap.CreateConstIterator();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FVirtualShadowMapVisualizationMenuCommands::RegisterCommands()
|
|
|
|
|
{
|
|
|
|
|
BuildCommandMap();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FVirtualShadowMapVisualizationMenuCommands::BindCommands(FUICommandList& CommandList, const TSharedPtr<FEditorViewportClient>& Client) const
|
|
|
|
|
{
|
|
|
|
|
// Map Virtual shadow map visualization mode actions
|
|
|
|
|
for (FVirtualShadowMapVisualizationMenuCommands::TCommandConstIterator It = FVirtualShadowMapVisualizationMenuCommands::Get().CreateCommandConstIterator(); It; ++It)
|
|
|
|
|
{
|
|
|
|
|
const FVirtualShadowMapVisualizationMenuCommands::FVirtualShadowMapVisualizationRecord& Record = It.Value();
|
|
|
|
|
CommandList.MapAction(
|
|
|
|
|
Record.Command,
|
|
|
|
|
FExecuteAction::CreateStatic<const TSharedPtr<FEditorViewportClient>&>(&FVirtualShadowMapVisualizationMenuCommands::ChangeVirtualShadowMapVisualizationMode, Client, Record.Name),
|
|
|
|
|
FCanExecuteAction(),
|
|
|
|
|
FIsActionChecked::CreateStatic<const TSharedPtr<FEditorViewportClient>&>(&FVirtualShadowMapVisualizationMenuCommands::IsVirtualShadowMapVisualizationModeSelected, Client, Record.Name)
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FVirtualShadowMapVisualizationMenuCommands::ChangeVirtualShadowMapVisualizationMode(const TSharedPtr<FEditorViewportClient>& Client, FName InName)
|
|
|
|
|
{
|
|
|
|
|
check(Client.IsValid());
|
|
|
|
|
Client->ChangeVirtualShadowMapVisualizationMode(InName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool FVirtualShadowMapVisualizationMenuCommands::IsVirtualShadowMapVisualizationModeSelected(const TSharedPtr<FEditorViewportClient>& Client, FName InName)
|
|
|
|
|
{
|
|
|
|
|
check(Client.IsValid());
|
|
|
|
|
return Client->IsVirtualShadowMapVisualizationModeSelected(InName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#undef LOCTEXT_NAMESPACE
|