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";
50 CollisionSensorSpawnParams.
Transform = transform;
52 CollisionSensorSpawnParams.
SensorName =
"collision";
54 CollisionSensorSpawnParams.
Parent =
this;
61 FString VehicleTransformSensorID =
ActorID +
"/transform";
63 TransformSensorSpawnParams.
Transform = transform;
65 TransformSensorSpawnParams.
SensorName =
"transform";
67 TransformSensorSpawnParams.
Parent =
this;
83 FString CompName = Comp->GetName();
85 const FString VehicleTransformSensorID = FString::Printf(TEXT(
"%s/%s/transform"), *
ActorID, *CompName);
88 TransformSensorSpawnParams.
Transform = transform;
90 TransformSensorSpawnParams.
SensorName =
"transform";
92 TransformSensorSpawnParams.
Parent =
this;
105 float NiagaraComponentHeight = 500.0f;
106 float OverlapBoundsSize = 50.0f;
110 NiagaraComponentHeight = 200.0f;
113 FVector RelativePosition = FVector(0.0f, 0.0f, 0.0f);
117 RelativePosition = FVector(150.0f, -120.0f, 250.0f);
125 FString OverlapSensorID =
ActorID +
"/overlap";
128 OverlapSensorSpawnParams.
Transform = transform;
130 OverlapSensorSpawnParams.
SensorName =
"transform";
132 OverlapSensorSpawnParams.
Parent =
this;
136 SensorParams.
Size = FVector(OverlapBoundsSize, OverlapBoundsSize, OverlapBoundsSize);
143 UNiagaraSystem* NiagaraSystem = LoadObject<UNiagaraSystem>(
nullptr, TEXT(
"/Game/Agrarsense/Particles/WaterAndSnow/NS_Particles.NS_Particles"));
146 NiagaraComponent = UNiagaraFunctionLibrary::SpawnSystemAttached(NiagaraSystem, this->GetRootComponent(),
147 FName(
"NiagaraEmitterSocketName"),
148 FVector(0.0, 0.0, NiagaraComponentHeight), FRotator::ZeroRotator, EAttachLocation::KeepRelativeOffset,
true);
152 UE_LOG(LogTemp, Warning, TEXT(
"Vehicle.cpp: Couldn't find NS_Particles"));
160 Super::EndPlay(EndPlayReason);
178 SensorPtr->Destroy();
196 if (IsValid(
SensorsManager) && EndPlayReason == EEndPlayReason::Destroyed)
209 TArray<AActor*> AttachedActors;
210 GetAttachedActors(AttachedActors);
211 for (AActor* Actor : AttachedActors)
246 Super::PossessedBy(NewController);
253 SetActorLocationAndRotation(NewLocation, NewRotation,
false,
nullptr, ETeleportType::TeleportPhysics);
268 FTransform TransformToUse = GetActorTransform();
270 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 ATransformSensor * SpawnTransformSensor(const FSensorSpawnParameters SpawnParameters, FTransformSensorParameters SensorParameters)
static ACollisionSensor * SpawnCollisionSensor(const FSensorSpawnParameters SpawnParameters)
static AOverlapSensor * SpawnOverlapSensor(const FSensorSpawnParameters SpawnParameters, FOverlapSensorParameters SensorParameters)
static FString ExportVehicleAndSensorsToJSON(FString FileName, AVehicle *Vehicle, bool OverrideTransform=false, const FTransform &Transform=FTransform())
float OverlapRadiusMeters