Add `NakatomiFieldSystemActor`

This commit is contained in:
Louis Hobbs 2023-01-31 21:25:28 +00:00
parent cb969be97c
commit 934055d0ed
2 changed files with 88 additions and 0 deletions

View File

@ -0,0 +1,28 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "NakatomiFieldSystemActor.h"
ANakatomiFieldSystemActor::ANakatomiFieldSystemActor()
{
SphereComponent = CreateDefaultSubobject<USphereComponent>(TEXT("SphereComponent"));
SphereComponent->SetSphereRadius(25.0f, true);
SphereComponent->SetCollisionEnabled(ECollisionEnabled::QueryAndProbe);
SphereComponent->SetupAttachment(RootComponent);
RadialFalloff = CreateDefaultSubobject<URadialFalloff>(TEXT("Radial Falloff"));
RadialVector = CreateDefaultSubobject<URadialVector>(TEXT("Radial Vector"));
CullingField = CreateDefaultSubobject<UCullingField>(TEXT("Culling Field"));
}
void ANakatomiFieldSystemActor::BeginPlay()
{
Radius = SphereComponent->GetScaledSphereRadius();
Position = GetActorLocation();
RadialFalloff = RadialFalloff->SetRadialFalloff(StrainMagnitude, MinRange, MaxRange, Default, Radius, Position, EFieldFalloffType::Field_FallOff_None);
GetFieldSystemComponent()->ApplyPhysicsField(true, Field_ExternalClusterStrain, nullptr, RadialFalloff);
RadialVector = RadialVector->SetRadialVector(ForceMagnitude, Position);
CullingField = CullingField->SetCullingField(RadialFalloff, RadialVector, Field_Culling_Outside);
GetFieldSystemComponent()->ApplyPhysicsField(true, Field_LinearVelocity, nullptr, CullingField);
}

View File

@ -0,0 +1,60 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Components/SphereComponent.h"
#include "Field/FieldSystemActor.h"
#include "NakatomiFieldSystemActor.generated.h"
/**
*
*/
UCLASS()
class NAKATOMI_API ANakatomiFieldSystemActor : public AFieldSystemActor
{
GENERATED_BODY()
private:
UPROPERTY()
USphereComponent* SphereComponent;
URadialFalloff* RadialFalloff;
URadialVector* RadialVector;
UCullingField* CullingField;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Radial Falloff", Meta = (AllowPrivateAccess = "true"))
float StrainMagnitude = 500.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Radial Vector", Meta = (AllowPrivateAccess = "true"))
float ForceMagnitude = 500.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Radial Falloff", Meta = (AllowPrivateAccess = "true"))
float MinRange = 0.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Radial Falloff", Meta = (AllowPrivateAccess = "true"))
float MaxRange = 1.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Radial Falloff", Meta = (AllowPrivateAccess = "true"))
float Default = 0.0f;
UPROPERTY(VisibleAnywhere, Category = "Radial Falloff", Meta = (AllowPrivateAccess = "true"))
float Radius = 0.0f;
UPROPERTY(VisibleAnywhere, Category = "Radial Falloff", Meta = (AllowPrivateAccess = "true"))
FVector Position = FVector::ZeroVector;
public:
ANakatomiFieldSystemActor();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
};