121 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category =
"Weapon")
122 bool bIsReloading = false;
123 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Weapon")
124 bool bFiringWeapon = false;
125 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Weapon")
126 bool bIsHolstered = false;
127 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Weapon")
128 bool bIsAiming = false;
129 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Weapon")
130 bool bHasGun = false;
131 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Weapon")
132 bool bIsWeaponInAutoMode = false;
133 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Weapon")
134 bool bIsWeaponInBurstMode = false;
135 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Weapon")
136 bool bIsWeaponInSingleMode = false;
137 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Weapon")
138 bool bIsWeaponInChargeMode = false;
140 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Weapon")
141 bool bIsCrouching = false;
276 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category =
"Details")
277 FString ProjectileID = "DefaultWeapon";
279 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Size")
280 float CapsuleHalfHeight = 8.0f;
281 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Size")
282 float CapsuleRadius = 8.0f;
285 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="VFX")
286 class UNiagaraSystem* ImpactEffects =
nullptr;
287 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="VFX")
288 class UNiagaraSystem* TrailEffects =
nullptr;
289 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="VFX")
290 class USoundBase* ImpactSound =
nullptr;
291 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="VFX")
292 class USoundBase* ProjectileSound =
nullptr;
295 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="
Damage")
296 bool bDealsDamage = true;
297 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="
Damage")
298 TSubclassOf<UDamageType> DamageType = UDamageType::StaticClass();
300 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="
Damage", meta=(EditCondition="bDealsDamage"))
301 float DamageInnerRadius = 150.0f;
303 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="
Damage", meta=(EditCondition="bDealsDamage"))
304 float DamageOuterRadius = 450.0f;
306 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="
Damage", meta=(EditCondition="bDealsDamage"))
307 float DamageFalloff = 0.0f;
309 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Radial Force")
310 bool bDealsImpulse = true;
311 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Radial Force", meta=(EditCondition="bDealsImpulse"))
312 float RadialForceStrength = 500.0f;
313 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Radial Force", meta=(EditCondition="bDealsImpulse"))
314 bool bImpulseFalloffLinear = true;
315 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Radial Force", meta=(EditCondition="bDealsImpulse"))
316 float ImpulseMultiplier = 1.0f;
317 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Radial Force", meta=(EditCondition="bDealsImpulse"))
318 float ImpulseMax = 1000.0f;
319 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Radial Force", meta=(EditCondition="bDealsImpulse"))
320 float CharacterExplosionClampMax = 3500.0f;
321 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Radial Force", meta=(EditCondition="bDealsImpulse"))
322 float CharacterExplosionClampMaxOutput = 1.0f;
323 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Radial Force", meta=(EditCondition="bDealsImpulse"))
324 float CharacterExplosionClampMinOutput = 0.5f;
326 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Homing")
327 bool bHasHoming = false;
328 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Homing", meta=(EditCondition="bHasHoming"))
329 float InitialLockOnDelay = 3.0f;
330 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Homing", meta=(EditCondition="bHasHoming"))
331 float LockOnTime = 3.0f;
333 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="
Damage")
334 bool bIgnoreOwner = true;
335 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="
Damage")
336 bool bHideMeshOnHit = true;
339 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Delay")
340 bool bDelayedTrigger = false;
341 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Delay", meta= (EditCondition=bDelayedTrigger))
342 float TriggerDelay = 2.0f;
346 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Speed")
347 float InitialSpeed = 2.0f;
348 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Speed")
349 bool bRotationFollowsVelocity = true;
350 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Bounce")
351 bool bShouldBounce = false;
352 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Bounce")
353 float Bounciness = 0.2f;
354 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Bounce")
355 float Friction = 0.6f;
356 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Speed")
357 float GravityScale = 1.0f;
358 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Speed")
359 FVector Velocity = FVector(0.0f, 0.0f, 0.0f);
362 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Speed")
363 bool bSticky = false;
365 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Lifetime")
366 bool bDestroyAfterHit = true;
367 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Lifetime")
368 float DestroyDelay = 2.0f;
370 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Visual")
371 class UStaticMesh* StaticMesh =
nullptr;
372 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Visual")
373 FRotator RotationOffset = FRotator::ZeroRotator;
379 return EmptyWeaponProjectile;
389 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=
"Feedback")
390 UForceFeedbackEffect* SingleFireControllerFeedback =
nullptr;
391 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Feedback")
392 UForceFeedbackEffect* AutoFireControllerFeedback =
nullptr;
393 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Feedback")
394 UForceFeedbackEffect* BurstFireControllerFeedback =
nullptr;
395 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Feedback")
396 UForceFeedbackEffect* ChargeFireControllerFeedback =
nullptr;
398 UPROPERTY(EditAnywhere,BlueprintReadWrite, Category="VFX")
399 class UNiagaraSystem* MuzzleFlashParticleSystem =
nullptr;
400 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="VFX")
401 class UNiagaraSystem* TracerParticleSystem =
nullptr;
403 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Sounds")
404 class USoundBase* WeaponSound =
nullptr;
405 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Sounds")
406 class USoundBase* WeaponSilencedSound =
nullptr;
407 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Sounds")
408 class USoundBase* WeaponDryFireSound =
nullptr;
409 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Sounds")
410 float WeaponSoundVolume = 1.0f;
412 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Camera Shake")
413 TSubclassOf<UCameraShakeBase> CameraShake =
nullptr;
414 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Camera Shake")
415 float CameraShakeBaseScale = 1.0f;
417 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Weapon|Effects|Camera Shake")
418 float CameraShakeMaxAccuracyMultiplier = 0.5f;
420 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Weapon|Effects|Camera Shake")
421 float CameraShakeMinAccuracyMultiplier = 2.0f;
427 return EmptyWeaponEffects;
436 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category =
"Details")
437 bool bSilencer = false;
438 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "
Damage")
439 bool bDamageTypeModifier = false;
440 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "
Damage")
441 TSubclassOf<class UDamageType> DamageType = UDamageType::StaticClass();
442 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Auto")
443 bool bAddAutoMode = false;
444 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Auto")
445 bool bAddBurstMode = false;
447 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Ammo")
448 bool bModifyAmmo = false;
449 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Ammo", meta=(EditCondition=bModifyAmmo))
451 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Ammo", meta=(EditCondition=bModifyAmmo))
457 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Spread")
458 bool bModifySpread = false;
459 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Spread", meta=(EditCondition=bModifySpread))
460 float BulletSpread = 0.0f;
461 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Spread", meta=(EditCondition=bModifySpread))
462 float GunRange = 0.0f;
463 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Spread", meta=(EditCondition=bModifySpread))
464 float WeaponRangeMin = 0.0f;
465 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Spread", meta=(EditCondition=bModifySpread))
466 float WeaponRangeMax = 0.0f;
467 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Spread", meta=(EditCondition=bModifySpread))
470 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "
Damage")
471 bool bModifyDamage = false;
473 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "
Damage", meta=(EditCondition=bModifyDamage))
474 float DefaultDamage = 20.0f;
475 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "
Damage", meta=(EditCondition=bModifyDamage))
476 float MaxDamageMultiplier = 5.0f;
477 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "
Damage", meta=(EditCondition=bModifyDamage))
478 float MinDamageMultiplier = 0.5f;
483 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "FireRate")
484 bool bModifyFireRate = false;
485 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "FireRate", meta=(EditCondition=bModifyFireRate))
486 float BurstCooldown = 0.2f;
487 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "FireRate", meta=(EditCondition=bModifyFireRate))
488 float FireRate = 100.0f;
489 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "FireRate", meta=(EditCondition=bModifyFireRate))
490 float ReloadTime = 1.0f;
626 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category =
"Details")
627 FString WeaponID = "DefaultWeapon";
628 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Details")
630 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Details")
632 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Details")
634 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Details")
635 bool bNonLethal = false;
636 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Details")
637 bool bSilenced = false;
638 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Details")
639 bool bMeleeWeapon = false;
640 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="
Melee", meta=(EditCondition="bMeleeWeapon"))
643 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Details")
644 FName FlashLightSocketName = "LightSource";
646 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Details")
648 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Attachments")
649 int32 MaxAttachmentsAvailable = 1;
650 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Attachments")
653 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Ammo")
655 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Ammo")
658 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Recoil")
661 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Recoil")
662 float RecoilAnimRate = 650.0f;
663 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Recoil")
664 int32 RecoilBursts = 0;
666 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Recoil")
668 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Recoil")
669 UCurveVector* RecoilCurve =
nullptr;
672 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Spread")
673 float BulletSpread = 2000.0f;
675 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Spread")
676 float GunRange = 200000.0f;
678 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Spread")
679 float WeaponRangeMin = 500.0f;
681 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Spread")
682 float WeaponRangeMax = 3500.0f;
684 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Spread")
685 float MaxDamageMultiplier = 5.0f;
687 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Spread")
688 float MinDamageMultiplier = 0.5f;
691 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "
Reload")
692 float ReloadTime = 1.0f;
694 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "
Damage")
695 float DefaultDamage = 20.0f;
696 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "
Damage")
697 TSubclassOf<class UDamageType> DamageType = UDamageType::StaticClass();
699 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Auto")
700 bool bHasAutoMode = false;
702 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Auto")
703 bool bHasBurstMode = false;
704 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Auto", meta=(EditCondition=bHasBurstMode))
705 int32 BurstRounds = 3;
706 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Auto", meta=(EditCondition=bHasBurstMode))
707 float BurstCooldown = 0.2f;
709 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Auto", meta = (ClampMin = "4", ClampMax = "10000", UIMin = "4", UIMax = "10000"))
710 float FireRate = 100.0f;
712 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Auto")
713 bool bMultiFire = false;
714 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Auto", meta=(EditCondition=bMultiFire))
715 int32 MultiFireRounds = 3;
717 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Offset")
718 FVector WeaponOffset = FVector::ZeroVector;
719 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Offset")
720 FRotator RotationOffset= FRotator::ZeroRotator;
721 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Offset")
722 bool bIsLeftHand = false;
723 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Offset")
724 FVector MuzzleOffset = FVector::ZeroVector;
725 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Offset")
726 FRotator MuzzleRotation = FRotator::ZeroRotator;
727 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Offset")
728 FVector MuzzleFlashOffset = FVector::ZeroVector;
729 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Offset")
730 FVector RecoilOffset = FVector::ZeroVector;
731 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Offset")
732 FRotator RecoilRotation = FRotator::ZeroRotator;
735 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Visual")
736 class UTexture2D* WeaponThumbnail =
nullptr;
737 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Visual")
739 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Visual")
740 class USkeletalMesh* MeshForPickup =
nullptr;
741 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Visual")
744 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Projecile", meta=(EditCondition="WeaponType==
EWeaponType::
Projectile"))
746 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Projecile")
747 FRotator ProjectileRotationOffset = FRotator::ZeroRotator;
749 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Effects")
750 FString WeaponEffectsID = "DefaultEffects";
754 return WeaponID ==
Other.WeaponID;
758 return WeaponID !=
Other.WeaponID;
769 return EmptyWeaponStats;
775 for(
const auto& ID : AttachmentsCompatibility.IDBlackList)
777 if(ID == AttachmentID)
783 for(
const auto& AvailableType : AttachmentsCompatibility.AvailableAttachmentTypes)
785 if(AttachmentType == AvailableType)
795 for(
const auto Modifier: Modifiers)
797 if(Modifier.bSilencer)
801 if(Modifier.bDamageTypeModifier)
805 if(Modifier.bAddAutoMode)
809 if(Modifier.bAddBurstMode)
811 bHasBurstMode =
true;
813 if(Modifier.bModifyAmmo)
815 MaxAmmo += Modifier.MaxAmmo;
816 ClipSize += Modifier.ClipSize;
818 if(Modifier.bModifySpread)
820 BulletSpread += Modifier.BulletSpread;
821 GunRange += Modifier.GunRange;
822 WeaponRangeMin += Modifier.WeaponRangeMin;
823 WeaponRangeMax += Modifier.WeaponRangeMax;
824 Recoil += Modifier.Recoil;
826 if(Modifier.bModifyFireRate)
828 ReloadTime += Modifier.ReloadTime;
829 BurstCooldown += Modifier.BurstCooldown;
830 FireRate += Modifier.FireRate;
832 if(Modifier.bModifyDamage)
834 DefaultDamage += Modifier.DefaultDamage;
835 MaxDamageMultiplier += Modifier.MaxDamageMultiplier;
836 MinDamageMultiplier += Modifier.MinDamageMultiplier;
844 if(MeshForPickup ==
nullptr){
return false;}
845 if(WeaponID ==
"DefaultWeapon"){
return false;}
865 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category =
"Weapon")
866 FString WeaponID = "DefaultWeapon";
869 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Auto")
872 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Auto")
873 float TriggerSpamTimeRemaining = 0.0f;
875 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "
Reload")
876 bool bShouldAutoReload = false;
879 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Ammo")
880 int32 CurrentAmmo = 0;
882 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Ammo")
883 int32 TotalAmmoCount = 0;
886 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Attachments")
887 TArray<FString> CurrentWeaponAttachments;
899 if(WeaponID ==
"DefaultWeapon"){
return false;}
906 return EmptyWeaponData;
922 if(!CurrentWeaponAttachments.Contains(AttachmentID))
924 CurrentWeaponAttachments.Add(AttachmentID);
930 int32
AddAmmo(
const int32 AmountToAdd,
const int32 MaxAmmo)
933 if(TotalAmmoCount >= MaxAmmo)
938 if((TotalAmmoCount + AmountToAdd) <= MaxAmmo)
940 TotalAmmoCount += AmountToAdd;
944 if((TotalAmmoCount + AmountToAdd) > MaxAmmo)
946 TotalAmmoCount = MaxAmmo;
947 const int32 Remainder = (TotalAmmoCount + AmountToAdd) - MaxAmmo;
971 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category =
"Offsets")
972 FVector WeaponOffset = FVector::ZeroVector;
973 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Offsets")
974 FRotator RotationOffset = FRotator::ZeroRotator;