18#include "Kismet/GameplayStatics.h"
19#include "NiagaraFunctionLibrary.h"
20#include "NiagaraComponent.h"
21#include "NiagaraSystem.h"
25 PrimaryActorTick.bCanEverTick =
false;
26 SensorsManager = CreateDefaultSubobject<USensorsManagerComponent>(TEXT(
"SensorsManagerComp"));
27 InteractableName = NSLOCTEXT(
"Agrarsense",
"VehicleInteractableName",
"Vehicle");
45 FTransform transform = GetTransform();
48 FString VehicleCollisionSensorID =
ActorID +
"/collision";
58 FString VehicleTransformSensorID =
ActorID +
"/transform";
69 FString CompName = Comp->GetName();
78 const FString VehicleTransformSensorID = FString::Printf(TEXT(
"%s/%s/transform"), *
ActorID, *CompName);
85 float NiagaraComponentHeight = 500.0f;
86 float OverlapBoundsSize = 50.0f;
90 NiagaraComponentHeight = 200.0f;
93 FVector RelativePosition = FVector(0.0f, 0.0f, 0.0f);
97 RelativePosition = FVector(150.0f, -120.0f, 250.0f);
106 Params.
Size = FVector(OverlapBoundsSize, OverlapBoundsSize, OverlapBoundsSize);
108 FString OverlapSensorID =
ActorID +
"/overlap";
113 UNiagaraSystem* NiagaraSystem = LoadObject<UNiagaraSystem>(
nullptr, TEXT(
"/Game/Agrarsense/Particles/WaterAndSnow/NS_Particles.NS_Particles"));
116 NiagaraComponent = UNiagaraFunctionLibrary::SpawnSystemAttached(NiagaraSystem, this->GetRootComponent(),
117 FName(
"NiagaraEmitterSocketName"),
118 FVector(0.0, 0.0, NiagaraComponentHeight), FRotator::ZeroRotator, EAttachLocation::KeepRelativeOffset,
true);
122 UE_LOG(LogTemp, Warning, TEXT(
"Vehicle.cpp: Couldn't find NS_Particles"));
130 Super::EndPlay(EndPlayReason);
148 SensorPtr->Destroy();
166 if (IsValid(
SensorsManager) && EndPlayReason == EEndPlayReason::Destroyed)
179 TArray<AActor*> AttachedActors;
180 GetAttachedActors(AttachedActors);
181 for (AActor* Actor : AttachedActors)
216 Super::PossessedBy(NewController);
223 SetActorLocationAndRotation(NewLocation, NewRotation,
false,
nullptr, ETeleportType::TeleportPhysics);
238 FTransform TransformToUse = GetActorTransform();
240 if (OverrideTransform)
void SetVisualizeOverlapArea(bool Visualize)
void SetOverlapBounds(const FVector &NewSize)
ACollisionSensor * CollisionSensor
FTransform MovedFromGarageTransform
TArray< UStaticMeshComponent * > ExtraTransformSensorPositions
FWheeledVehicleParameters VehicleParameters
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override
void SetVehicleParameters(FWheeledVehicleParameters NewParameters)
virtual void BeginPlay() override
virtual void PossessedBy(AController *NewController) override
TArray< ATransformSensor * > ExtraTransformSensors
virtual void TeleportVehicleTo_Implementation(FVector NewLocation, FRotator NewRotation)
bool IsVehicleInGarage() const
FString ExportToJsonFile(const FString &FileName)
void SetVisualizeVehicleOverlapArea(bool Visible)
AOverlapSensor * OverlapSensor
virtual EVehicleTypes GetVehicleType() const
void ApplyVehicleParameters(FWheeledVehicleParameters CurrentParameters)
void TogglePhysics(bool isOn)
ATransformSensor * TransformSensor
UNiagaraComponent * NiagaraComponent
virtual void ROSBridgeStateChanged(EROSState ROSState)
TObjectPtr< USensorsManagerComponent > SensorsManager
static UROSHandler * GetROSHandle(const UObject *WorldContextObject)
FROSDelegate_ROState OnROSStateChanged
static AOverlapSensor * SpawnOverlapSensor(const FTransform &transform, FOverlapSensorParameters Parameters, const FString sensorIdentifier, const FString sensorName, AActor *Parent=nullptr)
static ATransformSensor * SpawnTransformSensor(const FTransform &transform, FTransformSensorParameters Parameters, const FString sensorIdentifier, const FString sensorName, bool SimulateSensor=true, AActor *Parent=nullptr)
static ACollisionSensor * SpawnCollisionSensor(const FTransform &transform, AActor *Owner, const FString sensorIdentifier, const FString sensorName, bool SimulateSensor=true, AActor *Parent=nullptr)
static FString ExportVehicleAndSensorsToJSON(FString FileName, AVehicle *Vehicle, bool OverrideTransform=false, const FTransform &Transform=FTransform())
float OverlapRadiusMeters