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
19
20#include "Vehicle.generated.h"
21
22class UNiagaraComponent;
23class USensorsManagerComponent;
25class ATranformSensor;
26class AOverlapSensor;
27
32DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FVehicleGarageChangedDelegate, bool, IsVehicleInGarage);
33
34/*
35* Base class for all vehicles
36*/
37UCLASS()
38class AGRARSENSE_API AVehicle : public APawn, public IInteractable, public IDestroyable, public IActorInformation
39{
40 GENERATED_BODY()
41
42public:
43
44 AVehicle();
45
50 UFUNCTION(BlueprintCallable)
51 virtual EVehicleTypes GetVehicleType() const
52 {
54 }
55
60 UFUNCTION(BlueprintImplementableEvent, BlueprintCallable)
61 void TogglePhysics(bool isOn);
62
63
69 UFUNCTION(BlueprintNativeEvent, BlueprintCallable)
70 void TeleportVehicleTo(FVector NewLocation, FRotator NewRotation);
71
77 virtual void TeleportVehicleTo_Implementation(FVector NewLocation, FRotator NewRotation);
78
82 UFUNCTION(BlueprintImplementableEvent, BlueprintCallable)
83 void ResetCamera();
84
89 UFUNCTION(BlueprintImplementableEvent, BlueprintCallable)
90 void ToggleLights(bool isOn);
91
96 UFUNCTION(BlueprintCallable)
97 void SetVisualizeVehicleOverlapArea(bool Visible);
98
104 UFUNCTION(BlueprintCallable)
105 FString ExportToJsonFile(const FString& FileName);
106
111 UFUNCTION(BlueprintCallable)
112 void SetVehicleIsInGarage(bool VehicleIsInGarage)
113 {
114 VehicleInGarage = VehicleIsInGarage;
115 OnVehicleGarageChanged.Broadcast(VehicleInGarage);
116 }
117
122 UFUNCTION(BlueprintPure)
123 bool IsVehicleInGarage() const
124 {
125 return VehicleInGarage;
126 }
127
132 UFUNCTION(BlueprintCallable)
133 USensorsManagerComponent* GetSensorsManager() const
134 {
135 return SensorsManager;
136 }
137
142 UFUNCTION(BlueprintPure)
143 ACollisionSensor* GetCollisionSensor() const
144 {
145 return CollisionSensor;
146 }
147
152 UFUNCTION(BlueprintPure)
153 ATransformSensor* GetTransformSensor() const
154 {
155 return TransformSensor;
156 }
157
162 UFUNCTION(BlueprintPure)
163 AOverlapSensor* GetOverlapSensor() const
164 {
165 return OverlapSensor;
166 }
167
172 UFUNCTION(BlueprintPure)
173 FTransform GetMovedFromGarageTransform() const
174 {
175 return MovedFromGarageTransform;
176 }
177
178 UFUNCTION(BlueprintCallable)
179 virtual void SetCurrentTransformToMovedFromGarageTransform()
180 {
181 MovedFromGarageTransform = GetTransform();
182 }
183
184 virtual FText GetInteractableName_Implementation() const override
185 {
186 return InteractableName;
187 }
188
189 virtual FTransform GetInteractableWorldTransform_Implementation() const override
190 {
191 return GetActorTransform();
192 }
193
194 virtual FString GetActorID_Implementation() const override
195 {
196 return ActorID;
197 }
198
199 virtual FString GetActorName_Implementation() const override
200 {
201 return ActorName;
202 }
203
204 virtual FString GetActorInformation_Implementation() const override
205 {
206 const FString Vehicle = UEnumUtilities::ConvertVehicleTypeToString(GetVehicleType());
207 const FString ID = IActorInformation::Execute_GetActorID(this);
208 const FString Name = IActorInformation::Execute_GetActorName(this);
209 const FTransform VehicleTransform = GetActorTransform();
210 const FVector Location = VehicleTransform.GetLocation();
211 const FRotator Rotation = VehicleTransform.Rotator();
212 FString Information = FString::Printf(TEXT("Vehicle: %s, Name: %s, ID: %s, Location: %s, Rotation: %s"), *Vehicle, *Name, *ID, *Location.ToString(), *Rotation.ToString());
213
214 return Information;
215 }
216
217 virtual void SetActorName_Implementation(const FString& NewActorName) override
218 {
219 ActorName = NewActorName;
220 }
221
222 virtual void SetActorIDAndName_Implementation(const FString& NewActorName, const FString& NewID) override
223 {
224 ActorName = NewActorName;
225 ActorID = NewID;
226 SetAndValidateActorIDAndName(ActorName, ActorID, TWeakObjectPtr<AActor>(this));
227 }
228
229 /*
230 * Set wheeled vehicle parameters. Does nothing for done.
231 */
232 UFUNCTION(BlueprintCallable)
233 void SetVehicleParameters(FWheeledVehicleParameters NewParameters)
234 {
235 VehicleParameters = NewParameters;
236 ApplyVehicleParameters(VehicleParameters);
237 }
238
239 /*
240 * get current wheeled vehicle parameters.
241 */
242 UFUNCTION(BlueprintPure)
243 FWheeledVehicleParameters GetVehicleParameters() const
244 {
245 return VehicleParameters;
246 }
247
248 /*
249 * Apply wheeled vehicle parameters (Blueprint side)
250 */
251 UFUNCTION(BlueprintImplementableEvent, BlueprintCallable)
252 void ApplyVehicleParameters(FWheeledVehicleParameters CurrentParameters);
253
254 virtual void PossessedBy(AController* NewController) override;
255
256 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Interactable")
257 FText InteractableName;
258
259 UPROPERTY(BlueprintAssignable)
260 FVehicleGarageChangedDelegate OnVehicleGarageChanged;
261
262protected:
263
264 virtual void BeginPlay() override;
265
266 virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
267
268 /*
269 * Wheeled vehicle parameters. Does nothing for drone.
270 */
271 UPROPERTY(Category = Vehicle, VisibleAnywhere, BlueprintReadWrite)
272 FWheeledVehicleParameters VehicleParameters;
273
274 /*
275 * Manages sensors attached to this vehicle
276 */
277 UPROPERTY(Category = Vehicle, VisibleAnywhere, BlueprintReadOnly)
278 TObjectPtr<USensorsManagerComponent> SensorsManager;
279
280 UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
281 ACollisionSensor* CollisionSensor = nullptr;
282
283 UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
284 ATransformSensor* TransformSensor = nullptr;
285
286 UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
287 AOverlapSensor* OverlapSensor = nullptr;
288
289 UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
290 UNiagaraComponent* NiagaraComponent = nullptr;
291
292 UPROPERTY(VisibleAnywhere)
293 FString ActorName;
294
295 UPROPERTY(VisibleAnywhere)
296 FString ActorID;
297
298 UPROPERTY(EditAnywhere, BlueprintReadWrite)
299 FTransform OriginalCameraTransform;
300
301 FTransform MovedFromGarageTransform;
302
303 bool VehicleInGarage = false;
304
305};
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
FString ExportToJsonFile(const FString &FileName)
Definition: Sensor.cpp:140
virtual FText GetInteractableName_Implementation() const override
Definition: Vehicle.h:184
virtual FString GetActorID_Implementation() const override
Definition: Vehicle.h:194
virtual void SetActorIDAndName_Implementation(const FString &NewActorName, const FString &NewID) override
Definition: Vehicle.h:222
virtual FString GetActorInformation_Implementation() const override
Definition: Vehicle.h:204
virtual FString GetActorName_Implementation() const override
Definition: Vehicle.h:199
virtual FTransform GetInteractableWorldTransform_Implementation() const override
Definition: Vehicle.h:189
virtual void SetActorName_Implementation(const FString &NewActorName) override
Definition: Vehicle.h:217
static void SetAndValidateActorIDAndName(FString &ActorName, FString &ActorID, TWeakObjectPtr< AActor > Actor)
static FString ConvertVehicleTypeToString(EVehicleTypes VehicleType)