#pragma once

#include "CoreMinimal.h"
#include "K36ArtifactPowerComponent.h"
#include "DBDTunableRowHandle.h"
#include "UObject/NoExportTypes.h"
#include "GameplayTagContainer.h"
#include "GameEventData.h"
#include "K36ArtifactTeleportationPowerComponent.generated.h"

class ALocker;

UCLASS(Blueprintable, meta=(BlueprintSpawnableComponent))
class UK36ArtifactTeleportationPowerComponent : public UK36ArtifactPowerComponent
{
	GENERATED_BODY()

private:
	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	FDBDTunableRowHandle _timeLockerAuraActive;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	FDBDTunableRowHandle _minDistanceFromLocker;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(AllowPrivateAccess=true))
	FDBDTunableRowHandle _loudNoiseMaxAudibleDistance;

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

private:
	UFUNCTION(BlueprintCallable, NetMulticast, Reliable)
	void Multicast_TriggerExitFromLocker(ALocker* initialLocker, ALocker* targetLocker);

	UFUNCTION(BlueprintCallable)
	void Authority_TriggerExitFromLocker();

	UFUNCTION()
	void Authority_OnPlayerFastEnteredLocker(const FGameplayTag gameplayTag, const FGameEventData& gameEventData);

public:
	UK36ArtifactTeleportationPowerComponent();
};

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