Files
UnrealEngineUWP/Engine/Plugins/Runtime/GameFeatures/Source/GameFeaturesEditor/Private/GameFeaturePluginMetadataCustomization.cpp
ben zeigler 38d0d0d9c3 Move the GameFeatures and ModularGameplay plugins out of Experimental and put them in Runtime. The plugins have been considered as Beta since 5.2 but they were not moved at the time
The default templates for new game feature plugins were moved as part of this and you may need to update your game's defaulteditor.ini file if it overrides the defaults
#rb Eric.Knapik

[CL 31065946 by ben zeigler in ue5-main branch]
2024-01-31 16:54:18 -05:00

82 lines
2.6 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "GameFeaturePluginMetadataCustomization.h"
#include "DetailLayoutBuilder.h"
#include "DetailWidgetRow.h"
#include "Dom/JsonValue.h"
#include "Interfaces/IPluginManager.h"
#include "SGameFeatureStateWidget.h"
#include "GameFeaturesSubsystem.h"
#include "GameFeatureTypes.h"
#include "Widgets/Text/STextBlock.h"
#define LOCTEXT_NAMESPACE "GameFeatures"
//////////////////////////////////////////////////////////////////////////
// FGameFeaturePluginMetadataCustomization
void FGameFeaturePluginMetadataCustomization::CustomizeDetails(FPluginEditingContext& InPluginContext, IDetailLayoutBuilder& DetailBuilder)
{
Plugin = InPluginContext.PluginBeingEdited;
const EBuiltInAutoState AutoState = UGameFeaturesSubsystem::DetermineBuiltInInitialFeatureState(Plugin->GetDescriptor().CachedJson, FString());
InitialState = UGameFeaturesSubsystem::ConvertInitialFeatureStateToTargetState(AutoState);
IDetailCategoryBuilder& TopCategory = DetailBuilder.EditCategory("Game Features", FText::GetEmpty(), ECategoryPriority::Important);
FDetailWidgetRow& ControlRow = TopCategory.AddCustomRow(LOCTEXT("ControlSearchText", "Plugin State Control"))
.NameContent()
[
SNew(STextBlock)
.Text(LOCTEXT("InitialState", "Initial State"))
.Font(DetailBuilder.GetDetailFont())
]
.ValueContent()
[
SNew(SGameFeatureStateWidget)
.ToolTipText(LOCTEXT("DefaultStateSwitcherTooltip", "Change the default initial state of this game feature"))
.CurrentState(this, &FGameFeaturePluginMetadataCustomization::GetDefaultState)
.OnStateChanged(this, &FGameFeaturePluginMetadataCustomization::ChangeDefaultState)
];
}
void FGameFeaturePluginMetadataCustomization::CommitEdits(FPluginDescriptor& Descriptor)
{
FString StateStr;
switch (InitialState)
{
case EGameFeaturePluginState::Installed:
StateStr = TEXT("Installed");
break;
case EGameFeaturePluginState::Registered:
StateStr = TEXT("Registered");
break;
case EGameFeaturePluginState::Loaded:
StateStr = TEXT("Loaded");
break;
case EGameFeaturePluginState::Active:
StateStr = TEXT("Active");
break;
}
if (ensure(!StateStr.IsEmpty()))
{
Descriptor.AdditionalFieldsToWrite.FindOrAdd(TEXT("BuiltInInitialFeatureState")) = MakeShared<FJsonValueString>(StateStr);
}
}
EGameFeaturePluginState FGameFeaturePluginMetadataCustomization::GetDefaultState() const
{
return InitialState;
}
void FGameFeaturePluginMetadataCustomization::ChangeDefaultState(EGameFeaturePluginState DesiredState)
{
InitialState = DesiredState;
}
//////////////////////////////////////////////////////////////////////////
#undef LOCTEXT_NAMESPACE