// Copyright (c) Microsoft Corporation. 
// Licensed under the MIT license.

#pragma once

#include "CoreMinimal.h"
#include "Containers/EnumAsByte.h" 
#include "UObject/ObjectMacros.h"
#include "Engine/AssetUserData.h"
#include "SimplygonAssetUserData.generated.h"

/**
 * @brief Metatags to provide hit to the Simplygon integration when processing.
*/
UENUM(BlueprintType)
enum class ESimplygonMetaTagType :uint8
{	
	/**
	 * @brief No tags
	*/
	None = 0,	
	/**
	 * @brief Tag that indicates that object should be placed in process selection set
	*/
	Process,
	/**
	 * @brief Tag that indicates that object is and occluder and place in the occluder set
	*/
	Occluder,
	/**
	 * @brief Tag that indicates that object is a clipping geometry and place in the clipping geometry set
	*/
	ClippingGeometry,
	/**
	 * @brief Tag that indicates that a geomtry's vertices are used to setup a path of omni directional cameras
	*/
	GeometryCameraPath,

	/**
	* @brief Tag that indicate that object is excluded from Imposter baking when using the Imposter GeneratorHelperActor
	*/
	ExcludeFromImposterGeneration
};

/** Asset user data that can be used with Simplygon on Actors and other objects  */
UCLASS(MinimalAPI)
class USimplygonAssetUserData : public UAssetUserData
{
	GENERATED_BODY()

public:
	/** A metadata tag to add more context to object used by Simplygon Plugin	*/
	UPROPERTY(EditAnywhere, Category = StandinSettings)
	ESimplygonMetaTagType MetaTag;
	
};
