141 lines
3.4 KiB
C
141 lines
3.4 KiB
C
|
// Copyright 2020 Phyronnaz
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#include "CoreMinimal.h"
|
||
|
#include "VoxelMinimal.h"
|
||
|
#include "VoxelGeneratorParameters.generated.h"
|
||
|
|
||
|
UENUM()
|
||
|
enum class EVoxelGeneratorParameterContainerType : uint8
|
||
|
{
|
||
|
None,
|
||
|
Array,
|
||
|
Set,
|
||
|
Map
|
||
|
};
|
||
|
|
||
|
UENUM()
|
||
|
enum class EVoxelGeneratorParameterPropertyType : uint8
|
||
|
{
|
||
|
Float,
|
||
|
Int,
|
||
|
Bool,
|
||
|
Object,
|
||
|
Struct,
|
||
|
};
|
||
|
|
||
|
USTRUCT(BlueprintType)
|
||
|
struct VOXEL_API FVoxelGeneratorParameterTerminalType
|
||
|
{
|
||
|
GENERATED_BODY()
|
||
|
|
||
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Parameter")
|
||
|
EVoxelGeneratorParameterPropertyType PropertyType = EVoxelGeneratorParameterPropertyType::Float;
|
||
|
|
||
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Parameter")
|
||
|
FName PropertyClass;
|
||
|
|
||
|
FString ToString_Terminal() const;
|
||
|
bool CanBeAssignedFrom_Terminal(const FVoxelGeneratorParameterTerminalType& Other) const;
|
||
|
};
|
||
|
|
||
|
USTRUCT(BlueprintType)
|
||
|
struct VOXEL_API FVoxelGeneratorParameterType : public FVoxelGeneratorParameterTerminalType
|
||
|
{
|
||
|
GENERATED_BODY()
|
||
|
|
||
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Parameter")
|
||
|
EVoxelGeneratorParameterContainerType ContainerType = EVoxelGeneratorParameterContainerType::None;
|
||
|
|
||
|
// For maps
|
||
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Parameter")
|
||
|
FVoxelGeneratorParameterTerminalType ValueType;
|
||
|
|
||
|
FVoxelGeneratorParameterType() = default;
|
||
|
explicit FVoxelGeneratorParameterType(FProperty& Property);
|
||
|
|
||
|
public:
|
||
|
bool operator==(const FVoxelGeneratorParameterType& Other) const
|
||
|
{
|
||
|
return
|
||
|
PropertyType == Other.PropertyType &&
|
||
|
PropertyClass == Other.PropertyClass;
|
||
|
}
|
||
|
bool operator!=(const FVoxelGeneratorParameterType& Other) const
|
||
|
{
|
||
|
return !(*this == Other);
|
||
|
}
|
||
|
|
||
|
FString ToString() const;
|
||
|
bool CanBeAssignedFrom(const FVoxelGeneratorParameterType& Other) const;
|
||
|
};
|
||
|
|
||
|
USTRUCT(BlueprintType)
|
||
|
struct FVoxelGeneratorParameter
|
||
|
{
|
||
|
GENERATED_BODY()
|
||
|
|
||
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Parameter")
|
||
|
FName Id;
|
||
|
|
||
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Parameter")
|
||
|
FVoxelGeneratorParameterType Type;
|
||
|
|
||
|
// Not consistent with vs without editor
|
||
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Parameter")
|
||
|
FString Name;
|
||
|
|
||
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Parameter")
|
||
|
FString Category;
|
||
|
|
||
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Parameter")
|
||
|
FString ToolTip;
|
||
|
|
||
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Parameter")
|
||
|
int32 Priority = 0;
|
||
|
|
||
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Parameter")
|
||
|
TMap<FName, FString> MetaData;
|
||
|
|
||
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Parameter")
|
||
|
FString DefaultValue;
|
||
|
|
||
|
FVoxelGeneratorParameter() = default;
|
||
|
FVoxelGeneratorParameter(
|
||
|
const FName& Id,
|
||
|
const FVoxelGeneratorParameterType& Type,
|
||
|
const FString& Name,
|
||
|
const FString& Category,
|
||
|
const FString& ToolTip,
|
||
|
int32 Priority,
|
||
|
const TMap<FName, FString>& MetaData,
|
||
|
const FString& DefaultValue)
|
||
|
: Id(Id)
|
||
|
, Type(Type)
|
||
|
, Name(Name)
|
||
|
, Category(Category)
|
||
|
, ToolTip(ToolTip)
|
||
|
, Priority(Priority)
|
||
|
, MetaData(MetaData)
|
||
|
, DefaultValue(DefaultValue)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
bool operator==(const FVoxelGeneratorParameter& Other) const
|
||
|
{
|
||
|
return
|
||
|
Id == Other.Id &&
|
||
|
Type == Other.Type &&
|
||
|
Name == Other.Name &&
|
||
|
Category == Other.Category &&
|
||
|
ToolTip == Other.ToolTip &&
|
||
|
Priority == Other.Priority &&
|
||
|
MetaData.OrderIndependentCompareEqual(Other.MetaData) &&
|
||
|
DefaultValue == Other.DefaultValue;
|
||
|
}
|
||
|
bool operator!=(const FVoxelGeneratorParameter& Other) const
|
||
|
{
|
||
|
return !(*this == Other);
|
||
|
}
|
||
|
};
|