// All content (c) Shaun Reed 2021, all rights reserved

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "ToggleLight.generated.h"

UCLASS()
class THIRDPERSON_API AToggleLight : public AActor
{
  GENERATED_BODY()

public:
  // Sets default values for this actor's properties
  AToggleLight();

  UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Switch Components")
    class UPointLightComponent* PointLight1;

  UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Switch Components")
    class USphereComponent* Sphere1;

  // Radius of the trigger to toggle the light
  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Switch Variables")
    float Radius = 50.0f;

  /** the desired intensity for the light */
  UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Switch Variables")
    float DesiredIntensity;

  /** Toggles the light component's visibility*/
  UFUNCTION()
    void ToggleLight();
  
  //
  // Trigger functions

  /** called when something enters the sphere component */
  UFUNCTION(BlueprintNativeEvent, Category = "Switch Functions")
    void OnOverlapBegin(class UPrimitiveComponent* OverlappedComp, class AActor* OtherActor, class UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
  void OnOverlapBegin_Implementation(class UPrimitiveComponent* OverlappedComp, class AActor* OtherActor, class UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);

  /** called when something leaves the sphere component */
  UFUNCTION(BlueprintNativeEvent, Category = "Switch Functions")
    void OnOverlapEnd(class UPrimitiveComponent* OverlappedComp, class AActor* OtherActor, class UPrimitiveComponent* OtherComp, int32 OtherBodyIndex);
  void OnOverlapEnd_Implementation(class UPrimitiveComponent* OverlappedComp, class AActor* OtherActor, class UPrimitiveComponent* OtherComp, int32 OtherBodyIndex);

  //
  // Update functions

  virtual void Tick(float DeltaTime) override;
};
