#pragma once

#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "InterpolationDoneEvent.h"
#include "LightingInterpolator.generated.h"

class ABaseSky;
class USkyLightComponent;
class ULightComponent;
class UExponentialHeightFogComponent;

UCLASS(Blueprintable)
class DEADBYDAYLIGHT_API ULightingInterpolator : public UObject
{
	GENERATED_BODY()

public:
	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	FInterpolationDoneEvent OnInterpolationDone;

private:
	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient, meta=(AllowPrivateAccess=true))
	ABaseSky* _targetLighting;

public:
	UFUNCTION(BlueprintCallable)
	static void LerpSkylight(USkyLightComponent* Target, USkyLightComponent* A, USkyLightComponent* B, float alpha);

	UFUNCTION(BlueprintCallable)
	static void LerpLight(ULightComponent* Target, ULightComponent* A, ULightComponent* B, float alpha);

	UFUNCTION(BlueprintCallable)
	static void LerpHeightFog(UExponentialHeightFogComponent* Target, const UExponentialHeightFogComponent* A, const UExponentialHeightFogComponent* B, float alpha, float thresholdBeforeSwitchingtoB);

public:
	ULightingInterpolator();
};

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