// Project Lab - NHTV Igad

#pragma once

#include "Kismet/BlueprintFunctionLibrary.h"
#include "EffectFunctionLibrary.generated.h"

/**
 * 
 */
UCLASS()
class UNREALPROJECT_API UEffectFunctionLibrary : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()
	
public:
	UFUNCTION(BlueprintCallable, Category = "Effect", meta = (WorldContext="worldContextObject"))
	static class AEffect* CreateEffect(UObject* worldContextObject, TSubclassOf<class AEffect> effectClass, 
	class AActor* followObject = nullptr, float startTime = 0.0f, float durationOverride = 0.0f, bool clientSideOnly = false);

	UFUNCTION(BlueprintCallable, Category = "Effect", meta = (WorldContext = "worldContextObject"))
		static class AEffect* CreateEffectAt(UObject* worldContextObject, TSubclassOf<class AEffect> effectClass,
			const FTransform& transform, float startTime = 0.0f, float durationOverride = 0.0f, bool clientSideOnly = false);

	UFUNCTION(BlueprintCallable, Category = "Effect", meta = (WorldContext = "worldContextObject"))
		static class AEffect* CreateEffectAttached(UObject* worldContextObject, TSubclassOf<class AEffect> effectClass,
			const FTransform& transform, USceneComponent* InParent, FName InSocketName, EAttachLocation::Type AttachLocationType, float startTime = 0.0f, float durationOverride = 0.0f, bool clientSideOnly = false);

	UFUNCTION(BlueprintCallable, Category = "Effect")
	static class AAbilityIndicator* CreateAbilityIndicator(TSubclassOf<class AAbilityIndicator> AAbilityIndicatorClass,
	class ANetworkCharacter* spawner, class AActor* followObject, FVector scale, float durationOverride = 0.0f, bool center = true);

	UFUNCTION(BlueprintCallable, Category = "Effect")
	static class AAbilityIndicator* CreateAbilityIndicatorAt(TSubclassOf<class AAbilityIndicator> AAbilityIndicatorClass, ANetworkCharacter * spawner, const FTransform& transform, FVector scale, float durationOverride, bool center);

	UFUNCTION(BlueprintCallable, Category = "Effect", meta = (WorldContext="worldContextObject"))
	static void PlaySoundEffect2D(UObject* worldContextObject, USoundBase* sound);

	//from is the character who's skeleton is cloned,  to is who gets the cloned skeleton
	UFUNCTION(BlueprintCallable, Category = "Effect")
	static void DuplicateAppearance(class ACharacterBase* from, class ACharacterBase* to);
};
