Agrarsense
Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes | List of all members
AVehicle Class Reference

#include <Vehicle.h>

Inheritance diagram for AVehicle:
Inheritance graph
[legend]
Collaboration diagram for AVehicle:
Collaboration graph
[legend]

Public Member Functions

 AVehicle ()
 
virtual EVehicleTypes GetVehicleType () const
 
void TogglePhysics (bool isOn)
 
void TeleportVehicleTo (FVector NewLocation, FRotator NewRotation)
 
virtual void TeleportVehicleTo_Implementation (FVector NewLocation, FRotator NewRotation)
 
void ResetCamera ()
 
void ToggleLights (bool isOn)
 
void SetVisualizeVehicleOverlapArea (bool Visible)
 
FString ExportToJsonFile (const FString &FileName)
 
void SetVehicleIsInGarage (bool VehicleIsInGarage)
 
bool IsVehicleInGarage () const
 
USensorsManagerComponent * GetSensorsManager () const
 
ACollisionSensorGetCollisionSensor () const
 
ATransformSensorGetTransformSensor () const
 
AOverlapSensorGetOverlapSensor () const
 
FTransform GetMovedFromGarageTransform () const
 
virtual void SetCurrentTransformToMovedFromGarageTransform ()
 
virtual FText GetInteractableName_Implementation () const override
 
virtual FTransform GetInteractableWorldTransform_Implementation () const override
 
virtual FString GetActorID_Implementation () const override
 
virtual FString GetActorName_Implementation () const override
 
virtual FString GetActorInformation_Implementation () const override
 
virtual void SetActorName_Implementation (const FString &NewActorName) override
 
virtual void SetActorIDAndName_Implementation (const FString &NewActorName, const FString &NewID) override
 
void SetVehicleParameters (FWheeledVehicleParameters NewParameters)
 
FWheeledVehicleParameters GetVehicleParameters () const
 
void ApplyVehicleParameters (FWheeledVehicleParameters CurrentParameters)
 
virtual void PossessedBy (AController *NewController) override
 
- Public Member Functions inherited from IInteractable
FText GetInteractableName () const
 
FTransform GetInteractableWorldTransform () const
 
- Public Member Functions inherited from IActorInformation
FString GetActorID () const
 
FString GetActorName () const
 
FString GetActorInformation () const
 
void SetActorName (const FString &NewActorName)
 
void SetActorIDAndName (const FString &NewActorName, const FString &NewID)
 

Public Attributes

FText InteractableName
 
FVehicleGarageChangedDelegate OnVehicleGarageChanged
 

Protected Member Functions

virtual void BeginPlay () override
 
virtual void EndPlay (const EEndPlayReason::Type EndPlayReason) override
 
virtual void ROSBridgeStateChanged (EROSState ROSState)
 

Protected Attributes

FWheeledVehicleParameters VehicleParameters
 
TObjectPtr< USensorsManagerComponent > SensorsManager
 
ACollisionSensorCollisionSensor = nullptr
 
ATransformSensorTransformSensor = nullptr
 
AOverlapSensorOverlapSensor = nullptr
 
UNiagaraComponent * NiagaraComponent = nullptr
 
FString ActorName
 
FString ActorID
 
FTransform OriginalCameraTransform
 
FTransform MovedFromGarageTransform
 
bool VehicleInGarage = false
 

Additional Inherited Members

- Static Public Member Functions inherited from IActorInformation
static void SetAndValidateActorIDAndName (FString &ActorName, FString &ActorID, TWeakObjectPtr< AActor > Actor)
 
static bool DestroyActorByID (const FString &ID)
 
static AActor * GetActorByID (const FString &ID)
 
template<typename T >
static TArray< T * > GetActorsWithInterface ()
 
static void PrintAllIds ()
 

Detailed Description

Definition at line 39 of file Vehicle.h.

Constructor & Destructor Documentation

◆ AVehicle()

AVehicle::AVehicle ( )

Definition at line 22 of file Vehicle.cpp.

23{
24 PrimaryActorTick.bCanEverTick = false;
25 SensorsManager = CreateDefaultSubobject<USensorsManagerComponent>(TEXT("SensorsManagerComp"));
26 InteractableName = NSLOCTEXT("Agrarsense", "VehicleInteractableName", "Vehicle");
27}
FText InteractableName
Definition: Vehicle.h:258
TObjectPtr< USensorsManagerComponent > SensorsManager
Definition: Vehicle.h:282

References InteractableName, and SensorsManager.

Member Function Documentation

◆ ApplyVehicleParameters()

void AVehicle::ApplyVehicleParameters ( FWheeledVehicleParameters  CurrentParameters)

Referenced by BeginPlay().

◆ BeginPlay()

void AVehicle::BeginPlay ( )
overrideprotectedvirtual

Reimplemented in AForwarder, AHarvester, and APIDDrone.

Definition at line 29 of file Vehicle.cpp.

30{
31 Super::BeginPlay();
32
33 TogglePhysics(true);
34
35 UROSHandler* ROSHandler = UAgrarsenseStatics::GetROSHandle(GetWorld());
36 if (ROSHandler)
37 {
38 ROSHandler->OnROSStateChanged.AddUniqueDynamic(this, &AVehicle::ROSBridgeStateChanged);
39 }
40
41 bool IsDrone = GetVehicleType() == EVehicleTypes::Drone;
42
43 // Spawn Transform and Collision sensors for each vehicle
44 FTransform transform = GetTransform();
45
46 // Create Collision sensor
47 FString VehicleCollisionSensorID = ActorID + "/collision";
48 CollisionSensor = USensorFactory::SpawnCollisionSensor(transform, this, VehicleCollisionSensorID, "collision", true, this);
49
50 if (!IsDrone)
51 {
52 // Create Transform sensor for forwarder and harvester
54 Params.SaveTransformDataToDisk = true;
55 Params.OwningActor = this;
56
57 FString VehicleTransformSensorID = ActorID + "/transform";
58 TransformSensor = USensorFactory::SpawnTransformSensor(transform, Params, VehicleTransformSensorID, "transform", true, this);
59 }
60
61 float NiagaraComponentHeight = 500.0f;
62 float OverlapBoundsSize = 5000.0f;
63
64 if (IsDrone)
65 {
66 // Adjust certain variables if vehicle is a drone
67 OverlapBoundsSize = 2500.0f;
68 NiagaraComponentHeight = 200.0f;
69 }
70
71 FVector RelativePosition = FVector(0.0f, 0.0f, 0.0f);
73 {
74 // TODO make better solution for this.
75 RelativePosition = FVector(150.0f, -120.0f, 250.0f);
76 }
77
78 // Create OverlapSensor
80 Params.OwningActor = this;
81 Params.Size = FVector(OverlapBoundsSize, OverlapBoundsSize, OverlapBoundsSize);
82 Params.RelativePosition = RelativePosition;
83 FString OverlapSensorID = ActorID + "/overlap";
84 OverlapSensor = USensorFactory::SpawnOverlapSensor(transform, Params, OverlapSensorID, "overlap", this);
85
86 // Load and setup rain/snow fall niagara system
87 UNiagaraSystem* NiagaraSystem = LoadObject<UNiagaraSystem>(nullptr, TEXT("/Game/Agrarsense/Particles/WaterAndSnow/NS_Particles.NS_Particles"));
88 if (NiagaraSystem)
89 {
90 NiagaraComponent = UNiagaraFunctionLibrary::SpawnSystemAttached(NiagaraSystem, this->GetRootComponent(),
91 FName("NiagaraEmitterSocketName"),
92 FVector(0.0, 0.0, NiagaraComponentHeight), FRotator::ZeroRotator, EAttachLocation::KeepRelativeOffset, true);
93 }
94
96}
ACollisionSensor * CollisionSensor
Definition: Vehicle.h:285
FWheeledVehicleParameters VehicleParameters
Definition: Vehicle.h:276
FString ActorID
Definition: Vehicle.h:300
AOverlapSensor * OverlapSensor
Definition: Vehicle.h:291
virtual EVehicleTypes GetVehicleType() const
Definition: Vehicle.h:52
void ApplyVehicleParameters(FWheeledVehicleParameters CurrentParameters)
void TogglePhysics(bool isOn)
ATransformSensor * TransformSensor
Definition: Vehicle.h:288
UNiagaraComponent * NiagaraComponent
Definition: Vehicle.h:294
virtual void ROSBridgeStateChanged(EROSState ROSState)
Definition: Vehicle.cpp:151
static UROSHandler * GetROSHandle(const UObject *WorldContextObject)
FROSDelegate_ROState OnROSStateChanged
Definition: ROSHandler.h:81
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)

References ActorID, ApplyVehicleParameters(), CollisionSensor, Drone, Forwarder, UAgrarsenseStatics::GetROSHandle(), GetVehicleType(), NiagaraComponent, UROSHandler::OnROSStateChanged, OverlapSensor, FOverlapSensorParameters::OwningActor, FTransformSensorParameters::OwningActor, FOverlapSensorParameters::RelativePosition, ROSBridgeStateChanged(), FTransformSensorParameters::SaveTransformDataToDisk, FOverlapSensorParameters::Size, USensorFactory::SpawnCollisionSensor(), USensorFactory::SpawnOverlapSensor(), USensorFactory::SpawnTransformSensor(), TogglePhysics(), TransformSensor, and VehicleParameters.

◆ EndPlay()

void AVehicle::EndPlay ( const EEndPlayReason::Type  EndPlayReason)
overrideprotectedvirtual

Reimplemented in AForwarder, AHarvester, and APIDDrone.

Definition at line 98 of file Vehicle.cpp.

99{
100 Super::EndPlay(EndPlayReason);
101
102 UROSHandler* ROSHandler = UAgrarsenseStatics::GetROSHandle(GetWorld());
103 if (ROSHandler)
104 {
105 ROSHandler->OnROSStateChanged.RemoveDynamic(this, &AVehicle::ROSBridgeStateChanged);
106 }
107
108 if (TransformSensor)
109 {
110 TransformSensor->Destroy();
111 TransformSensor = nullptr;
112 }
113
114 if (CollisionSensor)
115 {
116 CollisionSensor->Destroy();
117 CollisionSensor = nullptr;
118 }
119
120 if (OverlapSensor)
121 {
122 OverlapSensor->Destroy();
123 OverlapSensor = nullptr;
124 }
125
126 // Destroy attached sensors when vehicle is destroyed
127 if (IsValid(SensorsManager) && EndPlayReason == EEndPlayReason::Destroyed)
128 {
129 SensorsManager->DestroyAllSensors();
130 }
131
133 {
134 NiagaraComponent->UnregisterComponent();
135 NiagaraComponent->DestroyComponent();
136 NiagaraComponent = nullptr;
137 }
138
139 // Destroy all remaining Actors that are attached to this vehicle, if any
140 TArray<AActor*> AttachedActors;
141 GetAttachedActors(AttachedActors);
142 for (AActor* Actor : AttachedActors)
143 {
144 if (Actor)
145 {
146 Actor->Destroy();
147 }
148 }
149}

References CollisionSensor, UAgrarsenseStatics::GetROSHandle(), NiagaraComponent, UROSHandler::OnROSStateChanged, OverlapSensor, ROSBridgeStateChanged(), SensorsManager, and TransformSensor.

◆ ExportToJsonFile()

FString AVehicle::ExportToJsonFile ( const FString &  FileName)

Export the Vehicle and its sensors to a JSON file.

Parameters
FileNameThe name of the file without extension.
Returns
FString representing the saved JSON file path, or an empty string if the export fails.

Definition at line 176 of file Vehicle.cpp.

177{
178 bool OverrideTransform = IsVehicleInGarage();
179
180 FTransform TransformToUse = GetActorTransform();
181
182 if (OverrideTransform)
183 {
184 TransformToUse = MovedFromGarageTransform;
185 }
186
187 return USimulatorJsonExporter::ExportVehicleAndSensorsToJSON(FileName, this, OverrideTransform, TransformToUse);
188}
FTransform MovedFromGarageTransform
Definition: Vehicle.h:305
bool IsVehicleInGarage() const
Definition: Vehicle.h:124
static FString ExportVehicleAndSensorsToJSON(FString FileName, AVehicle *Vehicle, bool OverrideTransform=false, const FTransform &Transform=FTransform())

References USimulatorJsonExporter::ExportVehicleAndSensorsToJSON(), IsVehicleInGarage(), and MovedFromGarageTransform.

Referenced by UROSCommands::HandleExportSensors(), and UROSCommands::HandleExportVehicles().

◆ GetActorID_Implementation()

virtual FString AVehicle::GetActorID_Implementation ( ) const
inlineoverridevirtual

Definition at line 195 of file Vehicle.h.

196 {
197 return ActorID;
198 }

Referenced by APIDDrone::CreateTopic().

◆ GetActorInformation_Implementation()

virtual FString AVehicle::GetActorInformation_Implementation ( ) const
inlineoverridevirtual

Definition at line 205 of file Vehicle.h.

206 {
208 const FString ID = IActorInformation::Execute_GetActorID(this);
209 const FString Name = IActorInformation::Execute_GetActorName(this);
210 const FTransform VehicleTransform = GetActorTransform();
211 const FVector Location = VehicleTransform.GetLocation();
212 const FRotator Rotation = VehicleTransform.Rotator();
213 FString Information = FString::Printf(TEXT("Vehicle: %s, Name: %s, ID: %s, Location: %s, Rotation: %s"), *Vehicle, *Name, *ID, *Location.ToString(), *Rotation.ToString());
214
215 return Information;
216 }
static FString ConvertVehicleTypeToString(EVehicleTypes VehicleType)

References UEnumUtilities::ConvertVehicleTypeToString(), and AOverlapSensor::Vehicle.

◆ GetActorName_Implementation()

virtual FString AVehicle::GetActorName_Implementation ( ) const
inlineoverridevirtual

Definition at line 200 of file Vehicle.h.

201 {
202 return ActorName;
203 }
FString ActorName
Definition: Vehicle.h:297

◆ GetCollisionSensor()

ACollisionSensor * AVehicle::GetCollisionSensor ( ) const
inline

Get collision sensor attached to this Vehicle

Returns
ACollisionSensor pointer

Definition at line 144 of file Vehicle.h.

145 {
146 return CollisionSensor;
147 }

◆ GetInteractableName_Implementation()

virtual FText AVehicle::GetInteractableName_Implementation ( ) const
inlineoverridevirtual

Definition at line 185 of file Vehicle.h.

186 {
187 return InteractableName;
188 }

◆ GetInteractableWorldTransform_Implementation()

virtual FTransform AVehicle::GetInteractableWorldTransform_Implementation ( ) const
inlineoverridevirtual

Reimplemented in APIDDrone.

Definition at line 190 of file Vehicle.h.

191 {
192 return GetActorTransform();
193 }

◆ GetMovedFromGarageTransform()

FTransform AVehicle::GetMovedFromGarageTransform ( ) const
inline

Get transform of the vehicle when it moved to garage

Returns

Definition at line 174 of file Vehicle.h.

175 {
177 }

◆ GetOverlapSensor()

AOverlapSensor * AVehicle::GetOverlapSensor ( ) const
inline

Get overlap sensor attached to this Vehicle

Returns
AOverlapSensor pointer

Definition at line 164 of file Vehicle.h.

165 {
166 return OverlapSensor;
167 }

◆ GetSensorsManager()

USensorsManagerComponent * AVehicle::GetSensorsManager ( ) const
inline

Get sensor manager attached to this Vehicle

Returns
USensorsManagerComponent pointer

Definition at line 134 of file Vehicle.h.

135 {
136 return SensorsManager;
137 }

◆ GetTransformSensor()

ATransformSensor * AVehicle::GetTransformSensor ( ) const
inline

Get transform sensor attached to this Vehicle

Returns
ATransformSensor pointer

Definition at line 154 of file Vehicle.h.

155 {
156 return TransformSensor;
157 }

◆ GetVehicleParameters()

FWheeledVehicleParameters AVehicle::GetVehicleParameters ( ) const
inline

Definition at line 244 of file Vehicle.h.

245 {
246 return VehicleParameters;
247 }

Referenced by USimulatorJsonParser::ParseAndSetWheeledVehicleParameters().

◆ GetVehicleType()

virtual EVehicleTypes AVehicle::GetVehicleType ( ) const
inlinevirtual

Get type of the Vehicle

Returns
Vehicle's type

Reimplemented in AForwarder, AHarvester, and APIDDrone.

Definition at line 52 of file Vehicle.h.

53 {
55 }

References NONE.

Referenced by BeginPlay().

◆ IsVehicleInGarage()

bool AVehicle::IsVehicleInGarage ( ) const
inline

Checks if the vehicle is currently in the "Garage" where vehicle can be setup with sensors.

Returns
True if the vehicle is in the garage, false otherwise.

Definition at line 124 of file Vehicle.h.

125 {
126 return VehicleInGarage;
127 }
bool VehicleInGarage
Definition: Vehicle.h:307

Referenced by ExportToJsonFile(), ACamera::PreActorTick(), and APIDDrone::Tick().

◆ PossessedBy()

void AVehicle::PossessedBy ( AController *  NewController)
overridevirtual

Definition at line 156 of file Vehicle.cpp.

157{
158 Super::PossessedBy(NewController);
159
160 ResetCamera();
161}
void ResetCamera()

References ResetCamera().

◆ ResetCamera()

void AVehicle::ResetCamera ( )

Reset the camera to original position and rotation BlueprintImplementableEvent meant to be implemented in blueprint e.g. BP_Forwarder

Referenced by PossessedBy().

◆ ROSBridgeStateChanged()

void AVehicle::ROSBridgeStateChanged ( EROSState  ROSState)
protectedvirtual

Reimplemented in APIDDrone.

Definition at line 151 of file Vehicle.cpp.

152{
153
154}

Referenced by BeginPlay(), and EndPlay().

◆ SetActorIDAndName_Implementation()

virtual void AVehicle::SetActorIDAndName_Implementation ( const FString &  NewActorName,
const FString &  NewID 
)
inlineoverridevirtual

Definition at line 223 of file Vehicle.h.

224 {
225 ActorName = NewActorName;
226 ActorID = NewID;
227 SetAndValidateActorIDAndName(ActorName, ActorID, TWeakObjectPtr<AActor>(this));
228 }
static void SetAndValidateActorIDAndName(FString &ActorName, FString &ActorID, TWeakObjectPtr< AActor > Actor)

References IActorInformation::SetAndValidateActorIDAndName().

◆ SetActorName_Implementation()

virtual void AVehicle::SetActorName_Implementation ( const FString &  NewActorName)
inlineoverridevirtual

Definition at line 218 of file Vehicle.h.

219 {
220 ActorName = NewActorName;
221 }

◆ SetCurrentTransformToMovedFromGarageTransform()

virtual void AVehicle::SetCurrentTransformToMovedFromGarageTransform ( )
inlinevirtual

Reimplemented in APIDDrone.

Definition at line 180 of file Vehicle.h.

181 {
182 MovedFromGarageTransform = GetTransform();
183 }

◆ SetVehicleIsInGarage()

void AVehicle::SetVehicleIsInGarage ( bool  VehicleIsInGarage)
inline

Sets the state of the vehicle garage state boolean.

Parameters
VehicleIsInGarage- A boolean indicating whether the vehicle is in the garage or not.

Definition at line 113 of file Vehicle.h.

114 {
115 VehicleInGarage = VehicleIsInGarage;
117 }
FVehicleGarageChangedDelegate OnVehicleGarageChanged
Definition: Vehicle.h:261

◆ SetVehicleParameters()

void AVehicle::SetVehicleParameters ( FWheeledVehicleParameters  NewParameters)
inline

Definition at line 234 of file Vehicle.h.

235 {
236 VehicleParameters = NewParameters;
238 }

Referenced by USimulatorJsonParser::ParseAndSetWheeledVehicleParameters().

◆ SetVisualizeVehicleOverlapArea()

void AVehicle::SetVisualizeVehicleOverlapArea ( bool  Visible)

Sets the visibility of the vehicle overlap area visualization.

Parameters
VisibleWhether the vehicle overlap area should be visible or not.

Definition at line 168 of file Vehicle.cpp.

169{
170 if (OverlapSensor)
171 {
173 }
174}
void SetVisualizeOverlapArea(bool Visualize)

References OverlapSensor, and AOverlapSensor::SetVisualizeOverlapArea().

◆ TeleportVehicleTo()

void AVehicle::TeleportVehicleTo ( FVector  NewLocation,
FRotator  NewRotation 
)

Teleport the vehicle into a specific location and rotation

Parameters
NewLocation
NewRotation

◆ TeleportVehicleTo_Implementation()

void AVehicle::TeleportVehicleTo_Implementation ( FVector  NewLocation,
FRotator  NewRotation 
)
virtual

Teleport to implementation

Parameters
NewLocation
NewRotation

Definition at line 163 of file Vehicle.cpp.

164{
165 SetActorLocationAndRotation(NewLocation, NewRotation, false, nullptr, ETeleportType::TeleportPhysics);
166}

◆ ToggleLights()

void AVehicle::ToggleLights ( bool  isOn)

Toggle lights of the vehicle on or off. BlueprintImplementableEvent meant to be implemented in blueprint e.g. BP_Forwarder

Parameters
isOnPhysics on or off

◆ TogglePhysics()

void AVehicle::TogglePhysics ( bool  isOn)

Toggle physics of the vehicle on or off. BlueprintImplementableEvent meant to be implemented in blueprint e.g. BP_Forwarder

Parameters
isOnPhysics on or off

Referenced by BeginPlay(), and UROSCommands::HandleTeleportActorByID().

Member Data Documentation

◆ ActorID

FString AVehicle::ActorID
protected

Definition at line 300 of file Vehicle.h.

Referenced by APIDDrone::BeginPlay(), and BeginPlay().

◆ ActorName

FString AVehicle::ActorName
protected

Definition at line 297 of file Vehicle.h.

◆ CollisionSensor

ACollisionSensor* AVehicle::CollisionSensor = nullptr
protected

Definition at line 285 of file Vehicle.h.

Referenced by BeginPlay(), and EndPlay().

◆ InteractableName

FText AVehicle::InteractableName

◆ MovedFromGarageTransform

FTransform AVehicle::MovedFromGarageTransform
protected

Definition at line 305 of file Vehicle.h.

Referenced by ExportToJsonFile().

◆ NiagaraComponent

UNiagaraComponent* AVehicle::NiagaraComponent = nullptr
protected

Definition at line 294 of file Vehicle.h.

Referenced by BeginPlay(), and EndPlay().

◆ OnVehicleGarageChanged

FVehicleGarageChangedDelegate AVehicle::OnVehicleGarageChanged

Definition at line 261 of file Vehicle.h.

◆ OriginalCameraTransform

FTransform AVehicle::OriginalCameraTransform
protected

Definition at line 303 of file Vehicle.h.

◆ OverlapSensor

AOverlapSensor* AVehicle::OverlapSensor = nullptr
protected

Definition at line 291 of file Vehicle.h.

Referenced by BeginPlay(), EndPlay(), and SetVisualizeVehicleOverlapArea().

◆ SensorsManager

TObjectPtr<USensorsManagerComponent> AVehicle::SensorsManager
protected

Definition at line 282 of file Vehicle.h.

Referenced by AVehicle(), EndPlay(), and ASimulationLevelManager::GetSensorsManager().

◆ TransformSensor

ATransformSensor* AVehicle::TransformSensor = nullptr
protected

Definition at line 288 of file Vehicle.h.

Referenced by APIDDrone::BeginPlay(), BeginPlay(), and EndPlay().

◆ VehicleInGarage

bool AVehicle::VehicleInGarage = false
protected

Definition at line 307 of file Vehicle.h.

◆ VehicleParameters

FWheeledVehicleParameters AVehicle::VehicleParameters
protected

Definition at line 276 of file Vehicle.h.

Referenced by BeginPlay().


The documentation for this class was generated from the following files: