You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
#preflight 6355d4940313c24974b2107b #rb none [CL 22783162 by henrik karlsson in ue5-main branch]
305 lines
7.6 KiB
C++
305 lines
7.6 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "MuCO/UnrealPortabilityHelpers.h"
|
|
#include "Engine/Texture2D.h"
|
|
#include "UObject/ObjectMacros.h"
|
|
#include "MuCO/CustomizableObjectParameterTypeDefinitions.h"
|
|
#include "MuCO/CustomizableObjectCustomVersion.h"
|
|
#include "CustomizableObjectUIData.generated.h"
|
|
|
|
class UTexture2D;
|
|
|
|
|
|
USTRUCT(BlueprintType)
|
|
struct FMutableParamUIMetadata
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
FMutableParamUIMetadata()
|
|
: UIOrder(0)
|
|
{}
|
|
|
|
/** This is the name to be shown in UI */
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = UI)
|
|
FString ObjectFriendlyName;
|
|
|
|
/** This is the name of the section where the parameter will be placed in UI */
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = UI)
|
|
FString UISectionName;
|
|
|
|
/** This is the order of the parameter inside its section */
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = UI)
|
|
int32 UIOrder;
|
|
|
|
/** Thumnbail for UI */
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = UI)
|
|
TSoftObjectPtr<UTexture2D> UIThumbnail;
|
|
|
|
/** Extra information to be used in UI building, with semantics completely defined by the game/UI programmer, with a key to identify the semantic of its related value */
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = UI)
|
|
TMap<FString, FString> ExtraInformation;
|
|
|
|
/** Extra assets to be used in UI building */
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = UI)
|
|
TMap<FString, TSoftObjectPtr<UObject>> ExtraAssets;
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = UI)
|
|
float MinimumValue = 0.0f;
|
|
|
|
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = UI)
|
|
float MaximumValue = 1.0f;
|
|
|
|
bool operator ==(const FMutableParamUIMetadata& Other) const
|
|
{
|
|
if (ObjectFriendlyName != Other.ObjectFriendlyName || UISectionName != Other.UISectionName || UIOrder != Other.UIOrder || UIThumbnail != Other.UIThumbnail)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (!ExtraInformation.OrderIndependentCompareEqual(Other.ExtraInformation))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (!ExtraAssets.OrderIndependentCompareEqual(Other.ExtraAssets))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool operator !=(const FMutableParamUIMetadata& Other) const
|
|
{
|
|
return !(*this == Other);
|
|
}
|
|
|
|
friend FArchive& operator <<(FArchive& Ar, FMutableParamUIMetadata& Metadata)
|
|
{
|
|
Ar.UsingCustomVersion(FCustomizableObjectCustomVersion::GUID);
|
|
|
|
Ar << Metadata.ObjectFriendlyName;
|
|
Ar << Metadata.UISectionName;
|
|
Ar << Metadata.UIOrder;
|
|
|
|
//Ar << Metadata.UIThumbnail;
|
|
if (Ar.IsLoading())
|
|
{
|
|
FString StringRef;
|
|
Ar << StringRef;
|
|
Metadata.UIThumbnail = TSoftObjectPtr<UTexture2D>(FSoftObjectPath(StringRef));
|
|
}
|
|
else
|
|
{
|
|
FString StringRef = Metadata.UIThumbnail.ToSoftObjectPath().ToString();
|
|
Ar << StringRef;
|
|
}
|
|
|
|
Ar << Metadata.ExtraInformation;
|
|
|
|
//Ar << Metadata.ExtraAssets;
|
|
if (Ar.IsLoading())
|
|
{
|
|
int32 NumReferencedAssets = 0;
|
|
Ar << NumReferencedAssets;
|
|
Metadata.ExtraAssets.Empty(NumReferencedAssets);
|
|
|
|
for (int32 i = 0; i < NumReferencedAssets; ++i)
|
|
{
|
|
FString Key, StringRef;
|
|
Ar << Key;
|
|
Ar << StringRef;
|
|
|
|
Metadata.ExtraAssets.Add(Key, TSoftObjectPtr<UObject>(FSoftObjectPath(StringRef)));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int32 NumReferencedAssets = Metadata.ExtraAssets.Num();
|
|
Ar << NumReferencedAssets;
|
|
|
|
for (TPair<FString, TSoftObjectPtr<UObject>>& AssetPair : Metadata.ExtraAssets)
|
|
{
|
|
FString StringRef = AssetPair.Value.ToSoftObjectPath().ToString();
|
|
Ar << AssetPair.Key;
|
|
Ar << StringRef;
|
|
}
|
|
}
|
|
|
|
// Update structure
|
|
if (Ar.CustomVer(FCustomizableObjectCustomVersion::GUID) >= FCustomizableObjectCustomVersion::BeforeCustomVersionWasAdded)
|
|
{
|
|
Ar << Metadata.MinimumValue;
|
|
Ar << Metadata.MaximumValue;
|
|
}
|
|
|
|
return Ar;
|
|
}
|
|
|
|
#if WITH_EDITOR
|
|
|
|
/** Only called in the BeginCacheForCookPlatform to include new references in the final package */
|
|
void LoadResources()
|
|
{
|
|
UIThumbnail.LoadSynchronous();
|
|
|
|
for (const TPair<FString, TSoftObjectPtr<UObject>>& a : ExtraAssets)
|
|
{
|
|
a.Value.LoadSynchronous();
|
|
}
|
|
}
|
|
|
|
#endif
|
|
};
|
|
|
|
USTRUCT(BlueprintType)
|
|
struct FIntegerParameterUIData
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
FIntegerParameterUIData()
|
|
{
|
|
|
|
}
|
|
|
|
FIntegerParameterUIData(
|
|
const FString& ParamName,
|
|
const FMutableParamUIMetadata& InParamFriendlyName) :
|
|
Name(ParamName)
|
|
, ParamUIMetadata(InParamFriendlyName)
|
|
{
|
|
|
|
}
|
|
|
|
/** Integer parameter option name */
|
|
UPROPERTY(BlueprintReadWrite, Category = UI)
|
|
FString Name;
|
|
|
|
UPROPERTY(BlueprintReadWrite, Category = UI, meta = (DisplayName = "Parameter UI Metadata"))
|
|
FMutableParamUIMetadata ParamUIMetadata;
|
|
|
|
bool operator ==(const FIntegerParameterUIData& Other) const
|
|
{
|
|
if (Name != Other.Name || ParamUIMetadata != Other.ParamUIMetadata)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool operator !=(const FIntegerParameterUIData& Other) const
|
|
{
|
|
return !(*this == Other);
|
|
}
|
|
|
|
friend FArchive& operator <<(FArchive& Ar, FIntegerParameterUIData& UIData)
|
|
{
|
|
Ar << UIData.Name;
|
|
Ar << UIData.ParamUIMetadata;
|
|
|
|
return Ar;
|
|
}
|
|
|
|
#if WITH_EDITOR
|
|
|
|
/** Only called in the BeginCacheForCookPlatform to include new references in the final package */
|
|
void LoadResources()
|
|
{
|
|
ParamUIMetadata.LoadResources();
|
|
}
|
|
|
|
#endif
|
|
};
|
|
|
|
|
|
USTRUCT(BlueprintType)
|
|
struct FParameterUIData
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
FParameterUIData()
|
|
: Type(EMutableParameterType::None)
|
|
, IntegerParameterGroupType(ECustomizableObjectGroupType::COGT_ONE_OR_NONE)
|
|
{
|
|
|
|
}
|
|
|
|
FParameterUIData(
|
|
const FString& ParamName,
|
|
const FMutableParamUIMetadata& InParamUIMetadata,
|
|
EMutableParameterType ParamType) :
|
|
Name(ParamName),
|
|
ParamUIMetadata(InParamUIMetadata),
|
|
Type(ParamType),
|
|
IntegerParameterGroupType(ECustomizableObjectGroupType::COGT_ONE_OR_NONE)
|
|
{
|
|
|
|
}
|
|
|
|
/** Parameter name */
|
|
UPROPERTY(BlueprintReadWrite, Category = UI)
|
|
FString Name;
|
|
|
|
UPROPERTY(BlueprintReadWrite, Category = UI, meta = (DisplayName = "Parameter UI Metadata"))
|
|
FMutableParamUIMetadata ParamUIMetadata;
|
|
|
|
/** Parameter type, using uint8 since the enum in declared in the class it is used */
|
|
UPROPERTY(BlueprintReadWrite, Category = UI)
|
|
EMutableParameterType Type;
|
|
|
|
/** In the case of an integer parameter, store here all options */
|
|
UPROPERTY(BlueprintReadWrite, Category = UI)
|
|
TArray<FIntegerParameterUIData> ArrayIntegerParameterOption;
|
|
|
|
/** In the case of an integer parameter, how are the different options selected (one, one or none, etc...) */
|
|
UPROPERTY(BlueprintReadWrite, Category = UI)
|
|
ECustomizableObjectGroupType IntegerParameterGroupType;
|
|
|
|
UPROPERTY(BlueprintReadWrite, Category = CustomizableObject)
|
|
bool bDontCompressRuntimeTextures = false; // Only useful for state metadata
|
|
|
|
UPROPERTY(BlueprintReadWrite, Category = CustomizableObject)
|
|
TMap<FString, FString> ForcedParameterValues;
|
|
|
|
bool operator ==(const FParameterUIData& Other) const
|
|
{
|
|
if (Name != Other.Name || ParamUIMetadata != Other.ParamUIMetadata || Type != Other.Type || ArrayIntegerParameterOption != Other.ArrayIntegerParameterOption || IntegerParameterGroupType != Other.IntegerParameterGroupType || !ForcedParameterValues.OrderIndependentCompareEqual(Other.ForcedParameterValues))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
friend FArchive& operator <<(FArchive& Ar, FParameterUIData& UIData)
|
|
{
|
|
Ar << UIData.Name;
|
|
Ar << UIData.ParamUIMetadata;
|
|
Ar << UIData.Type;
|
|
Ar << UIData.ArrayIntegerParameterOption;
|
|
Ar << UIData.IntegerParameterGroupType;
|
|
Ar << UIData.bDontCompressRuntimeTextures;
|
|
Ar << UIData.ForcedParameterValues;
|
|
|
|
return Ar;
|
|
}
|
|
|
|
#if WITH_EDITOR
|
|
|
|
/** Only called in the BeginCacheForCookPlatform to include new references in the final package */
|
|
void LoadResources()
|
|
{
|
|
ParamUIMetadata.LoadResources();
|
|
|
|
for (FIntegerParameterUIData& intParam : ArrayIntegerParameterOption)
|
|
{
|
|
intParam.LoadResources();
|
|
}
|
|
}
|
|
|
|
#endif
|
|
};
|