Add ToggleLight class to trigger lights in radius
+ Followed UE4 tutoial on mixing C++ and Blueprints + https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/ClassCreation/CodeAndBlueprints/ + Added an in-editor and blueprint field ToggleLight::Radius to adjust trigger radius + Made stairs light up as you walk up them
This commit is contained in:
parent
059f73a19f
commit
d43d032b4a
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,59 @@
|
||||||
|
// 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
// 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;
|
||||||
|
};
|
Loading…
Reference in New Issue