Agrarsense
Public Member Functions | Private Member Functions | Private Attributes | List of all members
APIDDrone Class Reference

#include <PIDDrone.h>

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

Public Member Functions

 APIDDrone ()
 
virtual EVehicleTypes GetVehicleType () const override
 
virtual FTransform GetInteractableWorldTransform_Implementation () const override
 
void SetDroneAction (EDroneAction mode)
 Set drone's action (roaming, manual) More...
 
EDroneAction GetDroneAction () const
 Get drone's action (roaming, manual) More...
 
FDroneParameters GetDroneParameters () const
 
void ChangeDroneParameters (const FDroneParameters &newParameters)
 
void SetDroneParameters (const FDroneParameters &InParameters)
 
void AddWayPoint (FVector Waypoint)
 
void ClearWaypoints ()
 
void FlySetFlightpath ()
 Called in tick function for drone roaming through points. More...
 
void SetManualControl (bool value)
 
void MoveDroneToPosition (const FTransform Transform)
 Override all drone roaming points and continue towards this position. More...
 
TArray< FTransform > GenerateRoamingPoints (float radius, int32 roamingPoints)
 Generates a roadming points array for the drone in radius. More...
 
virtual void SetCurrentTransformToMovedFromGarageTransform () override
 
void SetShowForwardArrow (bool Show)
 
bool GetShowForwardArrow () const
 
- Public Member Functions inherited from AVehicle
 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)
 

Private Member Functions

virtual void BeginPlay () override
 
virtual void Tick (float DeltaTime) override
 
virtual void EndPlay (const EEndPlayReason::Type EndPlayReason) override
 
void AutoPilot (float DeltaTime)
 
bool IsRoaming () const
 
void SetDesiredLocationMesh (UStaticMeshComponent *meshcomponent)
 
void AssignRoamingPoints (const TArray< FTransform > Points)
 
void SetDroneRotation (USkeletalMeshComponent *target, FRotator rotator)
 
FVector GetCurrentWaypointTarget ()
 

Private Attributes

FDroneParameters DroneParameters
 
EFlightMode flightmode = EFlightMode::Roaming
 
UWorld * World = nullptr
 
FVector StartingPosition
 
USkeletalMeshComponent * mesh = nullptr
 
UStaticMeshComponent * desiredPositionMesh = nullptr
 
bool waypointReached = false
 
bool manualControl = false
 
TArray< FVector > WayPoints
 
int32 passedWaypoints = 0
 
bool ShowForwardArrow = 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 ()
 
- Public Attributes inherited from AVehicle
FText InteractableName
 
FVehicleGarageChangedDelegate OnVehicleGarageChanged
 
virtual void BeginPlay () override
 
virtual void EndPlay (const EEndPlayReason::Type EndPlayReason) override
 
- Protected Attributes inherited from AVehicle
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
 

Detailed Description

Definition at line 18 of file PIDDrone.h.

Constructor & Destructor Documentation

◆ APIDDrone()

APIDDrone::APIDDrone ( )

Definition at line 18 of file PIDDrone.cpp.

18 : Super()
19{
20 PrimaryActorTick.bCanEverTick = true;
21 InteractableName = NSLOCTEXT("Agrarsense", "DroneInteractableName", "Drone");
22}
FText InteractableName
Definition: Vehicle.h:257

References AVehicle::InteractableName.

Member Function Documentation

◆ AddWayPoint()

void APIDDrone::AddWayPoint ( FVector  Waypoint)
inline

Definition at line 84 of file PIDDrone.h.

85 {
86 FTransform transform;
87 transform.SetLocation(Waypoint);
88
89 DroneParameters.Points.Add(transform);
90 }
FDroneParameters DroneParameters
Definition: PIDDrone.h:182
TArray< FTransform > Points

References FDroneParameters::Points.

◆ AssignRoamingPoints()

void APIDDrone::AssignRoamingPoints ( const TArray< FTransform >  Points)
private

Definition at line 146 of file PIDDrone.cpp.

147{
148 // Empty current waypoints if any
150
151 for (const FTransform& point : Points)
152 {
153 // Assing new waypoints to the array
154 WayPoints.Add(point.GetLocation());
155 }
156}
TArray< FVector > WayPoints
Definition: PIDDrone.h:199
void ClearWaypoints()
Definition: PIDDrone.h:93

References ClearWaypoints(), and WayPoints.

◆ AutoPilot()

void APIDDrone::AutoPilot ( float  DeltaTime)
private

Definition at line 217 of file PIDDrone.cpp.

218{
220 {
221 return;
222 }
223
225}
void FlySetFlightpath()
Called in tick function for drone roaming through points.
Definition: PIDDrone.cpp:51
EDroneAction DroneAction

References FDroneParameters::DroneAction, DroneParameters, FlySetFlightpath(), and Stationary.

Referenced by Tick().

◆ BeginPlay()

void APIDDrone::BeginPlay ( )
overrideprivatevirtual

Reimplemented from AVehicle.

Definition at line 24 of file PIDDrone.cpp.

25{
26 Super::BeginPlay();
27
28 World = GetWorld();
29
30 mesh = Cast<USkeletalMeshComponent>(GetComponentByClass(USkeletalMeshComponent::StaticClass()));
31 desiredPositionMesh = Cast<UStaticMeshComponent>(GetComponentByClass(UStaticMeshComponent::StaticClass()));
32
33 StartingPosition = GetActorLocation();
34}
UWorld * World
Definition: PIDDrone.h:188
FVector StartingPosition
Definition: PIDDrone.h:190
UStaticMeshComponent * desiredPositionMesh
Definition: PIDDrone.h:193
USkeletalMeshComponent * mesh
Definition: PIDDrone.h:192

References desiredPositionMesh, mesh, StartingPosition, and World.

◆ ChangeDroneParameters()

void APIDDrone::ChangeDroneParameters ( const FDroneParameters newParameters)
inline

Definition at line 70 of file PIDDrone.h.

71 {
72#if WITH_EDITOR
73 UE_LOG(LogTemp, Warning, TEXT("Parameters Changed!"));
74#endif
75 SetDroneParameters(newParameters);
76 }
void SetDroneParameters(const FDroneParameters &InParameters)
Definition: PIDDrone.h:78

Referenced by USimulatorJsonParser::ParseAndSetDroneParameters().

◆ ClearWaypoints()

void APIDDrone::ClearWaypoints ( )
inline

Definition at line 93 of file PIDDrone.h.

94 {
95 DroneParameters.Points.Empty();
96 }

Referenced by AssignRoamingPoints().

◆ EndPlay()

void APIDDrone::EndPlay ( const EEndPlayReason::Type  EndPlayReason)
overrideprivatevirtual

Reimplemented from AVehicle.

Definition at line 36 of file PIDDrone.cpp.

37{
38 Super::EndPlay(EndPlayReason);
39}

◆ FlySetFlightpath()

void APIDDrone::FlySetFlightpath ( )

Called in tick function for drone roaming through points.

Definition at line 51 of file PIDDrone.cpp.

52{
53 // TODO: Check if in garage
54 // include drone rotation to point
55
56 // Don't try to fly if no waypoints
57 if (DroneParameters.Points.Num() == 0 && IsRoaming())
58 {
60 }
61
62 FVector waypoint = GetCurrentWaypointTarget();
63 FVector currentlocation = mesh->GetRelativeTransform().GetLocation();
64
66 {
67 // Doesn't work
68 desiredPositionMesh->SetWorldLocation(waypoint);
69 }
70#if WITH_EDITOR
71 else
72 {
73 UE_LOG(LogTemp, Warning, TEXT("Desired location mesh not found"));
74 //DrawDebugLine(World, currentlocation, waypoint, FColor::Red, false, 0.0f, 0.0f, 5.0f);
75 }
76#endif
77
78 if (FVector2f::Distance(FVector2f(waypoint.X, waypoint.Y), FVector2f(currentlocation.X, currentlocation.Y)) < 1000)
79 {
80 waypointReached = true;
81 if (passedWaypoints != DroneParameters.Points.Num() - 1)
82 {
83#if WITH_EDITOR
84 UE_LOG(LogTemp, Warning, TEXT("Changing waypoint from %i to %i"), passedWaypoints, passedWaypoints + 1);
85#endif
86
88 }
89 else
90 {
92 {
95 }
96 else
97 {
99 {
102 break;
105 passedWaypoints = 0;
106 break;
108 passedWaypoints = 0;
109 break;
111 Algo::Reverse(DroneParameters.Points);
112 passedWaypoints = 0;
113 break;
114 default:
115 break;
116 }
117 }
118 }
119 }
120}
bool waypointReached
Definition: PIDDrone.h:195
FVector GetCurrentWaypointTarget()
Definition: PIDDrone.cpp:135
int32 passedWaypoints
Definition: PIDDrone.h:204
bool IsRoaming() const
Definition: PIDDrone.h:162
TArray< FTransform > GenerateRoamingPoints(float radius, int32 roamingPoints)
Generates a roadming points array for the drone in radius.
Definition: PIDDrone.cpp:193
EDroneEndAction DroneEndAction

References desiredPositionMesh, FDroneParameters::DroneAction, FDroneParameters::DroneEndAction, DroneParameters, GenerateRandomNew, GenerateRoamingPoints(), GetCurrentWaypointTarget(), GoBackwards, IsRoaming(), mesh, passedWaypoints, FDroneParameters::Points, RepeatFromBeginning, Roaming, Stationary, Stop, and waypointReached.

Referenced by AutoPilot().

◆ GenerateRoamingPoints()

TArray< FTransform > APIDDrone::GenerateRoamingPoints ( float  radius,
int32  roamingPoints 
)

Generates a roadming points array for the drone in radius.

Parameters
radiusradius of the roaming area
Returns
TArray<FVector>

Definition at line 193 of file PIDDrone.cpp.

194{
195 TArray<FTransform> generatedRoamingPoints;
196 generatedRoamingPoints.Reserve(roamingPoints);
197
198 FVector currentPosition = this->GetTransform().GetLocation();
199
200 FVector min = currentPosition - FVector(radius / 2, radius / 2, 0);
201 FVector max = currentPosition + FVector(radius / 2, radius / 2, 0);
202
203 for (int32 i = 0; i < roamingPoints; i++)
204 {
205 FTransform randomPoint;
206 randomPoint.SetLocation(FVector(FMath::RandRange(min.X, max.X), FMath::RandRange(min.Y, max.Y), 5000));
207
208 generatedRoamingPoints.Add(randomPoint);
209#if WITH_EDITOR
210 UE_LOG(LogTemp, Warning, TEXT("Waypoint %i: (%s)"), i, *randomPoint.GetLocation().ToString());
211#endif
212 }
213
214 return generatedRoamingPoints;
215}

Referenced by FlySetFlightpath().

◆ GetCurrentWaypointTarget()

FVector APIDDrone::GetCurrentWaypointTarget ( )
private

Definition at line 135 of file PIDDrone.cpp.

136{
137 // UE_LOG(LogTemp, Warning, TEXT(" % s"), *DroneParameters.Points[passedWaypoints].GetLocation().ToString());
139 {
140 return FVector(0, 0, 0);
141 }
142
143 return DroneParameters.Points[passedWaypoints].GetLocation();
144}

References DroneParameters, passedWaypoints, and FDroneParameters::Points.

Referenced by FlySetFlightpath().

◆ GetDroneAction()

EDroneAction APIDDrone::GetDroneAction ( ) const
inline

Get drone's action (roaming, manual)

Returns
Drone's action

Definition at line 58 of file PIDDrone.h.

59 {
61 }

◆ GetDroneParameters()

FDroneParameters APIDDrone::GetDroneParameters ( ) const
inline

Definition at line 64 of file PIDDrone.h.

65 {
66 return DroneParameters;
67 }

Referenced by USimulatorJsonExporter::SetDroneParameters().

◆ GetInteractableWorldTransform_Implementation()

virtual FTransform APIDDrone::GetInteractableWorldTransform_Implementation ( ) const
inlineoverridevirtual

Reimplemented from AVehicle.

Definition at line 32 of file PIDDrone.h.

33 {
34 if (mesh)
35 {
36 return mesh->GetComponentTransform();
37 }
38 else
39 {
40 return GetActorTransform();
41 }
42 }

◆ GetShowForwardArrow()

bool APIDDrone::GetShowForwardArrow ( ) const
inline

Definition at line 146 of file PIDDrone.h.

147 {
148 return ShowForwardArrow;
149 }
bool ShowForwardArrow
Definition: PIDDrone.h:206

◆ GetVehicleType()

virtual EVehicleTypes APIDDrone::GetVehicleType ( ) const
inlineoverridevirtual

Get type of the Vehicle

Returns
Vehicle's type

Reimplemented from AVehicle.

Definition at line 30 of file PIDDrone.h.

References Drone.

◆ IsRoaming()

bool APIDDrone::IsRoaming ( ) const
inlineprivate

Definition at line 162 of file PIDDrone.h.

References Roaming.

Referenced by FlySetFlightpath().

◆ MoveDroneToPosition()

void APIDDrone::MoveDroneToPosition ( const FTransform  Transform)

Override all drone roaming points and continue towards this position.

Parameters
Transformdrone move position

Definition at line 122 of file PIDDrone.cpp.

123{
124 if (DroneParameters.Points.Num() > 0)
125 {
126 DroneParameters.Points.Empty();
128 }
129 else
130 {
132 }
133}

References DroneParameters, FDroneParameters::Points, and Transform.

◆ SetCurrentTransformToMovedFromGarageTransform()

virtual void APIDDrone::SetCurrentTransformToMovedFromGarageTransform ( )
inlineoverridevirtual

Reimplemented from AVehicle.

Definition at line 124 of file PIDDrone.h.

125 {
126 if (mesh)
127 {
128 MovedFromGarageTransform = mesh->GetComponentTransform();
129 UE_LOG(LogTemp, Warning, TEXT("Moved from garage transform %s"), *MovedFromGarageTransform.ToString());
130
131 }
132 else
133 {
134 MovedFromGarageTransform = GetActorTransform();
135 UE_LOG(LogTemp, Warning, TEXT("ACTOR Moved from garage transform WHAT IS THIS: %s"), *MovedFromGarageTransform.ToString());
136
137 }
138 }
FTransform MovedFromGarageTransform
Definition: Vehicle.h:301

◆ SetDesiredLocationMesh()

void APIDDrone::SetDesiredLocationMesh ( UStaticMeshComponent *  meshcomponent)
inlineprivate

Definition at line 168 of file PIDDrone.h.

169 {
170 desiredPositionMesh = meshcomponent;
171 }

◆ SetDroneAction()

void APIDDrone::SetDroneAction ( EDroneAction  mode)
inline

Set drone's action (roaming, manual)

Definition at line 48 of file PIDDrone.h.

49 {
51 }

◆ SetDroneParameters()

void APIDDrone::SetDroneParameters ( const FDroneParameters InParameters)
inline

Definition at line 78 of file PIDDrone.h.

79 {
80 DroneParameters = InParameters;
81 }

◆ SetDroneRotation()

void APIDDrone::SetDroneRotation ( USkeletalMeshComponent *  target,
FRotator  rotator 
)
private

Definition at line 158 of file PIDDrone.cpp.

159{
160 if (!target)
161 {
162 return;
163 }
164
165 FRotator rotation = FRotator(
166 FMath::Clamp(rotator.Pitch, -2, 2),
167 FMath::Clamp(rotator.Yaw, -2, 2),
168 FMath::Clamp(rotator.Roll, -2, 2));
169
170 FRotator currentRotation = target->GetRelativeRotation();
171
172 FRotator rotationDifference = currentRotation - rotator;
173
174 if (FMath::Abs(rotator.Pitch) > 0 && FMath::Abs(currentRotation.Pitch) < FMath::Abs(rotationDifference.Pitch))
175 {
176 target->AddRelativeRotation(FRotator(rotation.Pitch, 0, 0), false, nullptr, ETeleportType::TeleportPhysics);
177 }
178 if (FMath::Abs(rotator.Yaw) > 0 && FMath::Abs(currentRotation.Yaw) < FMath::Abs(rotationDifference.Yaw))
179 {
180 target->AddRelativeRotation(FRotator(0, rotation.Yaw, 0), false, nullptr, ETeleportType::TeleportPhysics);
181 }
182 if (FMath::Abs(rotator.Roll) > 0 && FMath::Abs(currentRotation.Roll) < FMath::Abs(rotationDifference.Roll))
183 {
184 target->AddRelativeRotation(FRotator(0, 0, rotation.Roll), false, nullptr, ETeleportType::TeleportPhysics);
185 }
186
187 if (rotator.Pitch == 0 || rotator.Yaw == 0 || rotator.Roll == 0)
188 {
189 target->AddRelativeRotation(FRotator(-FMath::Clamp(rotationDifference.Pitch, -2, 2), -FMath::Clamp(rotationDifference.Yaw, -2, 2), -FMath::Clamp(rotationDifference.Roll, -2, 2)), false, nullptr, ETeleportType::TeleportPhysics);
190 }
191}

◆ SetManualControl()

void APIDDrone::SetManualControl ( bool  value)
inline

Definition at line 105 of file PIDDrone.h.

106 {
107 manualControl = value;
108 }
bool manualControl
Definition: PIDDrone.h:196

◆ SetShowForwardArrow()

void APIDDrone::SetShowForwardArrow ( bool  Show)
inline

Definition at line 140 of file PIDDrone.h.

141 {
142 ShowForwardArrow = Show;
143 }

Referenced by USimulatorJsonParser::ParseAndSetDroneParameters().

◆ Tick()

void APIDDrone::Tick ( float  DeltaTime)
overrideprivatevirtual

Definition at line 41 of file PIDDrone.cpp.

42{
43 Super::Tick(DeltaTime);
44
45 if (!IsVehicleInGarage())
46 {
47 AutoPilot(DeltaTime);
48 }
49}
void AutoPilot(float DeltaTime)
Definition: PIDDrone.cpp:217
bool IsVehicleInGarage() const
Definition: Vehicle.h:123

References AutoPilot(), and AVehicle::IsVehicleInGarage().

Member Data Documentation

◆ desiredPositionMesh

UStaticMeshComponent* APIDDrone::desiredPositionMesh = nullptr
private

Definition at line 193 of file PIDDrone.h.

Referenced by BeginPlay(), and FlySetFlightpath().

◆ DroneParameters

FDroneParameters APIDDrone::DroneParameters
private

◆ flightmode

EFlightMode APIDDrone::flightmode = EFlightMode::Roaming
private

Definition at line 185 of file PIDDrone.h.

◆ manualControl

bool APIDDrone::manualControl = false
private

Definition at line 196 of file PIDDrone.h.

◆ mesh

USkeletalMeshComponent* APIDDrone::mesh = nullptr
private

Definition at line 192 of file PIDDrone.h.

Referenced by BeginPlay(), and FlySetFlightpath().

◆ passedWaypoints

int32 APIDDrone::passedWaypoints = 0
private

Definition at line 204 of file PIDDrone.h.

Referenced by FlySetFlightpath(), and GetCurrentWaypointTarget().

◆ ShowForwardArrow

bool APIDDrone::ShowForwardArrow = false
private

Definition at line 206 of file PIDDrone.h.

◆ StartingPosition

FVector APIDDrone::StartingPosition
private

Definition at line 190 of file PIDDrone.h.

Referenced by BeginPlay().

◆ waypointReached

bool APIDDrone::waypointReached = false
private

Definition at line 195 of file PIDDrone.h.

Referenced by FlySetFlightpath().

◆ WayPoints

TArray<FVector> APIDDrone::WayPoints
private
Initial value:
= {
{3790, 8050, 5000},
{11779.536955,6566.541435,5000}
}

Definition at line 199 of file PIDDrone.h.

Referenced by AssignRoamingPoints().

◆ World

UWorld* APIDDrone::World = nullptr
private

Definition at line 188 of file PIDDrone.h.

Referenced by BeginPlay().


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