6#include "GameFramework/Character.h"
17#include "ProjectXVehicle.generated.h"
19class USkinnedMeshComponent;
23class UVehicleSeatComponent;
24class UInteractableComponent;
25class USpringArmComponent;
26class UCameraComponent;
27class UDamageHistoryComponent;
28class UAfflictionComponent;
29class UMapMarkerComponent;
55class PROJECTX_API
AProjectXVehicle : public ACharacter, public
IOwnedInterface, public
IHealthInterface, public
ISpawnTargetInterface, public
ILockOnTargetInterface, public
ISpottableInterface, public
ITrackableInterface, public
ITeamInterface, public
IInteractableInterface, public
IKillCamInterface, public
IObjectInfoInterface
57 GENERATED_UCLASS_BODY()
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; }
72 virtual const FString GetOwnerName()
const;
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;
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;
85 virtual void Die(
float Damage,
struct FDamageEvent
const& DamageEvent, AController* EventInstigator, AActor* DamageCauser, APlayerState* InstigatorPlayerState);
86 virtual UAfflictionComponent* GetAfflictionComponent()
const override;
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);
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;
110 virtual ESpotReply CanBeSpotted(
const AActor* SpotInstigator,
ESpotType SpotType)
const override;
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; }
116 virtual TArray<AActor*> GetIgnoredActors();
117 virtual FVector GetVelocity()
const override;
120 void MoveIgnoreActorsRemoveVehicle(AActor*
const ActorToIgnore);
121 void MoveIgnoreActorsAddVehicle(AActor*
const ActorToIgnore);
123 UFUNCTION(BlueprintCallable, Category = Seat)
124 FORCEINLINE FText GetVehicleName()
const {
return VehicleName; }
125 UFUNCTION(BlueprintPure, Category =
Vehicle)
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)
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;
162 UFUNCTION(BlueprintPure, Category =
"Vehicle")
163 FORCEINLINE
bool GetIsDisplayOnly()
const {
return bDisplayOnly; }
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; }
178 TArray<TWeakObjectPtr<UVehicleSeatComponent>> GetSeatList()
const;
180 TArray<AProjectXVehicle*> GetVehicleHierarchy()
const;
181 UFUNCTION(BlueprintPure, Category =
Vehicle)
182 TArray<UVehicleSeatComponent*> K2_GetSeats()
const;
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)
190 UFUNCTION(BlueprintPure, Category =
Vehicle)
191 virtual bool HasAvailableSeat()
const;
192 UFUNCTION(BlueprintPure, Category =
Vehicle)
193 virtual bool HasAnyOccupants()
const;
195 UFUNCTION(BlueprintPure, Category =
Vehicle)
197 UFUNCTION(BlueprintPure, Category =
Vehicle)
198 virtual UVehicleSeatComponent* GetSeatByOccupant(
const AProjectXCharacter* Character)
const;
200 UFUNCTION(BlueprintPure, Category =
Vehicle)
201 virtual UVehicleSeatComponent* GetBestAvailableSeat(
const AProjectXCharacter* Character)
const;
203 UFUNCTION(BlueprintCallable, Category =
Vehicle)
204 virtual bool EnterVehicle(
AProjectXCharacter* Character, UVehicleSeatComponent* PreferredSeat = NULL);
206 UFUNCTION(BlueprintCallable, Category =
Vehicle)
207 virtual bool LeaveVehicle(
AProjectXCharacter* Character,
bool bForceLeave =
false,
bool bEject =
false);
209 UFUNCTION(BlueprintCallable, Category =
Vehicle)
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;
220 UFUNCTION(BlueprintPure, BlueprintNativeEvent, Category =
Vehicle)
221 bool GetProjectileTransform(FTransform& Transform, FName& SocketName, UVehicleSeatComponent* Seat,
bool CosmeticOnly = false);
222 UFUNCTION(BlueprintImplementableEvent, BlueprintCallable)
224 UFUNCTION(BlueprintImplementableEvent)
226 UFUNCTION(BlueprintImplementableEvent)
228 UFUNCTION(BlueprintImplementableEvent)
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"))
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;
275 friend class UVehicleSeatComponent;
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);
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;
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)
313 UFUNCTION(BlueprintCallable, Category =
Vehicle)
314 virtual UVehicleSeatComponent* GetClosestEntryLocation(
AProjectXCharacter* Character, FVector& Location) const;
315 virtual FName GetClosestSeatName(const APlayerController* QueryController) const;
317 void PassengersChanged(UVehicleSeatComponent* Seat,
AProjectXCharacter* PreviousPassenger);
318 virtual
void OnVehicleEmpty();
319 virtual
void StartSelfDestruction(UWorld* World);
320 virtual
void StopSelfDestruction(UWorld* World);
322 UFUNCTION(BlueprintPure, Category =
Vehicle)
323 FORCEINLINE
bool IsHoverVehicle()
const {
return bHasGravityInFlyingMode; }
324 UFUNCTION(BlueprintPure, Category =
Vehicle)
325 FORCEINLINE
bool DoesVehicleMoveRelativeToSelf()
const {
return bMoveVehicleRelative; }
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);
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);
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);
349 virtual
void ExitPersonalVehicle();
351 virtual
void OnVehicleHit(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult&
Hit);
353 virtual
void OnVehicleBeginOverlap(AActor* OverlappedActor, AActor* OtherActor);
355 virtual
void OnVehicleEndOverlap(AActor* OverlappedActor, AActor* OtherActor);
358 virtual
void OnSelected(APlayerController* Sender, class UPrimitiveComponent* Component);
360 virtual
void OnHighlighted(APlayerController* Sender, class UPrimitiveComponent* Component);
363 virtual
void OnRep_WeaponComponent();
365 virtual
void OnRep_IsBoosting();
367 virtual
void OnRep_Driver();
369 virtual
void OnRep_Health(
float PreviousHealth);
372 virtual
void OnRep_Boost();
375 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "
Vehicle", meta = (AllowPrivateAccess = true))
378 UPROPERTY(Category = "
Vehicle|Cosmetics", EditDefaultsOnly)
379 TArray<FName> FiringSockets;
381 UPROPERTY(Category = "
Vehicle", EditDefaultsOnly)
382 bool bAlignCameraOnVehicleEnter = false;
383 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle|KillCam")
386 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle|KillCam")
387 float KillCameraDistance = 0.0f;
389 UPROPERTY(Category = "
Vehicle", EditDefaultsOnly)
390 FVector2D MaxTerrainConformAngle = FVector2D(45.0f, 45.0f);
392 UPROPERTY(Category = "
Vehicle|Collision", EditDefaultsOnly)
393 bool bCollisionDamagesVehicle = false;
395 UPROPERTY(Category = "
Vehicle|Collision", EditDefaultsOnly, meta = (EditCondition = "bCollisionDamagesVehicle"))
396 TSubclassOf<UDamageType> VehicleCollisionDamageTakenType;
398 UPROPERTY(Category = "
Vehicle|Collision", EditDefaultsOnly, meta = (EditCondition = "bCollisionDamagesVehicle"))
399 float VehicleDamageOnCollisionAmount = 100.f;
401 UPROPERTY(Category = "
Vehicle|Collision", EditDefaultsOnly, meta = (EditCondition = "bCollisionDamagesVehicle"))
402 float MinSpeedRequiredForTakingDamage = 30.f;
404 UPROPERTY(Category = "
Vehicle|Collision", EditDefaultsOnly, meta = (EditCondition = "bCollisionDamagesVehicle"))
405 float CollisionAngleDamageMultiplier = 1.f;
407 UPROPERTY(Category = "
Vehicle|Collision", EditDefaultsOnly)
408 bool bCollisionDamagesOthers = false;
410 UPROPERTY(Category = "
Vehicle|Collision", EditDefaultsOnly, meta = (EditCondition = "bCollisionDamagesOthers"))
411 TSubclassOf<UDamageType> VehicleCollisionDamageInflictedType;
413 UPROPERTY(Category = "
Vehicle|Collision", EditDefaultsOnly, meta = (EditCondition = "bCollisionDamagesOthers"))
414 float CharactersDamageOnCollisionAmount = 100.f;
416 UPROPERTY(Category = "
Vehicle|Collision", EditDefaultsOnly, meta = (EditCondition = "bCollisionDamagesOthers"))
417 float MinSpeedRequiredForApplyingDamage = 30.f;
419 UPROPERTY(Category = "
Vehicle|Collision", EditDefaultsOnly)
420 bool bCollisionPushesCharacters = false;
422 UPROPERTY(Category = "
Vehicle|Collision", EditDefaultsOnly, meta = (EditCondition = "bCollisionPushesCharacters"))
423 float CharactersImpulseOnCollisionAmount = 5000.f;
425 UPROPERTY(Category = "
Vehicle|Collision", EditDefaultsOnly, meta = (EditCondition = "bCollisionPushesCharacters"))
426 float CharactersImpulseOnCollisionMaxAmount = 20000.f;
428 UPROPERTY(Category = "
Vehicle|Collision", EditDefaultsOnly, meta = (EditCondition = "bCollisionPushesCharacters"))
429 float CharactersImpulseOnCollisionVerticalOffset = 10.f;
431 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle|Controls", meta = (ClampMin = "0.0", ClampMax = "1.0"))
432 float ConstantForwardAmount = 0.0f;
434 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle|Controls")
435 float BoostMultiplier = 5.0f;
437 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle|Controls")
438 float VerticalSensitivity = 35.f;
440 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle|Controls")
441 float HorizontalSensitivity = 35.f;
443 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle|Controls")
444 float ForwardSpeedMultiplier = 1.f;
446 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle|Controls")
447 float SidewaysSpeedMultiplier = .5f;
449 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle|Controls", meta = (EditCondition = "!bHasGravityInFlyingMode"))
450 float ThrottleUpMultiplier = 1.f;
452 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle|Controls", meta = (EditCondition = "!bHasGravityInFlyingMode"))
453 float ThrottleDownMultiplier = 1.f;
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;
498 UPROPERTY(EditDefaultsOnly, Category =
Jetpack, meta = (EditCondition = "bUseBoostInsteadOfJump"))
499 class UCurveFloat* BoostDrainCurve = NULL;
501 UPROPERTY(EditAnywhere, Category = "
Vehicle|Spawn")
502 bool bCanRespawn = true;
504 UPROPERTY(EditAnywhere, Category = "
Vehicle|Spawn")
505 bool bVehicleCanBeUsedForSpawn = true;
507 UPROPERTY(EditAnywhere, Category = "
Vehicle|Spawn", meta = (EditCondition = "bVehicleCanBeUsedForSpawn"))
508 bool bPlayerCanSpawnInside = true;
510 UPROPERTY(EditAnywhere, Category = "
Vehicle|Spawn", meta = (EditCondition = "bVehicleCanBeUsedForSpawn"))
511 bool bPlayerCanSpawnNearby = false;
513 UPROPERTY(EditAnywhere, Category = "
Vehicle|Respawn")
514 float RespawnTime = 25.f;
516 UPROPERTY(EditAnywhere, Category = "
Vehicle|Respawn")
517 float PostLifeDuration = 5.0f;
519 UPROPERTY(EditAnywhere, Category = "
Vehicle|Respawn")
520 float DeathImpulseForce = 1000.0f;
522 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle|Aim")
523 bool bRetainLastKnownZeroingWhenNoHit = true;
525 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle|Aim")
526 float AimMinDistanceForZeroing = 1000.f;
528 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle|Aim")
529 float AimDefaultZeroing = 100000000.f;
531 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Vehicle|Aim")
532 float MaxAimAngleDeviation = 15.f;
534 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle|UI")
535 TAssetPtr<UTexture2D> VehicleSeatsHUDIcon = NULL;
537 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle|UI")
538 TAssetPtr<UTexture2D> VehicleMapIcon = NULL;
540 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle|UI")
541 TSoftObjectPtr<UTexture2D> VehicleHudIcon = NULL;
543 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle|UI")
544 TSoftObjectPtr<UTexture2D> VehicleRadarIcon = NULL;
546 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle|Cosmetics")
547 float VehicleDownBobSpeed = 5.f;
549 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle|Cosmetics")
550 float VehicleUpBobSpeed = 15.f;
552 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle|Cosmetics")
553 float VehicleBobDistance = 100.0f;
555 UPROPERTY(EditAnywhere, BlueprintReadWrite , Category = "
Vehicle|Cosmetics", Meta = (ExposeOnSpawn = true))
556 bool bDisplayOnly = false;
558 UPROPERTY(BlueprintReadOnly, Category = "
Vehicle|Stats")
559 int32 CachedTeam = INDEX_NONE;
561 UPROPERTY(Category = "
Vehicle|Controls", EditDefaultsOnly, BlueprintReadOnly)
562 bool bVehicleCanBoost = true;
564 UPROPERTY(Category = "
Vehicle|Explosion", EditDefaultsOnly, BlueprintReadOnly)
565 float MinimumVehicleExplosionDamage = 10.0f;
567 UPROPERTY(Category = "
Vehicle|Explosion", EditDefaultsOnly, BlueprintReadOnly)
568 float BaseVehicleExplosionDamage = 50.0f;
570 UPROPERTY(Category = "
Vehicle|Explosion", EditDefaultsOnly, BlueprintReadOnly)
571 float ExplosionInnerRadius = 1000.0f;
573 UPROPERTY(Category = "
Vehicle|Explosion", EditDefaultsOnly, BlueprintReadOnly)
574 float ExplosionOuterRadius = 2000.0f;
576 UPROPERTY(Category = "
Vehicle|Explosion", EditDefaultsOnly, BlueprintReadOnly)
577 float ExplosionDamageFallOff = 1.0f;
579 UPROPERTY(Category = "
Vehicle|Interaction", EditDefaultsOnly, BlueprintReadOnly)
580 bool bCanBeInteractedWith = true;
582 UPROPERTY(Category = "
Vehicle|Controls", EditDefaultsOnly, BlueprintReadOnly)
583 float DriverVelocityTransferRate = 0.0f;
585 UPROPERTY(Category = "
Vehicle|Controls", EditDefaultsOnly, BlueprintReadOnly)
586 float ExitTime = 0.5f;
588 UPROPERTY(Category = "
Vehicle|
Damage", EditDefaultsOnly, BlueprintReadOnly)
589 float DamageTransferMultiplier = 0.0f;
590 virtual
float GetTimeSinceLastDamage() const override;
594 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Vehicle|LockOn")
595 float MaxLockOnRange = 0.f;
600 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Vehicle|LockOn")
601 FVector2D LockOnScreenPercentage = FVector2D::ZeroVector;
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;
618 UPROPERTY(ReplicatedUsing = OnRep_Health)
620 UPROPERTY(Replicated, EditDefaultsOnly, Category = "
Vehicle")
621 float MaxHealth = 100.0f;
623 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle")
624 bool bArmored = true;
625 UPROPERTY(Replicated)
626 FVector CameraLocation;
627 UPROPERTY(ReplicatedUsing = OnRep_Driver)
629 UPROPERTY(ReplicatedUsing = OnRep_WeaponComponent)
630 UWeaponComponent* VehicleWeaponComponent;
632 float LastDamageTime = -MAX_FLT;
634 UPROPERTY(ReplicatedUsing = OnRep_IsBoosting)
635 bool bIsBoosting = false;
637 UPROPERTY(ReplicatedUsing = OnRep_Boost)
638 float Boost = 100.0f;
640 UPROPERTY(Replicated, Category = "
Vehicle|
Movement (Acceleration)", BlueprintReadOnly)
641 uint8 PackedAcceleration = 0;
644 float MaxBoost = 100.0f;
646 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle")
647 float BoostRegenRate = 15.0f;
649 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle")
650 float BoostDrainRate = 15.0f;
651 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle")
652 FString VehicleID = "";
654 bool bVisible = true;
656 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle")
657 float UnoccupiedLifeDuration = 15.0f;
659 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle")
660 float SelfDestructionMinDistance = 500.0f;
662 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle")
663 float MinimumDriverDurationTime = 2.0f;
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;
677 UPROPERTY(EditDefaultsOnly, Category = "
Vehicle")
678 bool bInitializeVehicleHealth = true;
680 UPROPERTY(EditDefaultsOnly, Category = Explodable)
682 UPROPERTY(EditDefaultsOnly, Category = Explodable)
683 TSubclassOf<class UDamageType> VehicleExplosionDamageTypeClass;
688 TArray<TWeakObjectPtr<UVehicleSeatComponent>> Seats;
690 TWeakObjectPtr<UCameraModifier> BoostCameraModifierInstance = NULL;
692 FTransform SpawnTransform = FTransform::Identity;
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;
710 uint8 PreviousPackedAcceleration = 0;
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: WeaponInstance.h:220
Definition: WeaponInstanceVehicle.h:16