6#include "CoreMinimal.h"
8#include "WeaponInstanceProjectile.generated.h"
12class UAdvancedWidgetComponent;
41 virtual TSubclassOf<class UDamageType> GetDamageType()
const override;
42 virtual void EndPlay(
const EEndPlayReason::Type EndPlayReason)
override;
44 float GetProjectileSpeed()
const;
45 UFUNCTION(BlueprintPure, Category =
"Projectile Weapon")
46 FORCEINLINE AActor* GetHomingTarget()
const {
return CanLockOn() ? LockOnTarget.Get() : NULL; }
49 FORCEINLINE AActor*
GetAimTarget()
const {
return AimTarget.Get(); }
51 UFUNCTION(BlueprintPure, Category =
"Projectile Weapon")
52 FORCEINLINE
float GetLockOnStrength()
const {
return LockOnStrength; }
53 UFUNCTION(BlueprintPure, Category =
"Projectile Weapon")
54 bool CanLockOn() const;
55 UFUNCTION(BlueprintPure, Category = "Projectile
Weapon")
56 float CalculateMagnetismFalloff();
57 UFUNCTION(BlueprintPure, Category = "Projectile
Weapon")
58 float GetWeaponMagnetismConeSize() const;
59 UFUNCTION(BlueprintPure, Category = "Projectile
Weapon")
60 bool IsWeaponMagnetismEnabled();
61 UFUNCTION(BlueprintPure, Category = "Projectile
Weapon")
62 TSubclassOf<AActor> GetProjectileClass()
const {
return ProjectileClass; }
63 virtual void InitializeWeapon(
bool bFromBatchInitialization =
false)
override;
64 virtual float GetDisplayDamage()
const override;
65 virtual void PrimaryFire(uint8 RemainingBurstCount)
override;
67 virtual bool Equip()
override;
68 virtual bool UnEquip(
bool bForce =
false)
override;
69 virtual float GetProjectileDamageModifier();
71 virtual void StopAllActions()
override;
73 UFUNCTION(BlueprintNativeEvent)
74 bool GetProjectileTransform(FTransform& Transform, FTransform& CosmeticTransform);
77 virtual TArray<AActor*> GetIgnoredActors() {
return TArray<AActor*>(); }
78 virtual void FireProjectiles();
80 TArray<TWeakObjectPtr<AProjectile>> SpawnProjectiles(UClass*
Class,
const FTransform& Transform,
const FTransform& CosmeticTransform);
82 virtual void PreSpawnClientProjectile(
const uint8 ShotID,
AProjectile* Projectile);
84 UFUNCTION(
Server, Reliable, WithValidation)
85 void Server_AuthenticateTicket(const TArray<int32>& ProjectileIDs, TSubclassOf<
AProjectile> UsedProjectileClass, const FVector_NetQuantize& Origin, AActor* PlayerAimTarget =
nullptr, const
float PlayerMagnetismFalloff = 1.0f);
88 int32 GetProjectileID() {
return ProjectileIDCounter++; }
90 virtual void ToggleTightAim(
bool bEnable)
override;
91 virtual void ToggleLockOn(
bool bEnable);
93 UFUNCTION(
Server, Reliable, WithValidation)
94 void Server_LockOn(AActor* Target);
95 UFUNCTION(
Server, Reliable, WithValidation)
96 void Server_SetTentativeLockOn(AActor* Target);
98 virtual
void TickComponent(
float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction *ThisTickFunction) override;
99 virtual
void TickTargetFinder(
float DeltaTime);
100 virtual
void TickTargetLockOn(
float DeltaTime);
101 virtual
void TickTargetMaintain(
float DeltaTime);
103 virtual
void UpdateLockOn(
float DeltaStrength);
104 virtual
void SetLockOn(AActor* Target);
105 virtual
void SetTentativeLockOn(AActor* Target);
107 virtual
bool IsValidLockOnTarget(AActor* Target) const;
110 virtual
void OnRep_LockOnTarget();
112 virtual
void OnRep_TentativeLockOnTarget();
115 virtual
void UpdateLockOnWidget(AActor* Target, TSubclassOf<UAdvancedWidgetComponent> WidgetComponentClass);
119 UPROPERTY(EditDefaultsOnly, Category = "Projectile
Weapon")
120 TSubclassOf<AActor> ProjectileClass = NULL;
122 UPROPERTY(EditDefaultsOnly, Category = "Projectile
Weapon")
123 float ProjectileSpeed = 10000.f;
125 UPROPERTY(EditDefaultsOnly, Category = "Projectile
Weapon")
126 int32 ProjectileCount = 1;
128 UPROPERTY(EditDefaultsOnly, Category = "Projectile
Weapon")
129 FName ClientProjectileTransformSocket = FName("Muzzle");
131 UPROPERTY(EditDefaultsOnly, Category = "
Weapon", meta = (EditCondition = "bIsManagedByWeaponComponent"))
132 bool bUnmanagedSearchProjectileSocketOnWeapon = false;
138 UPROPERTY(EditDefaultsOnly, Category = "Projectile
Weapon")
139 bool bUseCharacterSpeed = false;
141 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Aim
Assist")
144 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Aim
Assist")
145 FVector2D ProjectileMagnetismFalloffAngle = FVector2D(6.0f, 10.0f);
147 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Aim
Assist")
148 FVector2D ProjectileMagnetismFalloffAngleGamepad = FVector2D(6.0f, 10.0f);
150 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Aim
Assist")
151 FVector2D TightAimedProjectileMagnetismFalloffAngle = FVector2D(3.0f, 5.0f);
153 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Aim
Assist")
154 FVector2D TightAimedProjectileMagnetismFalloffAngleGamepad = FVector2D(3.0f, 5.0f);
156 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Aim
Assist")
157 UCurveFloat* ProjectileMagnetismDistanceFalloffCurve =
nullptr;
159 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Aim
Assist")
160 UCurveFloat* ProjectileMagnetismDistanceFalloffCurveGamepad =
nullptr;
162 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Aim
Assist")
163 UCurveFloat* TightAimedProjectileMagnetismDistanceFalloffCurve =
nullptr;
165 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Aim
Assist")
166 UCurveFloat* TightAimedProjectileMagnetismDistanceFalloffCurveGamepad =
nullptr;
168 UPROPERTY(EditDefaultsOnly, Category = "Projectile
Weapon|Lock
On")
171 UPROPERTY(EditDefaultsOnly, Category = "Projectile
Weapon|Lock
On")
172 bool bShouldProjectilesNotifyTarget = false;
176 UPROPERTY(EditDefaultsOnly, Category = "Projectile
Weapon|Lock
On")
177 float TimeBeforeNotifyingHomingTargetLost = .3f;
179 UPROPERTY(EditDefaultsOnly, Category = "Projectile
Weapon|Lock
On", meta = (EditCondition = "bCanLockOn"))
180 float LockOnRange = 10000.f;
182 UPROPERTY(EditDefaultsOnly, Category = "Projectile
Weapon|Lock
On", meta = (EditCondition = "bCanLockOn"))
183 float LockOnRadius = 300.f;
185 UPROPERTY(EditDefaultsOnly, Category = "Projectile
Weapon|Lock
On", meta = (EditCondition = "bCanLockOn"))
186 float LockOnTime = 1.f;
187 UPROPERTY(EditDefaultsOnly, Category = "Projectile
Weapon|Lock
On", meta = (EditCondition = "bCanLockOn"))
188 float MinLockOnPercent = 0.75f;
190 UPROPERTY(EditDefaultsOnly, Category = "Projectile
Weapon|Lock
On", meta = (EditCondition = "bCanLockOn"))
191 float MaxLockOnAngle = 30.f;
193 UPROPERTY(EditDefaultsOnly, Category = "Projectile
Weapon|Lock
On", meta = (EditCondition = "bCanLockOn"))
194 bool bUsePlaneIntersectionForLock = false;
198 UPROPERTY(EditDefaultsOnly, Category = "Projectile
Weapon|Lock
On", meta = (EditCondition = "bCanLockOn"))
199 TSubclassOf<UAdvancedWidgetComponent> LockOnWidgetComponentClass = NULL;
201 TWeakObjectPtr<UAdvancedWidgetComponent> LockOnWidgetComponent = NULL;
202 UPROPERTY(ReplicatedUsing = OnRep_TentativeLockOnTarget)
203 TWeakObjectPtr<AActor> TentativeLockOnTarget = NULL;
204 UPROPERTY(ReplicatedUsing = OnRep_LockOnTarget)
205 TWeakObjectPtr<AActor> LockOnTarget = NULL;
206 UPROPERTY(Replicated)
207 TWeakObjectPtr<AActor> AimTarget = NULL;
208 UPROPERTY(Replicated)
209 float MagnetismFalloff = 0.0f;
211 TWeakObjectPtr<AActor> PreviousTarget = NULL;
212 TWeakObjectPtr<AActor> PreviousTentativeTarget = NULL;
213 float LockOnStrength = 0.f;
214 FVector2D TightAimedProjectileMagnetismFalloffInRadians = FVector2D::ZeroVector;
215 FVector2D ProjectileMagnetismFalloffInRadians = FVector2D::ZeroVector;
216 FVector2D TightAimedProjectileMagnetismFalloffInRadiansGamepad = FVector2D::ZeroVector;
217 FVector2D ProjectileMagnetismFalloffInRadiansGamepad = FVector2D::ZeroVector;
218 float ProjectileAuthenticationMaxDistanceFromActorSquared = 500.0f * 500.0f;
221 static int32 ProjectileIDCounter;
224 bool bWantsTick = false;
225 uint16 ProjectileCounter = 0;
EProjectileMagnetismType
Definition: WeaponInstanceProjectile.h:25
ELockOnType
Definition: WeaponInstanceProjectile.h:17
Definition: Projectile.h:18
Definition: TurretComponent.h:21
Definition: WeaponInstanceProjectile.h:36
FORCEINLINE float GetTimeBeforeNotifyingHomingTargetLost() const
Definition: WeaponInstanceProjectile.h:48
FORCEINLINE bool GetShouldProjectilesNotifyTarget() const
Definition: WeaponInstanceProjectile.h:47
FORCEINLINE AActor * GetAimTarget() const
Definition: WeaponInstanceProjectile.h:49
FORCEINLINE float GetProjectileMagnetismFalloff() const
Definition: WeaponInstanceProjectile.h:50
Definition: WeaponInstanceRanged.h:27