#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintAsyncActionBase.h"
#include "OnMaterialOverrideCompleted.h"
#include "GameplayTagContainer.h"
#include "AsyncAction_OverrideMaterial.generated.h"

class UMeshComponent;
class UObject;
class UAsyncAction_OverrideMaterial;

UCLASS(Blueprintable)
class GFXUTILITIES_API UAsyncAction_OverrideMaterial : public UBlueprintAsyncActionBase
{
	GENERATED_BODY()

public:
	UPROPERTY(BlueprintReadWrite, BlueprintAssignable)
	FOnMaterialOverrideCompleted Completed;

	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient, Instanced)
	UMeshComponent* MeshComponent;

public:
	UFUNCTION(BlueprintCallable)
	static UAsyncAction_OverrideMaterial* AsyncOverrideMaterial(UObject* WorldContextObject, UMeshComponent* Mesh, FGameplayTag Group, bool copyPhysicalMaterial);

public:
	UAsyncAction_OverrideMaterial();
};

FORCEINLINE uint32 GetTypeHash(const UAsyncAction_OverrideMaterial) { return 0; }
