Agrarsense
Vehicle.h
Go to the documentation of this file.
1// Copyright (c) 2023 FrostBit Software Lab at the Lapland University of Applied Sciences
2//
3// This work is licensed under the terms of the MIT license.
4// For a copy, see <https://opensource.org/licenses/MIT>.
5
6#pragma once
7
8#include "CoreMinimal.h"
9#include "GameFramework/Pawn.h"
10#include "Engine/World.h"
11
20
21#include "Vehicle.generated.h"
22
23class UNiagaraComponent;
24class USensorsManagerComponent;
26class ATranformSensor;
27class AOverlapSensor;
28
33DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FVehicleGarageChangedDelegate, bool, IsVehicleInGarage);
34
35/*
36* Base class for all vehicles
37*/
38UCLASS()
39class AGRARSENSE_API AVehicle : public APawn, public IInteractable, public IDestroyable, public IActorInformation
40{
41 GENERATED_BODY()
42
43public:
44
45 AVehicle();
46
51 UFUNCTION(BlueprintCallable)
52 virtual EVehicleTypes GetVehicleType() const
53 {
55 }
56
61 UFUNCTION(BlueprintImplementableEvent, BlueprintCallable)
62 void TogglePhysics(bool isOn);
63
64
70 UFUNCTION(BlueprintNativeEvent, BlueprintCallable)
71 void TeleportVehicleTo(FVector NewLocation, FRotator NewRotation);
72
78 virtual void TeleportVehicleTo_Implementation(FVector NewLocation, FRotator NewRotation);
79
83 UFUNCTION(BlueprintImplementableEvent, BlueprintCallable)
84 void ResetCamera();
85
90 UFUNCTION(BlueprintImplementableEvent, BlueprintCallable)
91 void ToggleLights(bool isOn);
92
97 UFUNCTION(BlueprintCallable)
98 void SetVisualizeVehicleOverlapArea(bool Visible);
99
105 UFUNCTION(BlueprintCallable)
106 FString ExportToJsonFile(const FString& FileName);
107
112 UFUNCTION(BlueprintCallable)
113 void SetVehicleIsInGarage(bool VehicleIsInGarage)
114 {
115 VehicleInGarage = VehicleIsInGarage;
116 OnVehicleGarageChanged.Broadcast(VehicleInGarage);
117 }
118
123 UFUNCTION(BlueprintPure)
124 bool IsVehicleInGarage() const
125 {
126 return VehicleInGarage;
127 }
128
133 UFUNCTION(BlueprintCallable)
134 USensorsManagerComponent* GetSensorsManager() const
135 {
136 return SensorsManager;
137 }
138
143 UFUNCTION(BlueprintPure)
144 ACollisionSensor* GetCollisionSensor() const
145 {
146 return CollisionSensor;
147 }
148
153 UFUNCTION(BlueprintPure)
154 ATransformSensor* GetTransformSensor() const
155 {
156 return TransformSensor;
157 }
158
163 UFUNCTION(BlueprintPure)
164 AOverlapSensor* GetOverlapSensor() const
165 {
166 return OverlapSensor;
167 }
168
173 UFUNCTION(BlueprintPure)
174 FTransform GetMovedFromGarageTransform() const
175 {
176 return MovedFromGarageTransform;
177 }
178
179 UFUNCTION(BlueprintCallable)
180 virtual void SetCurrentTransformToMovedFromGarageTransform()
181 {
182 MovedFromGarageTransform = GetTransform();
183 }
184
185 virtual FText GetInteractableName_Implementation() const override
186 {
187 return InteractableName;
188 }
189
190 virtual FTransform GetInteractableWorldTransform_Implementation() const override
191 {
192 return GetActorTransform();
193 }
194
195 virtual FString GetActorID_Implementation() const override
196 {
197 return ActorID;
198 }
199
200 virtual FString GetActorName_Implementation() const override
201 {
202 return ActorName;
203 }
204
205 virtual FString GetActorInformation_Implementation() const override
206 {
207 const FString Vehicle = UEnumUtilities::ConvertVehicleTypeToString(GetVehicleType());
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 }
217
218 virtual void SetActorName_Implementation(const FString& NewActorName) override
219 {
220 ActorName = NewActorName;
221 }
222
223 virtual void SetActorIDAndName_Implementation(const FString& NewActorName, const FString& NewID) override
224 {
225 ActorName = NewActorName;
226 ActorID = NewID;
227 SetAndValidateActorIDAndName(ActorName, ActorID, TWeakObjectPtr<AActor>(this));
228 }
229
230 /*
231 * Set wheeled vehicle parameters. Does nothing for done.
232 */
233 UFUNCTION(BlueprintCallable)
234 void SetVehicleParameters(FWheeledVehicleParameters NewParameters)
235 {
236 VehicleParameters = NewParameters;
237 ApplyVehicleParameters(VehicleParameters);
238 }
239
240 /*
241 * get current wheeled vehicle parameters.
242 */
243 UFUNCTION(BlueprintPure)
244 FWheeledVehicleParameters GetVehicleParameters() const
245 {
246 return VehicleParameters;
247 }
248
249 /*
250 * Apply wheeled vehicle parameters (Blueprint side)
251 */
252 UFUNCTION(BlueprintImplementableEvent, BlueprintCallable)
253 void ApplyVehicleParameters(FWheeledVehicleParameters CurrentParameters);
254
255 virtual void PossessedBy(AController* NewController) override;
256
257 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interactable")
258 FText InteractableName;
259
260 UPROPERTY(BlueprintAssignable)
261 FVehicleGarageChangedDelegate OnVehicleGarageChanged;
262
263protected:
264
265 virtual void BeginPlay() override;
266
267 virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
268
269 UFUNCTION()
270 virtual void ROSBridgeStateChanged(EROSState ROSState);
271
272 /*
273 * Wheeled vehicle parameters. Does nothing for drone.
274 */
275 UPROPERTY(Category = Vehicle, VisibleAnywhere, BlueprintReadWrite)
276 FWheeledVehicleParameters VehicleParameters;
277
278 /*
279 * Manages sensors attached to this vehicle
280 */
281 UPROPERTY(Category = Vehicle, VisibleAnywhere, BlueprintReadOnly)
282 TObjectPtr<USensorsManagerComponent> SensorsManager;
283
284 UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
285 ACollisionSensor* CollisionSensor = nullptr;
286
287 UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
288 ATransformSensor* TransformSensor = nullptr;
289
290 UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
291 AOverlapSensor* OverlapSensor = nullptr;
292
293 UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
294 UNiagaraComponent* NiagaraComponent = nullptr;
295
296 UPROPERTY(VisibleAnywhere)
297 FString ActorName;
298
299 UPROPERTY(VisibleAnywhere)
300 FString ActorID;
301
302 UPROPERTY(EditAnywhere, BlueprintReadWrite)
303 FTransform OriginalCameraTransform;
304
305 FTransform MovedFromGarageTransform;
306
307 bool VehicleInGarage = false;
308
309};
EROSState
Definition: ROSState.h:16
EVehicleTypes
Definition: VehicleTypes.h:15
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FVehicleGarageChangedDelegate, bool, IsVehicleInGarage)
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override
virtual void BeginPlay() override
AVehicle * Vehicle
void ROSBridgeStateChanged(EROSState ROSState)
Definition: Sensor.cpp:162
FString ExportToJsonFile(const FString &FileName)
Definition: Sensor.cpp:147
virtual FText GetInteractableName_Implementation() const override
Definition: Vehicle.h:185
virtual FString GetActorID_Implementation() const override
Definition: Vehicle.h:195
virtual void SetActorIDAndName_Implementation(const FString &NewActorName, const FString &NewID) override
Definition: Vehicle.h:223
virtual FString GetActorInformation_Implementation() const override
Definition: Vehicle.h:205
virtual FString GetActorName_Implementation() const override
Definition: Vehicle.h:200
virtual FTransform GetInteractableWorldTransform_Implementation() const override
Definition: Vehicle.h:190
virtual void SetActorName_Implementation(const FString &NewActorName) override
Definition: Vehicle.h:218
static void SetAndValidateActorIDAndName(FString &ActorName, FString &ActorID, TWeakObjectPtr< AActor > Actor)
static FString ConvertVehicleTypeToString(EVehicleTypes VehicleType)