5#include "CoreMinimal.h"
7#include "Kismet/KismetMathLibrary.h"
8#include "WeaponInstanceRanged.generated.h"
28 GENERATED_UCLASS_BODY()
32 virtual void BeginPlay()
override;
33 virtual void EndPlay(
const EEndPlayReason::Type EndPlayReason)
override;
38 virtual bool Fire(uint8
Mode,
float WorldTimeOverride)
override;
39 virtual void FireComplete(uint8
Mode = 0)
override;
40 virtual void PrimaryFire(uint8 RemainingBurstCount);
41 virtual float GetDamage(
const FHitResult& HitResult,
float DamgeModifier,
const UWeaponComponent* WeaponComponent = NULL)
const override;
42 virtual bool IsHeadshot(
const FHitResult& HitResult)
const override;
43 virtual float GetMovementSpreadModifier()
const override;
44 virtual float GetReticleSpreadMultiplier()
const override;
45 virtual float GetWeaponSpread()
const override;
48 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category =
"Weapon")
49 UCurveFloat* DamageFalloffCurve = NULL;
51 virtual
void TickComponent(
float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
52 virtual
void PlayWeaponFireEffects(uint8 BurstCounter = 0) override;
53 virtual
void PlayRecoil();
55 virtual
void UpdateSpread();
56 virtual
float GetCurrentSpread() const;
57 virtual
void ApplyConeSpread(FVector& Direction,
float ProjectilePercent = 0.0f) const;
58 virtual
void ApplySpreadPattern(FVector& Direction,
int ProjectileNum = 0) const;
59 virtual
void UpdateMovementSpread();
64 uint8 FireValidationCount = 0;
67 uint8 ValidationsPerFire = 1;
70 uint32 SpreadInterpolationID = INDEX_NONE;
72 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Recoil")
73 bool bHasRecoil = false;
75 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Recoil", meta = (EditCondition = "bHasRecoil"))
76 FVector2D Recoil = FVector2D(0.05f, 0.05f);
78 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Recoil", meta = (EditCondition = "bHasRecoil"))
79 float RecoilRate = 0.075f;
80 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Recoil", meta = (EditCondition = "bHasRecoil"))
81 TEnumAsByte<EEasingFunc::Type> RecoilEaseType;
84 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Tight Aim", meta = (EditCondition = "bCanTightAim && bHasRecoil", DisplayAfter = "TightAimSpreadModifier"))
85 FVector2D TightAimRecoilModifier = FVector2D(1.f, 1.f);
87 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Tight Aim", meta = (EditCondition = "bCanTightAim && bHasRecoil", DisplayAfter = "TightAimRecoilModifier"))
88 float TightAimRecoilRateModifier = 1.f;
90 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Tight Aim", meta = (EditCondition = "bCanTightAim"))
91 float TightAimSpreadPerShotMultiplier = 1.0f;
93 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Tight Aim", meta = (EditCondition = "bCanTightAim"))
94 float TightAimSpreadDecayRateMultiplier = 1.0f;
97 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Spread")
98 bool bHasSpread = false;
100 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Spread")
101 bool bRandomSpread = true;
104 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Spread|MovementBased")
105 bool bHasMovementBasedSpread = false;
107 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Spread|MovementBased", meta = (EditCondition = "bHasMovementBasedSpread"))
110 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Spread|MovementBased|Tight Aim", meta = (EditCondition = "bHasMovementBasedSpread"))
111 bool bApplyMovementSpreadWhenTightAiming = true;
113 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Spread|MovementBased|Tight Aim", meta = (EditCondition = "bHasMovementBasedSpread && bApplyMovementSpreadWhenTightAiming"))
114 float MovementSpreadTightAimingMultiplier = 1.f;
117 float MovementSpreadMultiplier = 1.2f;
120 float TimeToReachMaxMovementSpreadMultiplier = 0.25f;
123 float TimeToRecoveryFromMovementSpreadMultiplier = 0.25f;
125 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Spread|
Crouch", meta = (EditCondition = "bCanTightAim"))
126 float CrouchConeSpreadMultiplier = 1.0f;
130 UCurveFloat* VelocityBasedSpreadCurve = NULL;
133 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Spread", meta = (EditCondition = "bHasSpread && !bRandomSpread"))
136 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Spread", meta = (EditCondition = "bHasSpread"))
137 FVector2D SpreadRange = FVector2D(0.0f, 15.0f);
139 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Spread", meta = (EditCondition = "bHasSpread"))
140 float SpreadPerShot = 0.1f;
142 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Spread", meta = (EditCondition = "bHasSpread"))
143 float SpreadDecayRate = 1.0f;
145 float CurrentMovementSpreadModifier = 1.f;
146 float MovementSpreadModifierOnStop = 1.f;
147 FTimerHandle BurstTimer;
150 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Burst
Fire")
151 bool bBurstFire = false;
153 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Burst
Fire", meta = (EditCondition = "bBurstFire"))
154 uint8 BurstCount = 3;
156 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Burst
Fire", meta = (EditCondition = "bBurstFire"))
157 float BurstRate = 0.1f;
EWeaponError
Definition: WeaponComponent.h:15
EMovementSpreadType
Definition: WeaponInstanceRanged.h:12
Definition: WeaponInstance.h:220
Definition: WeaponInstanceRanged.h:27
Definition: WeaponSpreadDataAsset.h:27