LEAP Documentation 40220
Documentation for the LEAP project
ProjectXVehicle.h
Go to the documentation of this file.
1// Copyright Blue Isle Studios Inc 2018. All Rights Reserved.
2
3#pragma once
4
5#include "ProjectX.h"
6#include "GameFramework/Character.h"
7#include "OwnedInterface.h"
8#include "HealthInterface.h"
11#include "TeamInterface.h"
13#include "SpottableInterface.h"
14#include "TrackableInterface.h"
15#include "KillCamInterface.h"
16#include "ObjectInfoInterface.h"
17#include "ProjectXVehicle.generated.h"
18
19class USkinnedMeshComponent;
22class UMeshComponent;
23class UVehicleSeatComponent;
24class UInteractableComponent;
25class USpringArmComponent;
26class UCameraComponent;
27class UDamageHistoryComponent;
28class UAfflictionComponent;
29class UMapMarkerComponent;
30class UMapIconWidget;
32class UCameraModifier;
33enum class EAccelerationDirection : uint8;
34
36DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FVehicleBoostChanged, float, CurrentBoost);
38DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FVehicleLocomotionChangeSignature, bool, bToggle);
39DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FPassengerChangedSignature, class AProjectXVehicle*, Vehicle, class UVehicleSeatComponent*, Seat, class AProjectXCharacter*, PreviousPassenger);
41DECLARE_DYNAMIC_MULTICAST_DELEGATE(FVehicleBoostSignature);
42
43UENUM(BlueprintType)
44enum class EAccelerationDirection : uint8
45{
46 Up = 0,
47 Right = 1,
48 Down = 2,
49 Left = 3,
50 Forward = 4,
51 Back = 5
52};
53
54UCLASS()
56{
57 GENERATED_UCLASS_BODY()
58
59public:
60 //Returns this vehicle's seats (doesn't go through the hierarchy of vehicles)
61 FORCEINLINE const TArray<TWeakObjectPtr<UVehicleSeatComponent>>& GetSeats() const { return Seats; }
62 virtual TArray<UMeshComponent*> GetKillCamMeshes() const override;
63 virtual FRotator GetViewRotation() const override;
64 virtual FVector GetPawnViewLocation() const override;
65 virtual APlayerState* GetOwnedPlayerState() const override;
66 virtual float GetHealth() const override;
67 virtual float GetMaxHealth() const override;
68 virtual int32 GetTeam() const override;
69 virtual bool IsDead() const override;
70 virtual bool IsArmored() const override { return bArmored; }
71 virtual const FText& GetObjectName() const { return VehicleName; };
72 virtual const FString GetOwnerName() const;
73 virtual AKillCameraActor* SpawnKillCamActor() override;
74 virtual bool CanSpawnPlayer(const AProjectXPlayerState* Instigator) const override;
75 virtual bool GetCanSpawnOnCombatTarget() const override;
76 virtual bool GetSpawnLocation(AProjectXPlayerState* SpawnInstigator, FTransform& Transform) const override;
77 virtual bool ShouldTakeDamage(float Damage, FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser) const override;
78 virtual float InternalTakeRadialDamage(float Damage, FRadialDamageEvent const& RadialDamageEvent, class AController* EventInstigator, class AActor* DamageCauser) override;
79 virtual bool GetRespawnInformation(struct FRespawnInformation& RespawnInfo);
80 virtual float TakeDamage(float Damage, struct FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser) override;
81 virtual void SetHealth(const float NewHealth) override;
82 virtual void SetMaxHealth(const float NewHealth) override;
83 virtual void SetHealthRegenRate(float NewRate) override { HealthRegenRate = NewRate; }
84
85 virtual void Die(float Damage, struct FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser, APlayerState* InstigatorPlayerState);
86 virtual UAfflictionComponent* GetAfflictionComponent() const override;
87 virtual void InitFromRespawnInformation(const struct FRespawnInformation& RespawnInfo);
88 /* Returns the latest team value this vehicle had */
89 virtual int32 GetCachedTeam() const;
90 virtual void HandleCollisionDamagesVehicle(const FHitResult& Hit);
91 virtual void HandleCollisionDamagesOthers(const FHitResult& Hit);
92 virtual void HandleCollisionPushesCharacter(const FHitResult& Hit);
93 virtual void OnOwnerLeave() override;
94 virtual void TemporarilyIgnoreCharacterFromVehicleCollisions(TWeakObjectPtr<AProjectXCharacter> Character);
95
96 virtual bool CanBeLockedOn(const AActor* LockInstigator) const override;
97 virtual bool CanBeRepaired(const AActor* RepairInstigator) const override;
98 virtual FText GetHighlightText(const UPrimitiveComponent* Component, const APlayerController* EventSender) const override;
99 virtual bool CanBeInteractedWith(const UPrimitiveComponent* Component, const APlayerController* EventSender) const override;
100 virtual FVector2D GetLockOnScreenPercentage() override { return LockOnScreenPercentage; }
101 virtual float GetLockOnMaxDistance() { return MaxLockOnRange; }
102 virtual FPawnLockOnSignature& GetLockOnTentativeStartDelegate() override { return OnLockOnTentativeStart; }
103 virtual FPawnLockOnSignature& GetLockOnTentativeEndDelegate() override { return OnLockOnTentativeEnd; }
104 virtual FPawnLockOnSignature& GetLockOnStartDelegate() override { return OnLockOnStart; }
105 virtual FPawnLockOnSignature& GetLockOnEndDelegate() override { return OnLockOnEnd; }
106 virtual FPawnImminentMissileWarningSignature& GetImminentMissileWarningStartDelegate() override { return OnImminentMissileWarningStart; }
107 virtual FPawnImminentMissileWarningSignature& GetImminentMissileWarningEndDelegate() override { return OnImminentMissileWarningEnd; }
108 virtual FPawnIncomingProjectileSignature& GetIncomingProjectileStartDelegate() override { return OnIncomingProjectileStart; }
109 virtual FPawnIncomingProjectileSignature& GetIncomingProjectileEndDelegate() override { return OnIncomingProjectileEnd; }
110 virtual ESpotReply CanBeSpotted(const AActor* SpotInstigator, ESpotType SpotType) const override;
111 virtual FVector GetSpottingTraceOffset() const override { return GetActorLocation(); }
112 virtual TSoftObjectPtr<UTexture2D> GetMapIcon() const override { return VehicleMapIcon; }
113 virtual TSoftObjectPtr<UTexture2D> GetRadarIcon() const override { return VehicleRadarIcon; }
114 virtual TSoftObjectPtr<UTexture2D> GetHudIcon() const override { return VehicleHudIcon; }
115 virtual AActor* GetTrackableInterfaceActor() override { return this; }
116 virtual TArray<AActor*> GetIgnoredActors();
117 virtual FVector GetVelocity() const override;
118
119 void UpdateVisibilityModifier(bool NewVisibility) { bVisible = NewVisibility; }
120 void MoveIgnoreActorsRemoveVehicle(AActor* const ActorToIgnore);
121 void MoveIgnoreActorsAddVehicle(AActor* const ActorToIgnore);
122
123 UFUNCTION(BlueprintCallable, Category = Seat)
124 FORCEINLINE FText GetVehicleName() const { return VehicleName; }
125 UFUNCTION(BlueprintPure, Category = Vehicle)
126 FORCEINLINE AProjectXCharacter* GetDriver() const { return Driver.Get(); }
127 UFUNCTION(BlueprintPure, Category = Vehicle)
128 FORCEINLINE UVehicleSeatComponent* GetDriverSeat() const { return DriverSeat; }
129 UFUNCTION(BlueprintPure, Category = Weapon)
130 FORCEINLINE UWeaponComponent* GetVehicleWeaponComponent() const { return VehicleWeaponComponent; }
131 UFUNCTION(BlueprintPure, Category = "Vehicle|Spawn")
132 FORCEINLINE bool GetPlayerCanSpawnInside() const { return bPlayerCanSpawnInside; }
133 UFUNCTION(BlueprintPure, Category = "Vehicle|Spawn")
134 FORCEINLINE bool GetPlayerCanSpawnNearby() const { return bPlayerCanSpawnNearby; }
135 UFUNCTION(BlueprintPure, Category = Vehicle)
136 FORCEINLINE bool IsOccupant(const AProjectXCharacter* Character) const { return GetSeatByOccupant(Character) != NULL; }
137 UFUNCTION(BlueprintPure, Category = Vehicle)
138 virtual bool IsAccelerating(const EAccelerationDirection Direction) const;
139 UFUNCTION(BlueprintPure, Category = Vehicle)
140 FORCEINLINE bool IsMovingForward() const { return !GetVelocity().IsZero() && (GetVelocity().GetSafeNormal2D() | GetActorForwardVector()) > -0.1; }
141 UFUNCTION(BlueprintPure, Category = Vehicle)
142 FORCEINLINE bool IsMovingBackwards() const { return !GetVelocity().IsZero() && (GetVelocity().GetSafeNormal2D() | -GetActorForwardVector()) > -0.1; }
143 UFUNCTION(BlueprintPure, Category = Vehicle)
144 FORCEINLINE bool IsMoving() const { return !GetVelocity().IsZero(); }
145 UFUNCTION(BlueprintPure, Category = Vehicle)
146 virtual bool IsVisible() const { return bVisible; }
147 UFUNCTION(BlueprintPure, Category = "Vehicle|Spawn")
148 FORCEINLINE bool HasOwnerVehicle() const { return GetParentActor() ? GetParentActor()->IsA(AProjectXVehicle::StaticClass()) : false;}
149 UFUNCTION(BlueprintPure, Category = "Vehicle|Spawn")
150 FORCEINLINE AProjectXVehicle* GetOwnerVehicle() const { return Cast<AProjectXVehicle>(GetParentActor());}
151 UFUNCTION(BlueprintCallable, Category = "Vehicle|UI")
152 FORCEINLINE TSoftObjectPtr<UTexture2D> GetSeatsHUDIcon() const { return VehicleSeatsHUDIcon; }
153 UFUNCTION(BlueprintCallable, Category = "Vehicle|Controls")
154 FORCEINLINE float GetExitTime() const {return ExitTime;}
155 UFUNCTION(BlueprintPure, Category = "Vehicle")
156 bool CanExitVehicle() const;
157 UFUNCTION(BlueprintPure, Category = "Vehicle")
158 bool IsInteractionDisabled() const { return !bCanBeInteractedWith; }
159 UFUNCTION(BlueprintPure, Category = Vehicle)
160 FVector GetVehicleRelativeAcceleration() const;
161 //Is this vehicle used for display only? Like in a store or armory
162 UFUNCTION(BlueprintPure, Category = "Vehicle")
163 FORCEINLINE bool GetIsDisplayOnly() const { return bDisplayOnly; }
164
165 UFUNCTION(BlueprintPure, Category = Vehicle)
166 virtual FVector GetAimTargetPoint() const;
167 UFUNCTION(BlueprintPure, Category = Vehicle)
168 virtual bool IsBoosting() const;
169 UFUNCTION(BlueprintPure, Category = Vehicle)
170 virtual float GetBoostMultiplier() const { return BoostMultiplier; }
171 UFUNCTION(BlueprintPure, Category = Vehicle)
172 virtual float GetCurrentBoost() const { return Boost; }
173 UFUNCTION(BlueprintPure, Category = Vehicle)
174 virtual float GetBoostRegenRate() const { return BoostRegenRate; }
175 UFUNCTION(BlueprintPure, Category = Vehicle)
176 virtual float GetMaxBoost() const { return MaxBoost; }
177 /* Gets all seats from the entire vehicle hierarchy */
178 TArray<TWeakObjectPtr<UVehicleSeatComponent>> GetSeatList() const;
179 /* Gets the vehicle hierarchy this vehicle belongs to */
180 TArray<AProjectXVehicle*> GetVehicleHierarchy() const;
181 UFUNCTION(BlueprintPure, Category = Vehicle)
182 TArray<UVehicleSeatComponent*> K2_GetSeats() const;
183 /* Gets all occupants from the entire vehicle hierarchy */
184 UFUNCTION(BlueprintPure, Category = Vehicle)
185 TArray<AProjectXCharacter*> GetOccupants() const;
186 UFUNCTION(BlueprintPure, Category = Vehicle)
187 FRotator GetWeaponInterpolatedRotation(float DeltaTime, const FRotator& CurrentRotation, const FRotator& TargetRotation, UVehicleSeatComponent* Seat);
188 UFUNCTION(BlueprintPure, Category = Vehicle)
189 virtual bool CanEnterVehicle(AProjectXCharacter* Character) const;
190 UFUNCTION(BlueprintPure, Category = Vehicle)
191 virtual bool HasAvailableSeat() const;
192 UFUNCTION(BlueprintPure, Category = Vehicle)
193 virtual bool HasAnyOccupants() const;
194 /* Does the provided vehicle belong to this vehicle's hierarchy? */
195 UFUNCTION(BlueprintPure, Category = Vehicle)
196 bool IsVehicleInHierarchy(const AProjectXVehicle* Vehicle) const;
197 UFUNCTION(BlueprintPure, Category = Vehicle)
198 virtual UVehicleSeatComponent* GetSeatByOccupant(const AProjectXCharacter* Character) const;
199 //Returns the best possible seat based on the distance from the character to the vehicle. If the character is NULL, returns the best seat based on its capabilities, like a driver seat, gunner seat...
200 UFUNCTION(BlueprintPure, Category = Vehicle)
201 virtual UVehicleSeatComponent* GetBestAvailableSeat(const AProjectXCharacter* Character) const;
202 //Attempts to enter a vehicle with a specified pawn at a specified seat. Returns true if successful.
203 UFUNCTION(BlueprintCallable, Category = Vehicle)
204 virtual bool EnterVehicle(AProjectXCharacter* Character, UVehicleSeatComponent* PreferredSeat = NULL);
205 //Attempts to leave a vehicle with a specified pawn. Returns true if successful. Use bForceLeave if the pawn needs to be forcibly ejected from the vehicle.
206 UFUNCTION(BlueprintCallable, Category = Vehicle)
207 virtual bool LeaveVehicle(AProjectXCharacter* Character, bool bForceLeave = false, bool bEject = false);
208 //Attempts to make specified passenger pawn the driver of this vehicle. Returns true if successful.
209 UFUNCTION(BlueprintCallable, Category = Vehicle)
210 virtual bool AttemptToBecomeDriver(AProjectXCharacter* Character);
211 UFUNCTION(BlueprintCallable, Category = Vehicle)
212 virtual void AddComponentForCollisionComputations(UPrimitiveComponent* const PrimitiveComponent);
213 UFUNCTION(BlueprintCallable, Category = Vehicle)
214 virtual void UpdateCanInteractWith(bool bCanInteract){bCanBeInteractedWith = bCanInteract;}
215 UFUNCTION(BlueprintPure, Category = Vehicle)
216 FRotator GetClampedAimRotationToVehicleForward(const FRotator& ForwardRotation, const FVector& ForwardLocation) const;
217 UFUNCTION(BlueprintPure, Category = Vehicle)
218 bool IsAPersonalVehicle() const;
219
220 UFUNCTION(BlueprintPure, BlueprintNativeEvent, Category = Vehicle)
221 bool GetProjectileTransform(FTransform& Transform, FName& SocketName, UVehicleSeatComponent* Seat, bool CosmeticOnly = false);
222 UFUNCTION(BlueprintImplementableEvent, BlueprintCallable)
223 void DriverChangedEvent(AProjectXCharacter* PreviousDriver, AProjectXCharacter* NewDriver);
224 UFUNCTION(BlueprintImplementableEvent)
225 void PlayWeaponFireEffects(UWeaponInstanceVehicle* Weapon);
226 UFUNCTION(BlueprintImplementableEvent)
227 void OnDeathEvent();
228 UFUNCTION(BlueprintImplementableEvent)
229 void OnMoveUp();
230 UFUNCTION(BlueprintImplementableEvent)
231 void K2_VehicleSetAsDisplay();
232 UFUNCTION(BlueprintImplementableEvent, Category = Vehicle)
233 FVector GetAimStartPoint() const;
234 UFUNCTION(BlueprintImplementableEvent, Category = "Vehicle|KillCam")
235 FVector GetKillCamWidgetPlacementPivot() const;
236 UFUNCTION(BlueprintPure, Category = Vehicle)
237 const FString& GetVehicleID() const { return VehicleID; }
238 UFUNCTION(BlueprintPure,Category = Vehicle, meta = (DisplayName = "GetVehicleID", ScriptName = "GetVehicleID"))
239 static FString GetVehicleIDStatic(TSubclassOf<AProjectXVehicle> VehicleClass) { { return (VehicleClass && VehicleClass->GetDefaultObject<AProjectXVehicle>()) ? VehicleClass->GetDefaultObject<AProjectXVehicle>()->GetVehicleID() : ""; } }
240
241 UPROPERTY(BlueprintAssignable, Category = Vehicle)
242 FDriverChangedSignature OnDriverChanged;
243 UPROPERTY(BlueprintAssignable, Category = "Locomotion Events")
244 FVehicleLocomotionChangeSignature OnBoostingChanged;
245 UPROPERTY(BlueprintAssignable, Category = Vehicle)
246 FPassengerChangedSignature OnPassengerChanged;
247 UPROPERTY(BlueprintAssignable)
248 FLandedSignature OnLand;
249 UPROPERTY(BlueprintAssignable, Category = "Lock On Events")
250 FPawnLockOnSignature OnLockOnTentativeStart;
251 UPROPERTY(BlueprintAssignable, Category = "Lock On Events")
252 FPawnLockOnSignature OnLockOnTentativeEnd;
253 UPROPERTY(BlueprintAssignable, Category = "Lock On Events")
254 FPawnLockOnSignature OnLockOnStart;
255 UPROPERTY(BlueprintAssignable, Category = "Lock On Events")
256 FPawnLockOnSignature OnLockOnEnd;
257 UPROPERTY(BlueprintAssignable, Category = "Lock On Events")
258 FPawnImminentMissileWarningSignature OnImminentMissileWarningStart;
259 UPROPERTY(BlueprintAssignable, Category = "Lock On Events")
260 FPawnImminentMissileWarningSignature OnImminentMissileWarningEnd;
261 UPROPERTY(BlueprintAssignable, Category = "Lock On Events")
262 FPawnIncomingProjectileSignature OnIncomingProjectileStart;
263 UPROPERTY(BlueprintAssignable, Category = "Lock On Events")
264 FPawnIncomingProjectileSignature OnIncomingProjectileEnd;
265 UPROPERTY(BlueprintAssignable)
266 FVehicleDiedEvent OnVehicleDied;
267 UPROPERTY(BlueprintAssignable)
268 FVehicleBoostChanged OnVehicleBoostChanged;
269 UPROPERTY(BlueprintAssignable)
270 FVehicleBoostSignature OnVehicleStartedBoosting;
271 UPROPERTY(BlueprintAssignable)
272 FVehicleBoostSignature OnVehicleStoppedBoosting;
273
274protected:
275 friend class UVehicleSeatComponent;
276 virtual bool DriverEnter(AProjectXCharacter* Character);
277 virtual bool DriverLeave(AProjectXCharacter* Character, bool bForceLeave);
278
279 virtual void SetDriving(bool bNewDriving);
280 virtual void PostInitializeComponents() override;
281 virtual void PreReplication(IRepChangedPropertyTracker & ChangedPropertyTracker) override;
282 virtual void BeginPlay() override;
283 virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
284 virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
285 virtual void Tick(float DeltaTime) override;
286 virtual void TickHealthRegen(float DeltaTime);
287 virtual void TickBoost(float DeltaTime);
288 virtual void ToggleBoost(bool bToggle);
289 virtual void SendActorLookRotationAndPosition();
290 virtual void OnSwitchMovementMode(bool bNewDriving);
291
292 virtual void StartBoosting();
293 virtual void StopBoosting();
294 virtual void MoveForward(float Val);
295 virtual void MoveRight(float Val);
296 virtual void TurnAtRate(float Rate);
297 virtual void LookUpAtRate(float Rate);
298 virtual void Turn(float Value);
299 virtual void LookUp(float Value);
300 virtual void MoveUp(float Vaue);
301 virtual void StopJumping() override;
302 virtual void Jump() override;
303 virtual void Landed(const FHitResult& Hit) override;
304
305 //Finds a friendly exit for a given pawn. Returns false if it could not find a friendly exit (still will provide a valid exit location).
306 UFUNCTION(BlueprintCallable, Category = Vehicle)
307 virtual bool FindExitDestination(AProjectXCharacter* Character, FTransform& Transform) const;
308 UFUNCTION(BlueprintCallable, Category = Vehicle)
309 virtual void SetAsDisplayOnly();
310 UFUNCTION(BlueprintCallable, Category = Vehicle)
311 virtual void SetDisplayDriver(AProjectXCharacter* CosmeticDriver);
312 //Gets closest entry location for a given pawn. Returns a byte denoting from where the player will be entering (if applicable).
313 UFUNCTION(BlueprintCallable, Category = Vehicle)
314 virtual UVehicleSeatComponent* GetClosestEntryLocation(AProjectXCharacter* Character, FVector& Location) const;
315 virtual FName GetClosestSeatName(const APlayerController* QueryController) const;
316
317 void PassengersChanged(UVehicleSeatComponent* Seat, AProjectXCharacter* PreviousPassenger);
318 virtual void OnVehicleEmpty();
319 virtual void StartSelfDestruction(UWorld* World);
320 virtual void StopSelfDestruction(UWorld* World);
321
322 UFUNCTION(BlueprintPure, Category = Vehicle)
323 FORCEINLINE bool IsHoverVehicle() const { return bHasGravityInFlyingMode; }
324 UFUNCTION(BlueprintPure, Category = Vehicle)
325 FORCEINLINE bool DoesVehicleMoveRelativeToSelf() const { return bMoveVehicleRelative; }
326
327 UFUNCTION(Client, Reliable)
328 void Client_StopJumping();
329 UFUNCTION(Server, Reliable)
330 void Server_ProcessHit(const FHitResult& Hit);
331 UFUNCTION(Server, Reliable)
332 void Server_ToggleBoost(const bool bToggle);
333 //Called every frame by the locally controlled client.
334 UFUNCTION(Server, Unreliable)
335 void Server_Unreliable_SendCameraLocation(const FVector_NetQuantize10& CameraPosition);
336 UFUNCTION(Server, Unreliable)
337 void Server_Unreliable_SendPitchValue(uint16 NewPawnPitchValue);
338 UFUNCTION(Server, Unreliable)
339 void Server_Unreliable_SendYawValue(uint16 NewPawnPitchValue);
340 //Called every frame by authority.
341 UFUNCTION(NetMulticast, Unreliable)
342 void Multicast_Unreliable_CameraPosition(const FVector_NetQuantize10& CameraPosition);
343 UFUNCTION(NetMulticast, Unreliable)
344 void Multicast_Unreliable_SendPitchValue(uint16 NewPawnYawValue);
345 UFUNCTION(NetMulticast, Unreliable)
346 void Multicast_Unreliable_SendYawValue(uint16 NewPawnYawValue);
347
348 UFUNCTION()
349 virtual void ExitPersonalVehicle();
350 UFUNCTION()
351 virtual void OnVehicleHit(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit);
352 UFUNCTION()
353 virtual void OnVehicleBeginOverlap(AActor* OverlappedActor, AActor* OtherActor);
354 UFUNCTION()
355 virtual void OnVehicleEndOverlap(AActor* OverlappedActor, AActor* OtherActor);
356
357 UFUNCTION()
358 virtual void OnSelected(APlayerController* Sender, class UPrimitiveComponent* Component);
359 UFUNCTION()
360 virtual void OnHighlighted(APlayerController* Sender, class UPrimitiveComponent* Component);
361
362 UFUNCTION()
363 virtual void OnRep_WeaponComponent();
364 UFUNCTION()
365 virtual void OnRep_IsBoosting();
366 UFUNCTION()
367 virtual void OnRep_Driver();
368 UFUNCTION()
369 virtual void OnRep_Health(float PreviousHealth);
370
371 UFUNCTION()
372 virtual void OnRep_Boost();
373
374 /* Name of this vehicle */
375 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Vehicle", meta = (AllowPrivateAccess = true))
376 FText VehicleName;
377 /* Sockets to fire vehicle projectiles from */
378 UPROPERTY(Category = "Vehicle|Cosmetics", EditDefaultsOnly)
379 TArray<FName> FiringSockets;
380 /* Should we align the driver's view to the vehicle's forward vector when entering this vehicle? */
381 UPROPERTY(Category = "Vehicle", EditDefaultsOnly)
382 bool bAlignCameraOnVehicleEnter = false;
383 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|KillCam")
384 TSubclassOf<AKillCameraActor> KillCamActorClass = NULL;
385 /*How far Away is the kill cam from the mesh*/
386 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|KillCam")
387 float KillCameraDistance = 0.0f;
388 /* The max angle we will try to align our vehicle to in slopes */
389 UPROPERTY(Category = "Vehicle", EditDefaultsOnly)
390 FVector2D MaxTerrainConformAngle = FVector2D(45.0f, 45.0f);
391 /* Do collisions with things harm our vehicle? */
392 UPROPERTY(Category = "Vehicle|Collision", EditDefaultsOnly)
393 bool bCollisionDamagesVehicle = false;
394 /* Damage type to be applied to this vehicle when colliding with things. Defaults to UDamageType_Physical*/
395 UPROPERTY(Category = "Vehicle|Collision", EditDefaultsOnly, meta = (EditCondition = "bCollisionDamagesVehicle"))
396 TSubclassOf<UDamageType> VehicleCollisionDamageTakenType;
397 /* How much damage this vehicle should take per KM/H when colliding with things, calculation is based on how much speed this vehicle has above MinSpeedRequiredForTakingDamage*/
398 UPROPERTY(Category = "Vehicle|Collision", EditDefaultsOnly, meta = (EditCondition = "bCollisionDamagesVehicle"))
399 float VehicleDamageOnCollisionAmount = 100.f;
400 /* This vehicle will only take damage if its speed is bigger than this value in KM/H */
401 UPROPERTY(Category = "Vehicle|Collision", EditDefaultsOnly, meta = (EditCondition = "bCollisionDamagesVehicle"))
402 float MinSpeedRequiredForTakingDamage = 30.f;
403 /* A multiplier that acts on the damage taken based on the angle between this vehicle's velocity and the collision's impact normal */
404 UPROPERTY(Category = "Vehicle|Collision", EditDefaultsOnly, meta = (EditCondition = "bCollisionDamagesVehicle"))
405 float CollisionAngleDamageMultiplier = 1.f;
406 /* Can this vehicle harm other things by colliding with them? */
407 UPROPERTY(Category = "Vehicle|Collision", EditDefaultsOnly)
408 bool bCollisionDamagesOthers = false;
409 /* Damage type to be applied to things that this vehicle collides with. Defaults to UDamageType_Physical*/
410 UPROPERTY(Category = "Vehicle|Collision", EditDefaultsOnly, meta = (EditCondition = "bCollisionDamagesOthers"))
411 TSubclassOf<UDamageType> VehicleCollisionDamageInflictedType;
412 /* How much damage this vehicle should inflict per KM/H when colliding with characters, calculation is based on how much speed this vehicle has above MinSpeedRequiredForApplyingDamage */
413 UPROPERTY(Category = "Vehicle|Collision", EditDefaultsOnly, meta = (EditCondition = "bCollisionDamagesOthers"))
414 float CharactersDamageOnCollisionAmount = 100.f;
415 /* This vehicle will only apply damage to characters if its speed is bigger than this value in KM/H */
416 UPROPERTY(Category = "Vehicle|Collision", EditDefaultsOnly, meta = (EditCondition = "bCollisionDamagesOthers"))
417 float MinSpeedRequiredForApplyingDamage = 30.f;
418 /* Should this vehicle push characters when colliding with them? */
419 UPROPERTY(Category = "Vehicle|Collision", EditDefaultsOnly)
420 bool bCollisionPushesCharacters = false;
421 /* How much impulse should be applied per KM/H to other characters when this vehicle hit them */
422 UPROPERTY(Category = "Vehicle|Collision", EditDefaultsOnly, meta = (EditCondition = "bCollisionPushesCharacters"))
423 float CharactersImpulseOnCollisionAmount = 5000.f;
424 /* The maximum amount of force we can apply to characters hit (magnitude) */
425 UPROPERTY(Category = "Vehicle|Collision", EditDefaultsOnly, meta = (EditCondition = "bCollisionPushesCharacters"))
426 float CharactersImpulseOnCollisionMaxAmount = 20000.f;
427 /* How much upwards offset to the launch vector we should apply to other characters when we hit them. This helps to prevent us pushing characters towards the ground which can slow them drastically while being pushed */
428 UPROPERTY(Category = "Vehicle|Collision", EditDefaultsOnly, meta = (EditCondition = "bCollisionPushesCharacters"))
429 float CharactersImpulseOnCollisionVerticalOffset = 10.f;
430 /* How much forward motion is applied to this pawn every tick. Useful for airships which would always have *some* degree of forward motion. */
431 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Controls", meta = (ClampMin = "0.0", ClampMax = "1.0"))
432 float ConstantForwardAmount = 0.0f;
433 /* Speed multiplier applied while boosting */
434 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Controls")
435 float BoostMultiplier = 5.0f;
436 /* Sensitivity applied over the Input as a multiplier to the vertical axis*/
437 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Controls")
438 float VerticalSensitivity = 35.f;
439 /* Sensitivity applied over the Input as a multiplier to the horizontal axis*/
440 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Controls")
441 float HorizontalSensitivity = 35.f;
442 /* A multiplier that acts on the engine when moving Forward/Backwards */
443 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Controls")
444 float ForwardSpeedMultiplier = 1.f;
445 /* A multiplier that acts on the engine when moving Left/Right */
446 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Controls")
447 float SidewaysSpeedMultiplier = .5f;
448 /* A multiplier that acts on the Throttle when going Up */
449 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Controls", meta = (EditCondition = "!bHasGravityInFlyingMode"))
450 float ThrottleUpMultiplier = 1.f;
451 /* A multiplier that acts on the Throttle when going Down */
452 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Controls", meta = (EditCondition = "!bHasGravityInFlyingMode"))
453 float ThrottleDownMultiplier = 1.f;
454 /* Should the vehicle tilt based on velocity? */
455 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Vehicle|Controls")
456 bool bAllowCosmeticTilts = true;
458 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Controls", meta = (EditCondition = "bAllowCosmeticTilts"))
459 float MaxHoverTilt = 10.0f;
461 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Controls", meta = (EditCondition = "bAllowCosmeticTilts"))
462 float MaxHoverPitch = 10.0f;
464 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Vehicle|Controls")
465 bool bHasGravityInFlyingMode = false;
467 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Controls", meta = (EditCondition = "bHasGravityInFlyingMode"))
468 float TerrainConformSpeed = 4.0f;
470 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Controls", meta = (EditCondition = "bHasGravityInFlyingMode"))
471 float FallingForwardTilt = 0.25f;
473 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Controls", meta = (EditCondition = "bHasGravityInFlyingMode"))
474 bool IgnoreTerrainPitch = false;
476 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Controls", meta = (EditCondition = "bHasGravityInFlyingMode"))
477 float VehicleMeshSmoothingSpeed = 5.0f;
479 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Controls", meta = (EditCondition = "bHasGravityInFlyingMode"))
480 float TerrainConformSpeedFalling = 1.0f;
482 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Controls", meta = (EditCondition = "bIsHoverVehicle"))
483 float HoverAdjustmentSpeed = 100.0f;
486 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Controls", meta = (EditCondition = "bIsHoverVehicle"))
487 float MaxFloorAngleToAlignInput = 30.0f;
489 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Vehicle|Controls")
490 bool bMoveVehicleRelative = false;
492 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Vehicle|Controls")
493 bool bRotateMeshToVelocityDirection = false;
495 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Controls", meta = (EditCondition = "bRotateMeshToStrafeDirection"))
496 float RotateMeshToStrafeDirectionSpeed = 10.0f;
497 /* A curve that can be used to dynamically change the drain rate of this boost while not grounded */
498 UPROPERTY(EditDefaultsOnly, Category = Jetpack, meta = (EditCondition = "bUseBoostInsteadOfJump"))
499 class UCurveFloat* BoostDrainCurve = NULL;
500 /* Whether this vehicle can respawn or not*/
501 UPROPERTY(EditAnywhere, Category = "Vehicle|Spawn")
502 bool bCanRespawn = true;
503 /* Whether a player can spawn inside this vehicle or not */
504 UPROPERTY(EditAnywhere, Category = "Vehicle|Spawn")
505 bool bVehicleCanBeUsedForSpawn = true;
506 /* Whether a player can spawn inside this vehicle if there are seats available*/
507 UPROPERTY(EditAnywhere, Category = "Vehicle|Spawn", meta = (EditCondition = "bVehicleCanBeUsedForSpawn"))
508 bool bPlayerCanSpawnInside = true;
509 /* Whether a player can spawn near the vehicle (outside) if there are no seats available */
510 UPROPERTY(EditAnywhere, Category = "Vehicle|Spawn", meta = (EditCondition = "bVehicleCanBeUsedForSpawn"))
511 bool bPlayerCanSpawnNearby = false;
512 /*Time it takes for the vehicle to respawn after being destroyed*/
513 UPROPERTY(EditAnywhere, Category = "Vehicle|Respawn")
514 float RespawnTime = 25.f;
515 /*Time it takes for the vehicle to respawn after being destroyed*/
516 UPROPERTY(EditAnywhere, Category = "Vehicle|Respawn")
517 float PostLifeDuration = 5.0f;
518 /*ForceApplied Vertically When destroyed*/
519 UPROPERTY(EditAnywhere, Category = "Vehicle|Respawn")
520 float DeathImpulseForce = 1000.0f;
521 /* Should this vehicle keep its last aim hit location as the zeroing? This could be helpful when aiming towards the sky as the aim target can shift drastically between what's in front and what is the infinite range (Skybox) */
522 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Aim")
523 bool bRetainLastKnownZeroingWhenNoHit = true;
524 /* The minimum amount of distance that we consider for setting the zeroing in centimeters. This means that if something is closer than AimMinZeroing, this vehicle won't adjust the angle of its guns to match that location, it will aim forward instead */
525 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Aim")
526 float AimMinDistanceForZeroing = 1000.f;
527 /* The default zeroing set when RetainLastKnownZeroingWhenNoHit is set to false and we can't identify what to set our Zeroing to*/
528 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Aim")
529 float AimDefaultZeroing = 100000000.f;
530 /* Maximum amount of degrees the gun can deviate from the vehicle's front*/
531 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Vehicle|Aim")
532 float MaxAimAngleDeviation = 15.f;
533 /* This icon will be used for the vehicle on the map */
534 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|UI")
535 TAssetPtr<UTexture2D> VehicleSeatsHUDIcon = NULL;
536 /* This icon will be used for the vehicle on the map */
537 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|UI")
538 TAssetPtr<UTexture2D> VehicleMapIcon = NULL;
539 /* This vehicle's icon that is to be displayed on HUDs*/
540 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|UI")
541 TSoftObjectPtr<UTexture2D> VehicleHudIcon = NULL;
542 /* This vehicle's icon that is to be displayed on radars*/
543 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|UI")
544 TSoftObjectPtr<UTexture2D> VehicleRadarIcon = NULL;
545 /* Amount of time to bob the vehicle down when it lands */
546 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Cosmetics")
547 float VehicleDownBobSpeed = 5.f;
548 /* Amount of time to bob the vehicle up when it lands */
549 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Cosmetics")
550 float VehicleUpBobSpeed = 15.f;
551 /* Distance to bob the vehicle when it lands */
552 UPROPERTY(EditDefaultsOnly, Category = "Vehicle|Cosmetics")
553 float VehicleBobDistance = 100.0f;
554 /* Is this vehicle meant to be used only as a display? Such as in preview modes for a store or armory */
555 UPROPERTY(EditAnywhere, BlueprintReadWrite , Category = "Vehicle|Cosmetics", Meta = (ExposeOnSpawn = true))
556 bool bDisplayOnly = false;
557 /* Latest team value before a new driver being replicated */
558 UPROPERTY(BlueprintReadOnly, Category = "Vehicle|Stats")
559 int32 CachedTeam = INDEX_NONE;
560 /* Bool that allow vehicles to use boost */
561 UPROPERTY(Category = "Vehicle|Controls", EditDefaultsOnly, BlueprintReadOnly)
562 bool bVehicleCanBoost = true;
563 /* Minimum Damage from vehicle explosion */
564 UPROPERTY(Category = "Vehicle|Explosion", EditDefaultsOnly, BlueprintReadOnly)
565 float MinimumVehicleExplosionDamage = 10.0f;
566 /* Base vehicle explosion damage */
567 UPROPERTY(Category = "Vehicle|Explosion", EditDefaultsOnly, BlueprintReadOnly)
568 float BaseVehicleExplosionDamage = 50.0f;
569 /* Vehicle explosion inner radius */
570 UPROPERTY(Category = "Vehicle|Explosion", EditDefaultsOnly, BlueprintReadOnly)
571 float ExplosionInnerRadius = 1000.0f;
572 /* Vehicle explosion outer radius */
573 UPROPERTY(Category = "Vehicle|Explosion", EditDefaultsOnly, BlueprintReadOnly)
574 float ExplosionOuterRadius = 2000.0f;
575 /* Vehicle explosion damage falloff */
576 UPROPERTY(Category = "Vehicle|Explosion", EditDefaultsOnly, BlueprintReadOnly)
577 float ExplosionDamageFallOff = 1.0f;
578 /* Vehicle explosion damage falloff */
579 UPROPERTY(Category = "Vehicle|Interaction", EditDefaultsOnly, BlueprintReadOnly)
580 bool bCanBeInteractedWith = true;
581 /* how much of the drivers velocity carries over to the vehicle */
582 UPROPERTY(Category = "Vehicle|Controls", EditDefaultsOnly, BlueprintReadOnly)
583 float DriverVelocityTransferRate = 0.0f;
584 /* How Long does it take to exit the vehicle*/
585 UPROPERTY(Category = "Vehicle|Controls", EditDefaultsOnly, BlueprintReadOnly)
586 float ExitTime = 0.5f;
587 /* How much damage that the vehicle takes is transffered to the occupants*/
588 UPROPERTY(Category = "Vehicle|Damage", EditDefaultsOnly, BlueprintReadOnly)
589 float DamageTransferMultiplier = 0.0f;
590 virtual float GetTimeSinceLastDamage() const override;
591
592 /*Returns the max distance this vehicle can be to be considered for locking-into. This means that if we scan for 20km targets but this vehicle has a MaxLockOnRange
593 of 100m and this actor is further away than 100m it won't be considered as a candidate during the target-finding. A returned value of 0 is by default ignored by target-finding systems */
594 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Vehicle|LockOn")
595 float MaxLockOnRange = 0.f;
596 /* Returns the Screen percentage that this vehicle is required to have to be considered for Locking-onto (In both vertical and horizontal axis of the viewport).
597 A value of FVector2D(0,0) will by default be ignored by weapons when deciding locking-into candidates. For example, when scanning for a 20km range, if this vehicle
598 has a screen percentage bigger than GetLockOnScreenPercentage() (in any axis) it is going to be considered as a candidate to be locked into. This is useful as
599 actors that are really far away can still look big on the screen and feels like they should be locked into */
600 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Vehicle|LockOn")
601 FVector2D LockOnScreenPercentage = FVector2D::ZeroVector;
602
603 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = Vehicle)
604 USceneComponent* MeshPivotPoint = NULL;
605 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Vehicle)
606 UCameraComponent* Camera = NULL;
607 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Vehicle)
608 USpringArmComponent* SpringArm = NULL;
609 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Vehicle)
610 UDamageHistoryComponent* DamageHistoryComponent = NULL;
611 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Vehicle)
612 UVehicleSeatComponent* DriverSeat = NULL;
613 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Vehicle)
614 UInteractableComponent* InteractableComponent = NULL;
615 UPROPERTY(EditDefaultsOnly, Category = Afflictions)
616 UAfflictionComponent* AfflictionComponent = NULL;
617
618 UPROPERTY(ReplicatedUsing = OnRep_Health)
619 float Health = 100.0f;
620 UPROPERTY(Replicated, EditDefaultsOnly, Category = "Vehicle")
621 float MaxHealth = 100.0f;
622 /* Is this target armored? Affects HUD, hitping colour and sound etc */
623 UPROPERTY(EditDefaultsOnly, Category = "Vehicle")
624 bool bArmored = true;
625 UPROPERTY(Replicated)
626 FVector CameraLocation;
627 UPROPERTY(ReplicatedUsing = OnRep_Driver)
628 TWeakObjectPtr<AProjectXCharacter> Driver = NULL;
629 UPROPERTY(ReplicatedUsing = OnRep_WeaponComponent)
630 UWeaponComponent* VehicleWeaponComponent;
631 UPROPERTY()
632 float LastDamageTime = -MAX_FLT;
633 /*If the vehicle is Boosting*/
634 UPROPERTY(ReplicatedUsing = OnRep_IsBoosting)
635 bool bIsBoosting = false;
636 /*Current Vehicle boost*/
637 UPROPERTY(ReplicatedUsing = OnRep_Boost)
638 float Boost = 100.0f;
640 UPROPERTY(Replicated, Category = "Vehicle|Movement (Acceleration)", BlueprintReadOnly)
641 uint8 PackedAcceleration = 0;
642 /*Max Vehicle boost*/
643 UPROPERTY()
644 float MaxBoost = 100.0f;
645 /*How fast boost regenerates for Vehicles*/
646 UPROPERTY(EditDefaultsOnly, Category = "Vehicle")
647 float BoostRegenRate = 15.0f;
648 /*How fast boost drains for Vehicles*/
649 UPROPERTY(EditDefaultsOnly, Category = "Vehicle")
650 float BoostDrainRate = 15.0f;
651 UPROPERTY(EditDefaultsOnly, Category = "Vehicle")
652 FString VehicleID = "";
653 UPROPERTY()
654 bool bVisible = true;
655 /* How long does a vehicle stays alive when unoccupied and not close to its spawn position? */
656 UPROPERTY(EditDefaultsOnly, Category = "Vehicle")
657 float UnoccupiedLifeDuration = 15.0f;
658 /* How far the vehicle can be from its spawn position without triggering the self-destruction timer in cm */
659 UPROPERTY(EditDefaultsOnly, Category = "Vehicle")
660 float SelfDestructionMinDistance = 500.0f;
661 /* How long at minimum must you be in the vehicle*/
662 UPROPERTY(EditDefaultsOnly, Category = "Vehicle")
663 float MinimumDriverDurationTime = 2.0f;
664
665 UPROPERTY(EditDefaultsOnly, Category = "Vehicle")
666 TSubclassOf<UCameraModifier> BoostCameraModifierClass = nullptr;
667 UPROPERTY(EditDefaultsOnly, Category = "Vehicle")
668 float BoostFOVModifier = 10.0f;
669 UPROPERTY(EditDefaultsOnly, Category = "Vehicle")
670 float BoostAlphaBlend = 1.0f;
671 UPROPERTY(EditDefaultsOnly, Category = "Vehicle")
672 float BoostDepthOfFieldFStop = 20.0f;
673 UPROPERTY(EditDefaultsOnly, Category = "Vehicle")
674 float BoostDepthOfFieldFocalDistance = 36.0f;
675
676
677 UPROPERTY(EditDefaultsOnly, Category = "Vehicle")
678 bool bInitializeVehicleHealth = true;
679
680 UPROPERTY(EditDefaultsOnly, Category = Explodable)
681 TSubclassOf<class UWeaponInstance> VehicleExplosionWeaponInstanceClass = nullptr;
682 UPROPERTY(EditDefaultsOnly, Category = Explodable)
683 TSubclassOf<class UDamageType> VehicleExplosionDamageTypeClass;
684
686
687 TArray<TWeakObjectPtr<AProjectXCharacter>> IgnoredCharactersFromVehicleCollision;
688 TArray<TWeakObjectPtr<UVehicleSeatComponent>> Seats;
689 TWeakObjectPtr<AProjectXCharacter> LastDriver = NULL;
690 TWeakObjectPtr<UCameraModifier> BoostCameraModifierInstance = NULL;
691
692 FTransform SpawnTransform = FTransform::Identity;
693 bool bDead = false;
694 bool bDriving = false;
695 float NextRotationSendTime = 0.0f;
696 float AimTargetForwardOffset = 2000.f;
697 float HealthRegenRate = 0.0f;
698 mutable float LastKnownZeroing = -1.f;
699 bool bRotationFlipFlop = false;
700 FRotator CurrentLookRotation = FRotator::ZeroRotator;
701 int32 FiringSocketCounter = 0;
702 float LastOccupantLeftTime = 0.f;
703 FTimerHandle SelfDestructionTimer;
704 FTimerHandle MaxBoostTimer;
705 FTimerHandle BoostCooldownTimer;
706 float DriverEnterTime = 0.f;
707 bool bIsInKillCam = false;
708 float BoostUsageTime = 0.0f;
709private:
710 uint8 PreviousPackedAcceleration = 0;
711};
DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FPassengerChangedSignature, class AProjectXVehicle *, Vehicle, class UVehicleSeatComponent *, Seat, class AProjectXCharacter *, PreviousPassenger)
EAccelerationDirection
Definition: ProjectXVehicle.h:45
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FDriverChangedSignature, class AProjectXVehicle *, Vehicle, class AProjectXCharacter *, OldDriver)
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FVehicleHierarchyUpdated, class AProjectXVehicle *, Vehicle)
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FVehicleDiedEvent)
ESpotType
Definition: SpottableInterface.h:18
ESpotReply
Definition: SpottableInterface.h:27
Definition: KillCameraActor.h:19
Definition: ProjectXCharacter.h:128
Definition: ProjectXPlayerState.h:238
Definition: ProjectXVehicle.h:56
virtual const FText & GetObjectName() const
Definition: ProjectXVehicle.h:71
virtual FPawnLockOnSignature & GetLockOnTentativeEndDelegate() override
Definition: ProjectXVehicle.h:103
FORCEINLINE const TArray< TWeakObjectPtr< UVehicleSeatComponent > > & GetSeats() const
Definition: ProjectXVehicle.h:61
virtual FPawnLockOnSignature & GetLockOnEndDelegate() override
Definition: ProjectXVehicle.h:105
virtual TSoftObjectPtr< UTexture2D > GetHudIcon() const override
Definition: ProjectXVehicle.h:114
virtual FVector2D GetLockOnScreenPercentage() override
Definition: ProjectXVehicle.h:100
virtual FPawnLockOnSignature & GetLockOnTentativeStartDelegate() override
Definition: ProjectXVehicle.h:102
virtual FPawnIncomingProjectileSignature & GetIncomingProjectileStartDelegate() override
Definition: ProjectXVehicle.h:108
virtual AActor * GetTrackableInterfaceActor() override
Definition: ProjectXVehicle.h:115
virtual TSoftObjectPtr< UTexture2D > GetRadarIcon() const override
Definition: ProjectXVehicle.h:113
virtual float GetLockOnMaxDistance()
Definition: ProjectXVehicle.h:101
virtual FPawnIncomingProjectileSignature & GetIncomingProjectileEndDelegate() override
Definition: ProjectXVehicle.h:109
virtual void SetHealthRegenRate(float NewRate) override
Definition: ProjectXVehicle.h:83
virtual bool IsArmored() const override
Definition: ProjectXVehicle.h:70
void UpdateVisibilityModifier(bool NewVisibility)
Definition: ProjectXVehicle.h:119
virtual FVector GetSpottingTraceOffset() const override
Definition: ProjectXVehicle.h:111
virtual FPawnImminentMissileWarningSignature & GetImminentMissileWarningEndDelegate() override
Definition: ProjectXVehicle.h:107
virtual FPawnImminentMissileWarningSignature & GetImminentMissileWarningStartDelegate() override
Definition: ProjectXVehicle.h:106
virtual TSoftObjectPtr< UTexture2D > GetMapIcon() const override
Definition: ProjectXVehicle.h:112
virtual FPawnLockOnSignature & GetLockOnStartDelegate() override
Definition: ProjectXVehicle.h:104
Definition: HealthInterface.h:28
Definition: InteractableInterface.h:18
Definition: KillCamInterface.h:21
Definition: LockOnTargetInterface.h:27
Definition: ObjectInfoInterface.h:16
Definition: OwnedInterface.h:20
Definition: SpawnTargetInterface.h:18
Definition: SpottableInterface.h:40
Definition: TeamInterface.h:26
Definition: TrackableInterface.h:22
Definition: VehicleMovementComponent.h:16
Definition: RadarIconWidget.h:22
Definition: WeaponInstance.h:220
Definition: WeaponInstanceVehicle.h:16
Definition: VehicleRespawnManager.h:13