5#include "CoreMinimal.h"
8#include "Engine/DataTable.h"
9#include "Components/ActorComponent.h"
10#include "Components/MaterialBillboardComponent.h"
12#include "GameFramework/CharacterMovementComponent.h"
14#include "WeaponInstance.generated.h"
21class UWeaponComponent;
22class UGlobalAmmoComponent;
27class UStreamableRenderAsset;
30class UNiagaraComponent;
31class UCameraShakeBase;
32class USoundConcurrency;
35#define MAX_DELTA_TOLERANCE 0.04f
36#define DEFAULT_PHYSICS_MATERIAL "DefaultPhysicalMaterial"
37#define MAX_DIST_TOLERANCE 400.f
42 GENERATED_USTRUCT_BODY()
45 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category =
Perk)
46 TArray<UAnimMontage*> AnimationMontages;
67 GENERATED_USTRUCT_BODY()
69 UPROPERTY(EditDefaultsOnly, Category =
"Attachments")
70 FName Socket = NAME_None;
71 UPROPERTY(EditDefaultsOnly, Category = "Attachments")
72 TSoftObjectPtr<UStaticMesh> StaticMeshAttachment;
73 UPROPERTY(EditDefaultsOnly, Category = "Attachments")
74 TSoftObjectPtr<USkeletalMesh> SkeletalMeshAttachment;
75 UPROPERTY(EditDefaultsOnly, Category = "Attachments")
76 TSoftObjectPtr<UParticleSystem> ParticlesAttachment;
82 GENERATED_USTRUCT_BODY()
84 UPROPERTY(EditDefaultsOnly, Category =
"Impact Effects")
85 class UPhysicalMaterial* Material = NULL;
86 UPROPERTY(EditDefaultsOnly, Category = "Impact Effects")
87 TSoftObjectPtr<class UNiagaraSystem> NiagaraParticle = NULL;
88 UPROPERTY(EditDefaultsOnly, Category = "Impact Effects")
89 TSoftObjectPtr<class UParticleSystem> Particle = NULL;
90 UPROPERTY(EditDefaultsOnly, Category = "Impact Effects")
91 TSoftObjectPtr<class USoundBase> Sound = NULL;
92 UPROPERTY(EditDefaultsOnly, Category = "Impact Effects")
93 TSoftObjectPtr<class UMaterial> DecalMaterial = NULL;
94 UPROPERTY(EditDefaultsOnly, Category = "Impact Effects")
95 TSubclassOf<UCameraShakeBase> CameraShake =
nullptr;
96 UPROPERTY(EditDefaultsOnly, Category = "Impact Effects")
97 float CameraShakeInnerRadius = 0.0f;
98 UPROPERTY(EditDefaultsOnly, Category = "Impact Effects")
99 float CameraShakeOuterRadius = 0.0f;
100 UPROPERTY(EditDefaultsOnly, Category = "Impact Effects")
101 FVector DecalSize = FVector(1.25f, 4.f, 4.f);
102 UPROPERTY(EditDefaultsOnly, Category = "Impact Effects")
103 float DecalLifetime = 10.f;
104 UPROPERTY(EditDefaultsOnly, Category = "Impact Effects")
105 float DecalMaxDrawDistance = 10000.f;
106 UPROPERTY(EditDefaultsOnly, Category = "Impact Effects")
107 float ParticleMaxDrawDistance = 25000.f;
108 UPROPERTY(EditDefaultsOnly, Category = "Impact Effects")
109 bool bFrustumCullParticles = true;
110 UPROPERTY(EditDefaultsOnly, Category = "Impact Effects")
111 bool bFrustumCullDecals = true;
115USTRUCT(Blueprintable)
118 GENERATED_USTRUCT_BODY()
120 UPROPERTY(EditDefaultsOnly, Category =
"Impact Effects")
121 UNiagaraSystem* NiagaraParticle = NULL;
122 UPROPERTY(EditDefaultsOnly, Category = "Impact Effects")
123 UParticleSystem* Particle = NULL;
124 UPROPERTY(EditDefaultsOnly, Category = "Impact Effects")
125 USoundBase* Sound = NULL;
126 UPROPERTY(EditDefaultsOnly, Category = "Impact Effects")
127 class UMaterial* Decal = NULL;
145UENUM(BlueprintType, meta = (Bitflags))
196USTRUCT(Blueprintable)
199 GENERATED_USTRUCT_BODY()
201 UPROPERTY(EditDefaultsOnly, Category =
"Overheat")
203 UPROPERTY(EditDefaultsOnly, Category = "Overheat")
204 float FloatValue = 5.f;
218UCLASS(Blueprintable, HideCategories = (Collision, Tags, Activation, ComponentReplication, Cooking))
221 GENERATED_UCLASS_BODY()
224 virtual void BeginPlay()
override;
225 virtual void EndPlay(
const EEndPlayReason::Type EndPlayReason)
override;
226 virtual void Activate(
bool bReset =
false)
override;
227 virtual void Deactivate()
override;
228 virtual void MatchEnded()
override;
229 virtual bool Fire(uint8
Mode = 0,
float WorldTimeOverride = -1.f);
230 virtual void CancelFire();
231 virtual void InitializeWeapon(
bool bFromBatchInitialization =
false);
233 virtual void OwnerDied();
234 virtual void StopAllActions();
235 virtual void StopInputConstrainedActions();
237 virtual bool ImplementsFireMode(uint8
Mode);
238 virtual void FireReleased(uint8
Mode = 0);
239 virtual bool Reload(
float WorldTimeOverride = -1.f);
240 virtual void CancelReload();
241 virtual bool Equip();
242 virtual bool UnEquip(
bool bForce =
false);
243 virtual void UnEquipComplete();
244 virtual bool QueueUnEquip();
245 virtual void CancelQueuedUnEquip();
246 virtual void ActiveTimeComplete();
247 virtual void UpdateMeshes1P();
248 virtual void UpdateMeshes3P();
249 virtual void ApplyWeaponSkins();
250 virtual void UpdateWeaponSkin(UMaterialInstance* Material,
int MaterialIndex);
251 virtual void UpdateWeaponSkinParticleSystem(UParticleSystem* WeaponSkinParticleSystem);
253 virtual void LoadImpactEffectTable(UDataTable* ImpactTable);
254 virtual void ToggleWeaponPerks(
bool bPerksOn);
256 virtual void SetMaxMagazineAmmo(
float NewMaxAmmo);
258 UFUNCTION(BlueprintCallable)
259 void SetFireAnimMontage(UAnimMontage* NewFireAnimation1P, UAnimMontage* NewFireAnimation3P) { FireAnimation1P = NewFireAnimation1P ? NewFireAnimation1P : FireAnimation1P; FireAnimation3P = NewFireAnimation3P ? NewFireAnimation3P : FireAnimation3P; }
262 UFUNCTION(BlueprintPure, Category =
Weapon)
263 FORCEINLINE
float GetFireRatePercentage()
const {
return FireRateInterp; }
264 UFUNCTION(BlueprintPure, Category =
Weapon)
266 UFUNCTION(BlueprintPure, Category =
Weapon)
268 UFUNCTION(BlueprintPure, Category =
Weapon)
270 UFUNCTION(BlueprintPure, Category =
Weapon)
272 UFUNCTION(BlueprintPure, Category =
Weapon)
273 FORCEINLINE
bool IsHoldingPrimary()
const {
return bHoldingFire; }
274 UFUNCTION(BlueprintPure, Category =
Weapon)
276 UFUNCTION(BlueprintPure, Category =
Weapon)
278 UFUNCTION(BlueprintPure, Category =
Weapon)
280 UFUNCTION(BlueprintPure, Category =
Weapon)
282 UFUNCTION(BlueprintPure, Category =
Weapon)
284 UFUNCTION(BlueprintPure, Category =
Weapon)
285 FORCEINLINE
bool CanWeaponOverheat()
const {
return bCanWeaponOverheat; }
286 UFUNCTION(BlueprintPure, Category =
Weapon)
287 FORCEINLINE
bool CanTightAim()
const {
return !IsDown() && !IsReloading() && !IsEquipping() && !IsUnEquipping() && !IsOverheated(); }
288 UFUNCTION(BlueprintPure, Category =
Weapon)
289 FORCEINLINE
bool IsTightAiming()
const {
return bTightAiming; }
290 UFUNCTION(BlueprintPure, Category =
Weapon)
291 FORCEINLINE
bool HasSwayOnTightAim()
const {
return bHasSwayOnTightAim; }
292 UFUNCTION(BlueprintPure, Category =
Weapon)
293 FORCEINLINE
float GetSwayIntensityMultiplier()
const {
return SwayIntensityMultiplier; }
294 UFUNCTION(BlueprintPure, Category =
Weapon)
295 FORCEINLINE
float GetFireRate()
const {
return FMath::Clamp(FMath::Lerp(FireRate, FireRateMin, FireRateInterp), SMALL_NUMBER, BIG_NUMBER); }
296 UFUNCTION(BlueprintPure, Category =
Weapon)
297 FORCEINLINE
float GetDisplayFireRate()
const {
return 60.0f/FireRate; }
298 UFUNCTION(BlueprintPure, Category =
Weapon)
299 FORCEINLINE
EFireType GetFireType()
const {
return WeaponFireType;}
300 UFUNCTION(BlueprintPure, Category =
Weapon)
302 UFUNCTION(BlueprintPure, Category =
Weapon)
304 UFUNCTION(BlueprintPure, Category =
Weapon)
306 UFUNCTION(BlueprintCallable, Category =
Weapon)
307 FORCEINLINE
bool IsInitialized()
const {
return bInitialized; }
309 FORCEINLINE
bool IsDebugging()
const {
return bDebug; }
312 UFUNCTION(BlueprintPure, Category =
Weapon)
313 FORCEINLINE
bool CanQuickSwitchTo()
const {
return bCanQuickSwitchTo; }
314 UFUNCTION(BlueprintPure, Category =
Weapon)
315 FORCEINLINE
bool ShouldUnEquipAfterFire()
const {
return bUnEquipAfterFire; }
316 UFUNCTION(BlueprintPure, Category =
Weapon)
317 FORCEINLINE
bool ShouldUnequipOnToggle()
const {
return bUnequipsOnToggle; }
318 UFUNCTION(BlueprintPure, Category =
Weapon)
319 FORCEINLINE
bool ShouldUnEquipOnEmpty()
const {
return bUnEquipOnEmpty; }
320 UFUNCTION(BlueprintPure, Category =
Weapon)
321 FORCEINLINE
bool CanBePreviousWeapon()
const {
return bCanBePreviousWeapon; }
322 UFUNCTION(BlueprintPure, Category =
Weapon)
323 FORCEINLINE
bool IsExclusiveWeapon()
const {
return bExclusiveWeapon && !IsBeingDestroyed(); }
324 UFUNCTION(BlueprintPure, Category =
Weapon)
325 FORCEINLINE
float GetDamageForce()
const {
return DamageForce; }
326 UFUNCTION(BlueprintPure, Category =
Weapon)
327 FORCEINLINE
bool CanHoldBreathWhileADSing()
const {
return bCanHoldBreathWhileADSing; }
328 UFUNCTION(BlueprintPure, Category =
Weapon)
329 FORCEINLINE
bool UsesAmmo()
const {
return bUsesAmmo; }
330 UFUNCTION(BlueprintPure, Category =
Weapon)
331 FORCEINLINE
bool UsesGlobalAmmo()
const {
return bGlobalAmmo; }
332 UFUNCTION(BlueprintPure, Category =
Weapon)
333 bool HasInfiniteReserveAmmo()
const;
334 UFUNCTION(BlueprintPure, Category =
Weapon)
335 float GetMaxMagAmmo()
const;
336 UFUNCTION(BlueprintPure, Category =
Weapon)
337 FORCEINLINE
float GetReserveAmmo()
const {
return HasInfiniteReserveAmmo() ? 0.f : TotalAmmo; }
338 UFUNCTION(BlueprintPure, Category =
Weapon)
339 FORCEINLINE
float GetMaxReserveAmmo()
const {
return HasInfiniteReserveAmmo() ? 0.f : MaxTotalAmmo; }
340 UFUNCTION(BlueprintPure, Category =
Weapon)
341 FORCEINLINE FName GetKeyChainSocket()
const {
return KeyChainSocketName; }
342 UFUNCTION(BlueprintPure, Category =
Weapon)
343 const FText& GetWeaponName()
const {
return WeaponName; }
344 UFUNCTION(BlueprintPure, Category =
Weapon)
345 const FText& GetWeaponDescription()
const{
return WeaponDescription;}
346 UFUNCTION(BlueprintPure, Category =
Weapon)
347 FORCEINLINE TAssetPtr<UTexture2D> GetWeaponIcon()
const {
return WeaponIcon; }
348 UFUNCTION(BlueprintPure, Category =
Weapon)
349 FORCEINLINE TAssetPtr<UTexture2D> GetWeaponKillFeedIcon()
const {
return WeaponKillFeedIcon; }
350 UFUNCTION(BlueprintPure, Category =
Weapon)
351 FORCEINLINE
bool UsesCoolDown()
const {
return bUsesCoolDown; }
352 UFUNCTION(BlueprintPure, Category =
Weapon)
353 FORCEINLINE
float GetCoolDownDuration()
const {
return CoolDown; }
354 UFUNCTION(BlueprintPure, Category =
Weapon)
355 FORCEINLINE
float GetChargeValue()
const {
return ChargeValue; }
356 UFUNCTION(BlueprintPure, Category =
"Weapon|Overheat")
357 FORCEINLINE
float GetOverheatThreshold()
const {
return OverheatThreshold; }
358 UFUNCTION(BlueprintPure, Category =
Weapon)
359 FORCEINLINE
bool DoesWeaponSupportTightAiming()
const {
return bCanTightAim;}
360 UFUNCTION(BlueprintPure,Category = Display)
361 FORCEINLINE FName GetDisplaySocketName()
const{
return DisplaySocketName;}
362 UFUNCTION(BlueprintPure, Category = Display)
363 FORCEINLINE
float GetDisplayCameraFocalDistance()
const {
return DisplayFocalDistance; }
367 UFUNCTION(BlueprintPure, Category =
Weapon)
368 FORCEINLINE
EWeaponState GetWeaponState()
const {
return WeaponState; }
369 UFUNCTION(BlueprintPure, Category = Character)
370 const TArray<
EPerkType>& GetPerkSlots()
const {
return PerkSlots; }
371 UFUNCTION(BlueprintPure, Category =
Weapon)
372 FTransform GetDesignatorTransform();
373 UFUNCTION(BlueprintPure, Category =
Weapon)
374 const FString& GetWeaponID()
const {
return WeaponID; }
375 UFUNCTION(BlueprintPure, Category =
Weapon)
376 virtual float GetWeaponSpread()
const;
377 UFUNCTION(BlueprintPure, Category =
Weapon)
378 virtual float GetMagAmmo()
const;
379 UFUNCTION(BlueprintPure,Category =
Weapon)
380 virtual
float GetDisplayDamage()
const {
return GetDamage(FHitResult()); }
381 UFUNCTION(BlueprintPure, Category =
Weapon)
382 UWeaponComponent* GetOwningComponent()
const;
383 UFUNCTION(BlueprintPure, Category =
Weapon)
385 UFUNCTION(BlueprintPure, Category =
Weapon)
386 AController* GetOwningController()
const;
387 UFUNCTION(BlueprintPure, Category =
Weapon)
389 UFUNCTION(BlueprintPure, Category =
Weapon)
390 UGlobalAmmoComponent* GetGlobalAmmoComponent()
const;
391 UFUNCTION(BlueprintPure, Category =
Weapon)
392 FVector GetKeyChainScale()
const {
return KeyChainScale; }
393 UFUNCTION(BlueprintPure, Category =
Weapon)
394 bool IsCurrentViewTarget()
const;
396 UFUNCTION(BlueprintPure, Category =
Weapon)
397 virtual bool IsLocallyOwned()
const;
399 UFUNCTION(BlueprintPure, Category =
Weapon)
400 virtual bool IsAuthority()
const;
401 UFUNCTION(BlueprintPure)
403 UFUNCTION(BlueprintPure)
405 UFUNCTION(BlueprintPure, Category =
Weapon)
406 virtual float GetTightAimPercent()
const;
407 UFUNCTION(BlueprintPure, Category =
Weapon)
408 float GetTightAimSpreadModifier()
const {
return FMath::Lerp(TightAimSpreadModifier.X, TightAimSpreadModifier.Y, GetTightAimPercent()); }
409 UFUNCTION(BlueprintPure, Category =
Weapon)
410 virtual float GetMovementSpreadModifier()
const;
411 UFUNCTION(BlueprintPure, Category =
Weapon)
412 TSubclassOf<class UUserWidget> GetTightAimWidget()
const {
return TightAimWidget; }
413 UFUNCTION(BlueprintPure, Category =
Weapon)
414 virtual float GetGlobalRestockTime()
const;
415 UFUNCTION(BlueprintPure, Category =
Weapon)
416 virtual float GetGlobalRestockAmount()
const;
417 UFUNCTION(BlueprintPure, Category =
Weapon)
418 virtual bool IsProgressiveGlobalAmmoRestock()
const;
419 UFUNCTION(BlueprintPure, Category =
Weapon)
420 virtual bool IsHeadshot(
const FHitResult& HitResult)
const;
421 UFUNCTION(BlueprintPure, Category =
Weapon)
422 virtual float GetDamage(
const FHitResult& HitResult,
float DamageModifer = 1.0f,
const UWeaponComponent* WeaponComponent = NULL)
const;
423 UFUNCTION(BlueprintPure, Category =
Weapon)
424 virtual float GetDamageMultiplier(
const FHitResult& HitResult,
float DamageModifer = 1.0f,
const UWeaponComponent* WeaponComponent = NULL)
const;
425 UFUNCTION(BlueprintPure, Category =
Weapon)
426 virtual TSubclassOf<UDamageType> GetDamageType()
const;
427 UFUNCTION(BlueprintPure, Category =
Weapon)
428 float GetDamageScalingMultiplier(
float Value)
const;
429 UFUNCTION(BlueprintPure, Category =
Weapon)
430 bool IsCoolingDown()
const;
431 UFUNCTION(BlueprintPure, Category =
Weapon)
432 float CoolDownDurationRemaining()
const;
433 UFUNCTION(BlueprintPure, Category =
"Weapon|Overheat")
434 float GetCurrentHeat() const;
435 UFUNCTION(BlueprintPure, Category = "
Weapon|Overheat")
436 float GetHeatAsPercentage() const;
437 UFUNCTION(BlueprintPure, Category =
Weapon)
438 UParticleSystem* GetWeaponSkinParticle()
const {
return WeaponSkinParticle; }
440 virtual
bool IsTightAimFireMode(uint8
Mode) const;
443 virtual
bool IsLocallyOwnedRemote() const;
446 virtual
bool IsSimulatedOnly() const;
449 virtual
bool IsNonOwningAuthority() const;
450 UFUNCTION(BlueprintCallable, Category = "
Weapon")
451 virtual
void AddAmmo(
float InAmmo);
453 virtual const FText& GetObjectName()
const {
return WeaponName; };
454 virtual const FString GetOwnerName()
const;
456 virtual bool IsActionNearlyComplete(
EWeaponState State)
const;
457 virtual bool IsChildWeaponFireMode(uint8
Mode)
const;
459 virtual bool ShouldReloadCancel(uint8
Mode)
const;
460 virtual bool CanReload(
EWeaponError& ErrorMessage)
const;
466 virtual bool CanEquip()
const;
467 virtual bool CanUnEquip(
bool bTestOnly =
false)
const;
468 virtual bool CanQueueUnEquip()
const;
469 virtual bool IsAwaitingUnEquip()
const;
470 virtual float GetDamageMaterialMultiplier(
const FHitResult& HitResult)
const;
471 virtual bool HasEnoughAmmo(
float Amount, uint8
Mode = 0)
const;
477 virtual FVector GetWeaponMovementDirection()
const;
478 const FVector GetWeaponPivotOffset()
const;
479 TSoftObjectPtr<USkeletalMesh> GetMesh1P()
const;
480 TSoftObjectPtr<USkeletalMesh> GetMesh3P()
const;
484 UFUNCTION(BlueprintNativeEvent)
485 void OnChargeValueUpdated(
float Charge);
486 UFUNCTION(BlueprintImplementableEvent)
487 void OnWeaponParticleLoaded(UParticleSystem* Particle);
488 UFUNCTION(BlueprintImplementableEvent, Category =
Weapon, meta = (DisplayName = "
On Fire", ScriptName = "
Fire"))
490 UFUNCTION(BlueprintImplementableEvent, Category =
Weapon, meta = (DisplayName = "
On Fire Released", ScriptName = "FireReleased"))
491 void K2_FireReleased(uint8
Mode);
492 UFUNCTION(BlueprintImplementableEvent, Category =
Weapon, meta = (DisplayName = "
On Fire Complete", ScriptName = "FireComplete"))
493 void K2_FireComplete(uint8
Mode);
494 UFUNCTION(BlueprintImplementableEvent, Category =
Weapon, meta = (DisplayName = "
On Reload", ScriptName = "Reload"))
496 UFUNCTION(BlueprintImplementableEvent, Category =
Weapon, meta = (DisplayName = "
On Reload Cancelled", ScriptName = "ReloadCancel"))
497 void K2_ReloadCancel();
498 UFUNCTION(BlueprintImplementableEvent, Category =
Weapon, meta = (DisplayName = "
On Reload
Complete", ScriptName = "ReloadComplete"))
499 void K2_ReloadComplete();
500 UFUNCTION(BlueprintImplementableEvent, Category =
Weapon, meta = (DisplayName = "
On Equip", ScriptName = "Equip"))
503 void K2_EquipComplete();
504 UFUNCTION(BlueprintImplementableEvent, Category =
Weapon, meta = (DisplayName = "
On UnEquip", ScriptName = "UnEquip"))
506 UFUNCTION(BlueprintImplementableEvent, Category =
Weapon, meta = (DisplayName = "
On UnEquip
Complete", ScriptName = "UnEquipComplete"))
507 void K2_UnEquipComplete();
508 UFUNCTION(BlueprintImplementableEvent)
509 void K2_ToggleDesignatorMarker(AActor* NewDesignatorMarker);
510 UFUNCTION(BlueprintImplementableEvent, Category =
Weapon, meta = (DisplayName = "
On Weapon State Changed", ScriptName = "WeaponStateChanged"))
512 UFUNCTION(BlueprintImplementableEvent, Category =
Weapon, meta = (DisplayName = "
On Owner Died", ScriptName = "OwnerDied"))
516 UFUNCTION(BlueprintCallable, Category =
Weapon, meta = (DisplayName = "Is Headshot", ScriptName = "IsHeadshot"))
517 static
bool IsHeadshotStatic(const FHitResult& HitResult, const TSubclassOf<UDamageType> DamageType);
518 UFUNCTION(BlueprintCallable, Category =
Weapon)
519 static
bool ShouldDisplayHitConfirm(AActor* Target, AActor* Instigator);
520 UFUNCTION(BlueprintPure, Category =
Weapon, meta = (DisplayName = "Get Mag Capacity", ScriptName = "GetMagCapacity"))
522 UFUNCTION(BlueprintPure, Category =
Weapon, meta = (DisplayName =
"Get Global Restock Time", ScriptName =
"GetGlobalRestockTime"))
524 UFUNCTION(BlueprintPure, Category =
Weapon, meta = (DisplayName =
"Get Global Restock Amount", ScriptName =
"GetGlobalRestockAmount"))
526 UFUNCTION(BlueprintPure, Category =
Weapon, meta = (DisplayName =
"Get KeyChain Scale", ScriptName =
"GetKeyChainScale"))
528 UFUNCTION(BlueprintPure, Category =
Weapon, meta = (DisplayName =
"Get Weapon Name", ScriptName =
"GetWeaponName"))
530 UFUNCTION(BlueprintPure, Category =
Weapon, meta = (DisplayName =
"Get Weapon Name", ScriptName =
"GetWeaponDescription"))
532 UFUNCTION(BlueprintPure, Category =
Weapon, meta = (DisplayName =
"Get Weapon ID", ScriptName =
"GetWeaponID"))
534 UFUNCTION(BlueprintPure, Category =
Weapon, meta = (DisplayName = "Get
Weapon Icon", ScriptName = "GetWeaponIcon"))
536 UFUNCTION(BlueprintPure, Category =
Weapon, meta = (DisplayName =
"Get Weapon KeyChain Socket", ScriptName =
"GetWeaponKeyChainSocket"))
538 UFUNCTION(BlueprintPure, Category =
Weapon, meta = (DisplayName =
"Get Weapon Kill Feed Icon", ScriptName =
"GetWeaponKillFeedIcon"))
540 UFUNCTION(BlueprintPure, Category =
Weapon, meta = (DisplayName =
"GetDisplayMesh", ScriptName =
"GetDisplayMesh"))
542 static void GetAllImpactEffectRows(
class UDataTable* DataTable, TArray<struct FImpactTableRow*>& ImpactEffectRows);
543 UFUNCTION(BlueprintPure, Category =
Weapon, meta = (DisplayName =
"GetNumberOfPerkSlots", ScriptName =
"GetNumberOfPerkSlots"))
545 UFUNCTION(BlueprintPure, Category =
"Player Class", meta = (DisplayName =
"GetPerkSlots", ScriptName =
"GetPerkSlots"))
547 static struct FImpactTableRow* GetImpactEffectByName(
class UDataTable* DataTable, FName RowName);
548 static struct FImpactTableRow* GetImpactEffectByPhysicsMaterial(
class UDataTable* DataTable,
const UPhysicalMaterial*
Material);
549 static void SpawnImpactEffects(UObject* WorldContextObject,
class UDataTable* DataTable,
const FHitResult&
Hit,
class UParticleSystemComponent*& ParticleSystem,
class UAudioComponent*& AudioComponent,
class UDecalComponent*& DecalComponent, UNiagaraComponent*& NiagaraParticleSystem);
551 UPROPERTY(EditDefaultsOnly, Replicated,Category =
"Weapon|Ammo", meta = (EditCondition =
"bUsesAmmo"))
552 float MaxMagazineAmmo = 10.f;
554 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|
CoolDown", meta = (EditCondition = "bUsesCoolDown"))
557 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Weapon")
558 float BaseDamage = 10.f;
560 UPROPERTY(BlueprintAssignable)
561 FChargeEventSignature ChargeStartEvent;
562 UPROPERTY(BlueprintAssignable)
563 FChargeEventSignature ChargeFinishedEvent;
564 UPROPERTY(BlueprintAssignable)
565 FWeaponActiveEvent WeaponToggleEvent;
566 UPROPERTY(BlueprintAssignable)
567 FWeaponCancelledEvent WeaponCancelledEvent;
568 UPROPERTY(BlueprintAssignable)
569 FWeaponOverheatEvent ONWeaponOverheatStart;
570 UPROPERTY(BlueprintAssignable)
571 FWeaponOverheatEvent ONWeaponOverheatEnd;
572 UPROPERTY(BlueprintAssignable)
573 FWeaponEquipStateChangeSignature OnWeaponEquipped;
574 UPROPERTY(BlueprintAssignable)
575 FWeaponStopActionsSignature OnWeaponStopActions;
576 UPROPERTY(BlueprintAssignable)
577 FCoolDownSignature OnCoolDownStarted;
578 UPROPERTY(BlueprintAssignable)
579 FWeaponCompleteSignature OnCoolDownFinished;
580 UPROPERTY(BlueprintAssignable)
581 FWeaponAmmoChangedSignature OnWeaponAmmoChanged;
582 UPROPERTY(BlueprintAssignable)
583 FWeaponDesignatorTargetSignature OnValidDesignatorTargetEvent;
585 UAnimMontage* GetFireMontage1P() const;
586 UAnimMontage* GetFireMontage3P() const;
588 virtual
void OnHeatCoolDownComplete();
589 virtual
void FireComplete(uint8
Mode);
590 virtual
void ChargeStart(uint8
Mode,
float StartOverride = 0.0f);
592 virtual
void ReloadComplete();
593 virtual
void SetMagazineAmmo(
float NewMagAmmo);
594 virtual
void StartWeaponMovement(const FVector& Direction);
595 virtual
void StopWeaponMovement();
596 virtual
void OnWeaponDown() {
if (IsSimulatedOnly()) K2_UnEquip(); }
597 virtual void ToggleEquippedAffliction(
bool bIsEquipped);
598 virtual void CoolDownStart(uint8
Mode);
599 virtual bool ConsumeAmmo(
float Amount, uint8
Mode = 0);
600 virtual bool GenerateHeat(uint8
Mode = 0);
601 virtual void ToggleTightAim(
bool bEnable);
602 virtual void ToggleDesignatorMarker(
bool bEnable);
603 virtual void UpdateDesignator(
float DeltaTime = 0.f);
604 virtual bool CanSpawnDesignator()
const;
605 virtual void PlayFireCounter();
606 virtual void PlayWeaponFireEffects(uint8 BurstCounter = 0);
607 virtual void PlayWeaponFireEffects1P();
608 virtual void PlayWeaponFireEffects3P();
609 virtual void PlayWeaponReload();
610 virtual void StopWeaponReload();
611 virtual void PlayWeaponEquip();
612 virtual void PlayWeaponUnEquip();
613 virtual void DecayFireRate();
615 virtual void WaitToStartHeatCooldown();
616 virtual void StartHeatCooldown();
617 virtual void PredictCurrentHeat();
618 virtual void AsyncLoadImpactTableNiagaraParticle(TSoftObjectPtr<UNiagaraSystem> AssetPointer, UPhysicalMaterial*
Material);
619 virtual void AsyncLoadImpactTableParticle(TSoftObjectPtr<UParticleSystem> AssetPointer, UPhysicalMaterial*
Material);
620 virtual void AsyncLoadImpactTableSound(TSoftObjectPtr<USoundBase> AssetPointer, UPhysicalMaterial*
Material);
621 virtual void AsyncLoadImpactTableDecal(TSoftObjectPtr<UMaterial> AssetPointer, UPhysicalMaterial*
Material);
623 UFUNCTION(BlueprintPure, Category =
Weapon, meta = (DisplayName =
"Get Target Transform", ScriptName =
"GetTargetTransform"))
624 virtual
bool GetTargetTransform(FTransform& Transform) const;
626 UFUNCTION(
Server, Reliable, WithValidation)
627 void Server_Reliable_UnEquip();
628 UFUNCTION(
Server, Reliable, WithValidation)
629 void Server_Reliable_Fire(uint8
Mode = 0,
float WorldTimeOverride = -1.f);
630 UFUNCTION(
Server, Reliable, WithValidation)
631 void Server_Reliable_CancelFire();
632 UFUNCTION(
Server, Reliable, WithValidation)
633 void Server_Reliable_ChargeStart(
float ChargeStartTime,uint8
Mode = 0,
float WorldTimeOverride = -1.f);
634 UFUNCTION(
Server, Reliable, WithValidation)
635 void Server_Reliable_FireReleased(uint8
Mode);
636 UFUNCTION(
Server, Reliable, WithValidation)
637 void Server_Reliable_Reload(
float WorldTimeSeconds);
638 UFUNCTION(
Server, Reliable, WithValidation)
639 void Server_Reliable_ReloadCancel();
640 UFUNCTION(
Server, Reliable, WithValidation)
641 void Server_Reliable_TightAim(
bool bEnable);
642 UFUNCTION(NetMulticast, Reliable)
643 void Multicast_ChargeFinished(
float ChargeVal);
645 UFUNCTION(Client, Reliable)
647 UFUNCTION(Client, Reliable)
648 void Client_Reliable_ReloadComplete(
float ReloadAmount);
649 UFUNCTION(Client, Reliable)
650 void Client_Reliable_TotalAmmoChanged(
float NewTotalAmmo);
651 UFUNCTION(Client, Reliable)
652 void Client_Reliable_SetMagazineAmmo(
float NewMagAmmo);
653 UFUNCTION(Client, Reliable)
654 void Client_Reliable_HeatCooldownComplete(uint8
Mode);
657 virtual
void ChargeTimeComplete(uint8
Mode,
bool bExecuteFire = true);
659 virtual
void DeferredReload();
661 virtual
void CoolDownFinished();
664 void OnRep_ChargeIsReady();
666 void OnRep_IsOverheating();
668 void OnRep_HoldingFire();
670 void OnRep_ParentWeapon();
672 virtual
void OnRep_WeaponState(
EWeaponState PreviousState);
674 virtual
void OnRep_FireCounter();
676 virtual
void OnRep_TightAiming();
682 UPROPERTY(EditDefaultsOnly, Category = "
Weapon")
683 bool bIsManagedByWeaponComponent = true;
685 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Unmanaged", meta = (EditCondition = "bIsManagedByWeaponComponent"))
686 bool bBlocksUnmanagedWeapons = false;
688 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Unmanaged", meta = (EditCondition = "!bIsManagedByWeaponComponent"))
689 bool bBlockWeaponComponentWhileEquipped = true;
691 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Unmanaged", meta = (EditCondition = "!bIsManagedByWeaponComponent"))
692 bool bRespectWeaponComponentFireLock = true;
694 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Unmanaged", meta = (EditCondition = "!bIsManagedByWeaponComponent"))
695 bool bCancelCurrentEquippedWeaponActions = true;
697 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Unmanaged", meta = (EditCondition = "!bIsManagedByWeaponComponent"))
698 bool bCanEquipWhileSharedWeaponIsEquipping = false;
700 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Unmanaged", meta = (EditCondition = "!bIsManagedByWeaponComponent"))
701 bool bCanEquipWhileSharedWeaponIsUnequipping = false;
703 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Unmanaged|Animation|First Person", meta = (EditCondition = "!bIsManagedByWeaponComponent"))
706 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Unmanaged|Animation|Third Person", meta = (EditCondition = "!bIsManagedByWeaponComponent"))
709 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Unmanaged|Animation", meta = (EditCondition = "!bIsManagedByWeaponComponent"))
710 bool bFallBackToFireAnim = true;
712 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Unmanaged", meta = (EditCondition = "!bIsManagedByWeaponComponent"))
713 bool bInterpolateToUnmanagedOffset = false;
715 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Unmanaged", meta = (EditCondition = "!bIsManagedByWeaponComponent && bInterpolateToUnmanagedOffset"))
716 float UnmanagedOffsetInterpolateToTime = 0.1f;
718 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Unmanaged", meta = (EditCondition = "!bIsManagedByWeaponComponent && bInterpolateToUnmanagedOffset"))
719 float UnmanagedOffsetInterpolateFromTime = 0.1f;
722 bool bUsesCoolDown = false;
724 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|
CoolDown", meta = (EditCondition = "bUsesCoolDown"))
727 UPROPERTY(EditDefaultsOnly, Category = "
Weapon")
730 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Charge")
731 bool bFireChargeOnRelease = false;
733 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Weapon|Charge")
734 float ChargeRate = 1.f;
736 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Weapon")
737 float FireRate = 1.f;
739 UPROPERTY(EditDefaultsOnly, Category = "
Weapon")
740 float DamageForce = 200000.f;
742 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Weapon")
743 float FireRateMin = 1.f;
745 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Weapon")
746 float FireRateRampUp = 0.0f;
748 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Weapon")
749 float ReloadRate = 1.f;
751 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Weapon")
753 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Weapon")
754 FString WeaponID = "";
756 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Aim
Assist")
757 UCurveFloat* AimAssistDistanceFalloffCurve =
nullptr;
759 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Aim
Assist")
760 UCurveFloat* TightAimedAimAssistDistanceFalloffCurve =
nullptr;
762 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Aim
Assist")
763 FVector2D AimAssistFalloffAngle = FVector2D(3.0f, 6.0f);
765 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Aim
Assist")
766 FVector2D TightAimedAimAssistFalloffAngle = FVector2D(1.0f, 3.0f);
768 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Overheat")
769 bool bCanWeaponOverheat = false;
771 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Gameplay|Stats")
772 bool bCanHoldBreathWhileADSing = false;
774 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Overheat", meta = (EditCondition = "bCanWeaponOverheat"))
775 bool bCanUnequipWhileOverheating = true;
777 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Overheat", meta = (EditCondition = "bCanWeaponOverheat"))
780 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Overheat", meta = (EditCondition = "bCanWeaponOverheat"))
781 float HeatDissipationRate = 1.f;
783 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Overheat", meta = (EditCondition = "bCanWeaponOverheat"))
784 float OverheatThreshold = 100.f;
786 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Weapon|Overheat", meta = (EditCondition = "bCanWeaponOverheat"))
787 float TimeToFullyCoolDown = 5.f;
789 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Weapon|Equip")
790 float EquipRate = 0.25f;
792 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Weapon|Equip")
793 float UnequipRate = -1.f;
795 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Equip")
796 bool bCanQuickSwitchTo = true;
798 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Equip")
799 bool bUnequipsOnToggle = false;
801 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Equip")
802 bool bCanBePreviousWeapon = true;
804 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Equip", meta = (EditCondition = "!bAltFireOnEquip"))
805 bool bFireOnEquip = false;
807 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Equip", meta = (EditCondition = "!bFireOnEquip"))
808 bool bAltFireOnEquip = false;
810 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Equip")
811 bool bUnEquipAfterFire = false;
813 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Equip")
814 bool bUnEquipOnEmpty = false;
816 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Equip")
817 bool bDropWeaponWhenEmpty = false;
819 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Equip")
820 bool bCanEquipWhenEmpty = true;
822 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Equip")
823 bool bExclusiveWeapon = false;
825 UPROPERTY(EditDefaultsOnly, Category = "
Weapon", meta = (Bitmask, BitmaskEnum =
EFireMode))
826 uint8 FireModeFlags = 0;
828 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Equip")
829 TSubclassOf<UAfflictionInstance> EquippedAffliction = NULL;
831 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Weapon")
832 TMap<class UPhysicalMaterial*,
float> DamageMultipliers;
834 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Equip")
835 float MinimumChargeValue = 1.0f;
837 UPROPERTY(EditDefaultsOnly, Category = "
Weapon")
840 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Charge")
841 bool bHeldToCharge = true;
843 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Equip")
844 UCurveFloat* DamageScalingCurve;
846 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|
Ammo")
847 bool bUsesAmmo = true;
849 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|
Ammo", meta = (EditCondition = "bUsesAmmo"))
852 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|
Ammo", meta = (EditCondition = "bUsesAmmo"))
853 bool bConsumeOnFire = true;
855 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|
Ammo", meta = (EditCondition = "bUsesAmmo"))
856 bool bReloadWhenEmptied = true;
858 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|
Ammo", meta = (EditCondition = "bUsesAmmo"))
859 bool bInfiniteReserveAmmo = true;
861 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|
Ammo", meta = (EditCondition = "bUsesAmmo"))
862 float MaxTotalAmmo = 100.f;
864 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|
Ammo", meta = (EditCondition = "bUsesAmmo"))
865 float AmmoConsumedPerShot = 1.f;
867 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|
Ammo", meta = (EditCondition = "bUsesAmmo"))
868 bool bGlobalAmmo = false;
870 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|
Ammo", meta = (EditCondition = "bGlobalAmmo"))
871 float RestockTime = 5.f;
873 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|
Ammo", meta = (EditCondition = "bGlobalAmmo"))
874 float RestockAmount = 5.f;
876 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|
Ammo", meta = (EditCondition = "bGlobalAmmo"))
877 bool bProgressiveRestock = false;
879 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|
Ammo", meta = (EditCondition = "bGlobalAmmo"))
880 bool bResetAmmoOnSpawn = false;
882 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Tight Aim")
883 bool bCanTightAim = false;
885 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Tight Aim", meta = (EditCondition = "bCanTightAim"))
886 bool bHasSwayOnTightAim = true;
888 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Tight Aim", meta = (EditCondition = "bCanTightAim && bHasSwayOnTightAim"))
889 float SwayIntensityMultiplier = 1.f;
891 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Tight Aim", meta = (EditCondition = "bCanTightAim"))
894 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Tight Aim", meta = (EditCondition = "bCanTightAim"))
895 float TightAimRate = 0.25f;
897 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Tight Aim", meta = (EditCondition = "bCanTightAim"))
898 float TightAimFOV = 45.f;
900 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Tight Aim", meta = (EditCondition = "bCanTightAim"))
901 float TightAimFocalDistance = 20.f;
903 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Tight Aim", meta = (EditCondition = "bCanTightAim"))
904 float TightAimFStop = 36.f;
906 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Tight Aim", meta = (EditCondition = "bCanTightAim"))
907 FVector TightAimRelativeWeaponOffset = FVector::ZeroVector;
909 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Tight Aim", meta = (EditCondition = "bCanTightAim"))
910 FRotator TightAimRelativeWeaponRotationOffset = FRotator::ZeroRotator;
912 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Tight Aim", meta = (EditCondition = "bCanTightAim"))
913 bool bTightAimInterruptsReload = false;
915 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Tight Aim", meta = (EditCondition = "bCanTightAim"))
916 FVector2D TightAimSpreadModifier = FVector2D(1.f, 1.f);
918 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Tight Aim", meta = (EditCondition = "bCanTightAim"))
919 TSubclassOf<class UUserWidget> TightAimWidget = NULL;
921 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Tight Aim", meta = (EditCondition = "bCanTightAim"))
922 UTexture* TightAimReticleTexture = NULL;
924 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Tight Aim", meta = (EditCondition = "bCanTightAim"))
925 FVector2D TightAimReticleTextureScale = FVector2D(0.05f, 0.05f);
927 UPROPERTY(EditDefaultsOnly, Category = "
Weapon|Tight Aim", meta = (EditCondition = "bCanTightAim"))
928 FLinearColor TightAimReticleTextureTint = FLinearColor::White;
930 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Weapon")
931 TSubclassOf<class UDamageType> BaseDamageType = NULL;
934 bool bEnableWeaponMovement = false;
935 UPROPERTY(EditDefaultsOnly, Category = "
Weapon |
Movement", meta = (EditCondition = "bEnableWeaponMovement"))
936 TSubclassOf <class UAfflictionInstance > WeaponMovementAfflictionClass = NULL;
938 UPROPERTY(EditDefaultsOnly, Category = "
Weapon |
Movement", meta = (EditCondition = "bEnableWeaponMovement"))
939 float WeaponMovementVelocity = 500.f;
941 UPROPERTY(EditDefaultsOnly, Category = "
Weapon |
Movement", meta = (EditCondition = "bEnableWeaponMovement"))
942 float MaxWeaponMovementDuration = 0.f;
944 UPROPERTY(EditDefaultsOnly, Category = "
Weapon |
Movement", meta = (EditCondition = "bEnableWeaponMovement"))
948 bool bLooksTowardsDashMovement = false;
951 bool bBreakAfterDashing = false;
953 UPROPERTY(EditDefaultsOnly, Category = "
Weapon |
Movement", meta = (EditCondition = "bEnableWeaponMovement"))
956 UPROPERTY(EditDefaultsOnly, Category = "
Weapon | Child Weapons")
957 bool bIsChildWeapon = false;
959 UPROPERTY(EditDefaultsOnly, Category = "
Weapon | Child Weapons", meta = (EditCondition = "!bIsChildWeapon"))
962 UPROPERTY(EditDefaultsOnly, Category = "
Weapon | Child Weapons", meta = (EditCondition = "!bIsChildWeapon && ChildWeaponClass!= NULL"))
966 FName KeyChainSocketName = "KeyChainSocket";
969 FVector KeyChainScale = FVector(1.0f, 1.0f, 1.0f);
971 UPROPERTY(EditDefaultsOnly, Category = "Designator")
974 UPROPERTY(EditDefaultsOnly, Category = "Designator")
977 UPROPERTY(EditDefaultsOnly, Category = "Designator")
978 bool bDesignatorRequiresTarget = true;
980 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|First Person")
981 float WeaponMeshRecoilTime = 0.5f;
983 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|First Person")
984 float WeaponMeshRecoilDistance = 0.0f;
986 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|First Person")
987 float WeaponMeshRecoilDistanceTightAimed = 0.0f;
989 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|First Person")
990 UCurveFloat* WeaponMeshRecoilCurve =
nullptr;
992 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Mesh|First Person")
993 TSoftObjectPtr<USkeletalMesh> DisplayMesh1P;
995 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Mesh|Third Person")
996 TSoftObjectPtr<USkeletalMesh> DisplayMesh3P;
998 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Mesh|First Person")
1001 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Mesh|First Person")
1002 FName SocketAttach1P;
1004 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Mesh|Third Person")
1005 FName SocketAttach3P;
1007 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Mesh|Third Person")
1008 FVector Mesh3PScale = FVector(1.f, 1.f, 1.f);
1010 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|First Person")
1011 TSubclassOf<UAnimInstance> AnimationClass1P;
1013 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|First Person")
1014 UAnimMontage* FireAnimation1P;
1016 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|First Person")
1017 UAnimMontage* TightAimFireAnimation1P;
1019 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|First Person")
1020 UAnimMontage* ReloadAnimation1P;
1022 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|First Person")
1023 UAnimMontage* ReloadAnimation1PStart;
1025 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|First Person")
1026 UAnimMontage* ReloadAnimation1PEnd;
1028 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|First Person")
1029 bool bPlayFireAnimationImmediately = false;
1031 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|First Person")
1032 UAnimMontage* SwapWeaponIn1P;
1034 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|First Person")
1035 UAnimMontage* SwapWeaponOut1P;
1037 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|
Weapon")
1038 TSubclassOf<UAnimInstance> WeaponAnimationClass;
1040 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|
Weapon")
1041 TSubclassOf<UAnimInstance> WeaponAnimationClass3P;
1043 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|
Weapon")
1044 UAnimMontage* WeaponFireAnimation;
1046 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|
Weapon")
1047 UAnimMontage* WeaponFireAnimation3P;
1049 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|
Weapon")
1050 UAnimMontage* WeaponReloadAnimation1P;
1052 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|
Weapon")
1053 UAnimMontage* WeaponReloadAnimation1PStart;
1055 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|
Weapon")
1056 UAnimMontage* WeaponReloadAnimation1PEnd;
1058 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|
Weapon")
1059 UAnimMontage* WeaponEquipAnimation;
1061 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|Third Person")
1062 TSubclassOf<UAnimInstance> AnimationClass3P;
1064 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|Third Person")
1065 UAnimMontage* FireAnimation3P;
1067 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|Third Person")
1068 UAnimMontage* TightAimFireAnimation3P;
1070 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|Third Person")
1071 UAnimMontage* ReloadAnimation3P;
1073 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|Third Person")
1074 UAnimMontage* SwapWeaponIn3P;
1076 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|Third Person")
1077 UAnimMontage* SwapWeaponOut3P;
1079 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation|
Weapon")
1080 UAnimMontage* WeaponReloadAnimation3P;
1082 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Sound")
1083 USoundBase* FireSingleSound;
1085 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Sound")
1086 USoundBase* FireAutoSound;
1088 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Sound")
1089 USoundBase* FireAutoLoopSound;
1091 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Sound")
1092 USoundBase* FireAutoLoopTail;
1094 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Sound")
1095 USoundBase* WeaponMagEmptySound;
1097 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Sound")
1098 float AutoFireClipShotsPerSec = 10.0f;
1100 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Sound")
1101 bool bPlaySingleSoundForBursts = true;
1103 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Sound")
1104 bool bStartLoopingSoundOnFirstShotRemote = true;
1106 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Sound")
1107 bool bStartLoopingSoundOnFirstShotLocal = true;
1109 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "
Sound")
1110 bool bSyncLoopingSoundToFireRate = true;
1112 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Mesh|First Person")
1113 FVector Mesh1PScale = FVector(1.f, 1.f, 1.f);
1115 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Mesh|First Person")
1116 float Mesh1PScaleMultiplier = 2.0f;
1118 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Mesh|First Person")
1119 FVector RelativePositionOffset = FVector(30.0f, -22.0f, -152.0f);
1121 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Mesh|First Person")
1122 FRotator RelativeRotationOffset = FRotator(16.0f, 0.0f, 10.0f);
1124 UPROPERTY(EditDefaultsOnly, Category = "UI")
1126 UPROPERTY(EditDefaultsOnly, Category = "UI")
1127 FText WeaponDescription;
1129 UPROPERTY(EditDefaultsOnly, Category = "
Weapon")
1130 float ReticleSpreadMultiplier = 1.f;
1132 UPROPERTY(EditDefaultsOnly, Category = "UI")
1135 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "UI")
1136 TSubclassOf<UUserWidget> AmmoCounterWidget = NULL;
1137 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "UI")
1138 FName AmmoCounterSocket = "CounterAttachmentPoint";
1140 UPROPERTY(EditDefaultsOnly, Category = "UI")
1141 TAssetPtr<UTexture2D> WeaponIcon = NULL;
1143 UPROPERTY(EditDefaultsOnly, Category = "UI")
1144 TAssetPtr<UTexture2D> WeaponKillFeedIcon = NULL;
1145 UPROPERTY(EditDefaultsOnly, Category = "
Weapon | Equip")
1146 TSubclassOf <class UAfflictionInstance > WeaponAffliction = NULL;
1147 UPROPERTY(EditDefaultsOnly, Category = "
Loadout")
1149 UPROPERTY(EditDefaultsOnly, Category =
"Weapon")
1150 bool bAppliesUltimateDamageMultiplier = false;
1152 UPROPERTY(EditDefaultsOnly, Category = "Display")
1153 FName DisplaySocketName = "DisplaySocket";
1154 UPROPERTY(EditDefaultsOnly, Category = "Display")
1155 float DisplayFocalDistance = -1.0f;
1156 UPROPERTY(ReplicatedUsing = OnRep_WeaponState)
1158 UPROPERTY(ReplicatedUsing = OnRep_ParentWeapon)
1160 UPROPERTY(ReplicatedUsing = OnRep_FireCounter)
1161 uint8 FireCounter = 0;
1162 UPROPERTY(ReplicatedUsing = OnRep_HoldingFire)
1163 bool bHoldingFire = false;
1164 UPROPERTY(ReplicatedUsing = OnRep_ChargeIsReady)
1165 bool bCharging = false;
1166 UPROPERTY(ReplicatedUsing = OnRep_IsOverheating)
1167 bool bIsOverheating = false;
1168 UPROPERTY(BlueprintReadOnly, ReplicatedUsing = OnRep_TightAiming)
1169 bool bTightAiming = false;
1170 UPROPERTY(Replicated)
1174 float TotalAmmo = 0.f;
1176 float MagazineAmmo = 0.f;
1178 bool bAwaitingUnEquip = false;
1182 UWeaponComponent* OwningComponent = NULL;
1184 TMap<uint8, UMaterialInstance*> WeaponSkin;
1185 UPROPERTY(BlueprintReadOnly)
1186 UParticleSystem* WeaponSkinParticle =
nullptr;
1190 bool bValidDesignator = false;
1191 bool bInitialized = false;
1192 float GlobalAmmoRestockMultiplier = 1.0f;
1195 float WeaponEquippedTimestamp = 0.f;
1197 friend class UWeaponComponent;
1202 void EndLoopingFireSound();
1205 mutable UGlobalAmmoComponent* GlobalAmmoComponent = NULL;
1209 float CurrentHeat = 0.f;
1210 uint8 ClientFireCounter = 0;
1211 int32 ChargingInterpolatorId;
1212 uint32 TightAimInterpolationID = INDEX_NONE;
1213 float LastReloadTime = 0.0f;
1214 float FireRateInterp = 0.0f;
1215 int32 FireRateRampInterpID = INDEX_NONE;
1216 float LastWeaponFireTime = 0.0f;
1217 float AutoFireAudioDelay = 0.0f;
1218 float LastDelayedPlayTime = 0.0f;
1219 UUserWidget* CreatedTightAimWidget =
nullptr;
1220 uint32 OffsetShiftInterpolationID = INDEX_NONE;
1223 UAudioComponent* ActiveLoopingAudioComponent =
nullptr;
1225 FTimerHandle FireTimer = FTimerHandle();
1226 FTimerHandle WeaponMovementTimer = FTimerHandle();
1227 FTimerHandle WaitingForHeatCoolDownStartTimer = FTimerHandle();
1228 FTimerHandle TriggerReleasedHeatCoolDownTimer = FTimerHandle();
1229 FTimerHandle HeatCoolDownTimer = FTimerHandle();
1230 FTimerHandle ReloadTimer = FTimerHandle();
1231 FTimerHandle EquipTimer = FTimerHandle();
1232 FTimerHandle UnEquipTimer = FTimerHandle();
1233 FTimerHandle CoolDownTimer = FTimerHandle();
1234 FTimerHandle FireCounterTimer = FTimerHandle();
1235 FTimerHandle ActiveTimer = FTimerHandle();
EPerkType
Definition: CosmeticAssetBase.h:61
@ Dash
Definition: DashComponent.cpp:90
EWeaponError
Definition: WeaponComponent.h:15
EWeaponState
Definition: WeaponInstance.h:132
EFireType
Definition: WeaponInstance.h:157
EDesignatorTeamView
Definition: WeaponInstance.h:189
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FChargeEventSignature, float, TotalTime, float, TimeElapsed)
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FWeaponActiveEvent, bool, bActive)
ECompressedFlags
Definition: WeaponInstance.h:51
EReloadType
Definition: WeaponInstance.h:165
ECoolDownTrigger
Definition: WeaponInstance.h:180
ECoolDownType
Definition: WeaponInstance.h:173
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FWeaponCancelledEvent)
EFireMode
Definition: WeaponInstance.h:147
Definition: DesignatorMarker.h:13
Definition: ProjectXCharacter.h:128
Definition: ProjectXHUD.h:20
Definition: ProjectXPlayerController.h:83
Definition: ObjectInfoInterface.h:16
Definition: ReactsToMatchEvents.h:16
Definition: ChildWeaponInstanceShotgunMortar.h:14
Definition: MeleeDashMovementComponent.h:13
Definition: WeaponInstance.h:220
virtual bool BlocksWeaponComponentWhileEquipped() const
Definition: WeaponInstance.h:463
virtual void UpdateOwningCharacter(AProjectXCharacter *NewCharacter)
Definition: WeaponInstance.h:236
virtual bool CancelsCurrentEquippedWeaponActionsWhenEquipped() const
Definition: WeaponInstance.h:464
TSubclassOf< class UAfflictionInstance > GetWeaponMovementAfflictionClass() const
Definition: WeaponInstance.h:473
ECompressedFlags GetWeaponMovementFlag() const
Definition: WeaponInstance.h:481
TArray< FWeaponAttachment > & GetMeshAttachments()
Definition: WeaponInstance.h:482
FORCEINLINE bool IsChildWeapon() const
Definition: WeaponInstance.h:310
FORCEINLINE bool IsAlmostReady() const
Definition: WeaponInstance.h:364
float GetWeaponMovementVelocity() const
Definition: WeaponInstance.h:472
virtual bool BlocksUnmanagedWeapons() const
Definition: WeaponInstance.h:465
TSubclassOf< class UAfflictionInstance > GetWeaponAffliction() const
Definition: WeaponInstance.h:475
virtual const FText & GetObjectDescription() const
Definition: WeaponInstance.h:455
FORCEINLINE FName GetSocket3P() const
Definition: WeaponInstance.h:366
FORCEINLINE FName GetSocket1P() const
Definition: WeaponInstance.h:365
virtual float GetReticleSpreadMultiplier() const
Definition: WeaponInstance.h:458
virtual bool IsManagedByWeaponComponent() const
Definition: WeaponInstance.h:462
Definition: WeaponInstanceMeleeDash.h:13
Definition: WeaponInstancePowerSword.h:18
Definition: WeaponInstance.h:198
Definition: WeaponInstance.h:117
Definition: WeaponInstance.h:81
class UPhysicalMaterial * Material
Definition: WeaponInstance.h:85
TSoftObjectPtr< class USoundBase > Sound
Definition: WeaponInstance.h:91
Definition: WeaponInstance.h:41
Definition: WeaponInstance.h:66