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


#include "ToggleLight.h"

#include "Components/PointLightComponent.h"
#include "Components/SphereComponent.h" 

// Sets default values
AToggleLight::AToggleLight()
{
 	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;

  DesiredIntensity = 3000.0f;

  PointLight1 = CreateDefaultSubobject<UPointLightComponent>(TEXT("PointLight1"));
  PointLight1->Intensity = DesiredIntensity;
  // PointLight1->bVisible = true;
  RootComponent = PointLight1;

  Sphere1 = CreateDefaultSubobject<USphereComponent>(TEXT("Sphere1"));
  Sphere1->InitSphereRadius(Radius);
  Sphere1->SetupAttachment(RootComponent);

  Sphere1->OnComponentBeginOverlap.AddDynamic(this, &AToggleLight::OnOverlapBegin);       // set up a notification for when this component overlaps something
  Sphere1->OnComponentEndOverlap.AddDynamic(this, &AToggleLight::OnOverlapEnd);       // set up a notification for when this component overlaps something
}

void AToggleLight::OnOverlapBegin_Implementation(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) 
{
  if (OtherActor && (OtherActor != this) && OtherComp)
  {
    ToggleLight();
  }
}

void AToggleLight::OnOverlapEnd_Implementation(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex)
{
  if (OtherActor && (OtherActor != this) && OtherComp)
  {
    ToggleLight();
  }
}

void AToggleLight::ToggleLight()
{
  PointLight1->ToggleVisibility();
}

void AToggleLight::Tick(float DeltaTime)
{
  if (Radius != Sphere1->GetUnscaledSphereRadius())
  {
    Sphere1->SetSphereRadius(Radius);
  }

}

