#pragma once

#include "CoreMinimal.h"
#include "ItemAddon.h"
#include "K41MarkData.h"
#include "UObject/NoExportTypes.h"
#include "K41Power_Addon_17.generated.h"

class AActor;
class UFloatValueStrategy;

UCLASS(Blueprintable, meta=(BlueprintSpawnableComponent))
class UK41Power_Addon_17 : public UItemAddon
{
	GENERATED_BODY()

private:
	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, ReplicatedUsing=OnRep_MarkedBreakable, Transient, meta=(AllowPrivateAccess=true))
	AActor* _markedTarget;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	TArray<FK41MarkData> _markData;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced, meta=(AllowPrivateAccess=true))
	UFloatValueStrategy* _breakActionSpeedModifier;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	FLinearColor _markedBreakableAuraColor;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	float _markCooldown;

private:
	UFUNCTION(BlueprintCallable)
	void OnRep_MarkedBreakable(AActor* oldMarkedBreakable);

protected:
	UFUNCTION(BlueprintCallable, BlueprintImplementableEvent, BlueprintCosmetic)
	void Cosmetic_OnBreakableUnmarked(AActor* breakableActor);

	UFUNCTION(BlueprintCallable, BlueprintImplementableEvent, BlueprintCosmetic)
	void Cosmetic_OnBreakableMarked(AActor* breakableActor);

	UFUNCTION(BlueprintCallable, BlueprintImplementableEvent, BlueprintCosmetic)
	void Cosmetic_OnBreakableConsumed(AActor* breakableActor);

public:
	virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;

public:
	UK41Power_Addon_17();
};

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