5#include "CoreMinimal.h"
6#include "Components/PrimitiveComponent.h"
7#include "EBBarrel.generated.h"
12 FM_Auto
UMETA(DisplayName =
"Full Auto"),
13 FM_Semiauto
UMETA(DisplayName =
"Semiauto"),
14 FM_Burst
UMETA(DisplayName =
"Burst"),
15 FM_InterBurst
UMETA(DisplayName =
"Interruptible Burst"),
16 FM_Manual
UMETA(DisplayName =
"Manual"),
17 FM_Slamfire
UMETA(DisplayName =
"Slam Fire"),
18 FM_Gatling
UMETA(DisplayName =
"Gatling")
21UCLASS(Blueprintable, ClassGroup = (
Custom), hidecategories = (Object, LOD, Physics, Lighting, TextureStreaming,
Collision, HLOD, Mobile, VirtualTexture, ComponentReplication), editinlinenew, meta = (BlueprintSpawnableComponent))
22 class EASYBALLISTICS_API UEBBarrel :
public UPrimitiveComponent
32 virtual
void TickComponent(
float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
34 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "
Debug")
float DebugArrowSize = 100.0f;
36 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Velocity", meta = (ToolTip = "
Bullet inherits barrel velocity, only works with physics enabled or with additional velocity set"))
float InheritVelocity = 1.0f;
37 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Velocity", meta = (ToolTip = "Amount of recoil applied to the barrel, only works with physics enabled"))
float RecoilMultiplier = 1.0f;
38 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Velocity", meta = (ToolTip = "Additional velocity, for use with InheritVelocity")) FVector AdditionalVelocity = FVector(0,0,0);
40 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Weapon", meta = (ToolTip = "Additional maximum spread, in radians, applied on top of bullet spread", ClampMin = "0"))
float Spread=0.0f;
41 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Weapon", meta = (ToolTip = "Additional Spread bias, higher is more accurate on average", ClampMin = "0"))
float SpreadBias = 0.0f;
42 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Weapon", meta = (ToolTip = "Minimum of random multiplier applied to bullet muzzle velocity"))
float MuzzleVelocityMultiplierMin = 1.0f;
43 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Weapon", meta = (ToolTip = "Maximum of random multiplier applied to bullet muzzle velocity"))
float MuzzleVelocityMultiplierMax = 1.0f;
44 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Weapon", meta = (ToolTip = "Minimum fire rate, rounds per second"))
float FireRateMin = 1.0f;
45 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Weapon", meta = (ToolTip = "Maximum fire rate, rounds per second, set to same number as FireRateMin to disable randomization"))
float FireRateMax = 1.0f;
46 UPROPERTY(Replicated, BlueprintReadWrite, EditAnywhere, Category = "Weapon")
EFireMode FireMode =
EFireMode::FM_Auto;
47 UPROPERTY(Replicated, BlueprintReadWrite, EditAnywhere, Category = "Weapon")
bool ShootingBlocked;
49 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Weapon", meta = (ToolTip = "Number of rounds auto fired in burst mode"))
int BurstCount = 3;
50 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Weapon", meta = (ToolTip = "Automatically spin up gatling when trigger is being held down"))
bool GatlingAutoSpool = true;
51 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Weapon")
float GatlingSpoolUpTime = 1.0f;
52 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Weapon")
float GatlingSpoolDownTime = 1.0f;
53 UPROPERTY(BlueprintReadWrite, Category = "Weapon")
float GatlingPhase = 0.0f;
55 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Ammo")
bool CycleAmmo = true;
56 UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Ammo", meta = (EditCondition = "CycleAmmo"))
bool CycleAmmoUnlimited = true;
57 UPROPERTY(Replicated, BlueprintReadWrite, EditAnywhere, Category = "Ammo") TArray<TSubclassOf<class
AEBBullet>> Ammo;
58 UPROPERTY(Replicated, BlueprintReadWrite, EditAnywhere, Category = "Ammo", meta = (EditCondition = "CycleAmmo"))
int CycleAmmoCount;
59 UPROPERTY(Replicated, BlueprintReadWrite, EditAnywhere, Category = "Ammo", meta = (EditCondition = "CycleAmmo"))
int CycleAmmoPos;
61 UPROPERTY(Replicated, BlueprintReadWrite, Category = "WeaponState") TSubclassOf<class
AEBBullet> ChamberedBullet;
62 UPROPERTY(Replicated, BlueprintReadWrite, Category = "WeaponState")
bool Shooting;
63 UPROPERTY(Replicated, BlueprintReadWrite, Category = "WeaponState")
bool Spooling = false;
64 UPROPERTY(BlueprintReadWrite, Category = "Weapon")
float GatlingRPS = 0.0f;
66 UPROPERTY(BlueprintReadWrite, Category = "WeaponState")
bool LoadNext=true;
67 UPROPERTY(BlueprintReadWrite, Category = "WeaponState")
float Cooldown;
68 UPROPERTY(BlueprintReadWrite, Category = "WeaponState")
int BurstRemaining;
70 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Replication")
bool ReplicateVariables=true;
71 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Replication")
bool ReplicateShotFiredEvents = true;
72 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Replication")
bool ClientSideAim=false;
73 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Replication")
float ClientAimUpdateFrequency = 15.0f;
74 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Replication")
float ClientAimDistanceLimit = 200.0f;
76 FRandomStream RandomStream;
78 UFUNCTION()
void NextBullet();
79 UFUNCTION(BlueprintPure, Category = "Ammo")
int GetAmmoCount(
bool CountChambered) const;
80 UFUNCTION(BlueprintPure, Category = "Ammo") TArray<TSubclassOf<class
AEBBullet>> GetAmmo(
bool CountChambered) const;
81 UFUNCTION(BlueprintAuthorityOnly, BlueprintCallable, Category = "Ammo")
void SetAmmo(
int count,
bool UnloadChambered,
bool CancelShooting,
bool ManualCharge, const TArray<TSubclassOf<class
AEBBullet>>& NewAmmo);
82 UFUNCTION(
Server, Reliable, WithValidation, BlueprintCallable, Category = "Ammo")
void Charge();
83 UFUNCTION(
Server, Reliable, WithValidation, BlueprintCallable, Category = "Ammo")
void UnloadChambered(
bool ManualCharge);
84 UFUNCTION(
Server, Reliable, WithValidation, BlueprintCallable, Category = "Shooting")
void SwitchFireMode(
EFireMode NewFireMode);
85 UFUNCTION(
Server, Reliable, WithValidation, BlueprintCallable, Category = "Shooting")
void GatlingSpool(
bool Spool);
86 UFUNCTION(BlueprintCallable, Category = "Shooting")
void Shoot(
bool Trigger);
88 UFUNCTION(BlueprintCallable, meta = (AutoCreateRefTerm = "IgnoredActors"), Category = "
Prediction")
void PredictHit(
bool&
Hit, FHitResult& TraceResult, FVector& HitLocation,
float& HitTime, AActor*& HitActor, TArray<FVector>& Trajectory, TSubclassOf<class
AEBBullet> BulletClass, TArray<AActor*>IgnoredActors,
float MaxTime = 10.0f,
float Step = 0.1f) const;
89 UFUNCTION(BlueprintCallable, meta = (AutoCreateRefTerm = "IgnoredActors"), Category = "
Prediction")
void PredictHitFromLocation(
bool &
Hit, FHitResult& TraceResult, FVector& HitLocation,
float& HitTime, AActor*& HitActor, TArray<FVector>& Trajectory, TSubclassOf<class
AEBBullet> BulletClass, FVector StartLocation, FVector AimDirection, TArray<AActor*>IgnoredActors,
float MaxTime = 10.0f,
float Step = 0.1f) const;
90 UFUNCTION(BlueprintCallable, Category = "
Prediction")
void CalculateAimDirection(TSubclassOf<class
AEBBullet> BulletClass, FVector TargetLocation, FVector TargetVelocity, FVector& AimDirection, FVector& PredictedTargetLocation, FVector& PredictedIntersectionLocation,
float& PredictedFlightTime,
float&
Error,
float MaxTime = 10.0f,
float Step = 0.1f,
int NumIterations = 4) const;
91 UFUNCTION(BlueprintCallable, Category = "
Prediction")
void CalculateAimDirectionFromLocation(TSubclassOf<class
AEBBullet> BulletClass, FVector StartLocation, FVector TargetLocation, FVector TargetVelocity, FVector& AimDirection, FVector& PredictedTargetLocation, FVector& PredictedIntersectionLocation,
float& PredictedFlightTime,
float&
Error,
float MaxTime = 10.0f,
float Step=0.1f,
int NumIterations = 4) const;
93 UFUNCTION(BlueprintNativeEvent, Category = "Events")
void InitialBulletTransform(FVector InLocation, FVector InDirection, FVector& OutLocation, FVector& OutDirection);
94 UFUNCTION(BlueprintNativeEvent, Category = "Events")
void ApplyRecoil(UPrimitiveComponent* Component, FVector InLocation, FVector Impulse);
97 UPROPERTY(BlueprintAssignable, Category = "Events")
98 FBeforeShotFired BeforeShotFired;
101 UPROPERTY(BlueprintAssignable, Category = "Events")
102 FShotFired ShotFired;
105 UPROPERTY(BlueprintAssignable, Category = "Events")
106 FAmmoDepleted AmmoDepleted;
109 UPROPERTY(BlueprintAssignable, Category = "Events")
110 FReadyToShoot ReadyToShoot;
113 virtual FPrimitiveSceneProxy* CreateSceneProxy()
override;
117 void SpawnBullet(AActor*
Owner, FVector LocalLocation, FVector LocalAim);
119 UFUNCTION(
Server, Unreliable, WithValidation)
void ClientAim(FVector_NetQuantize NewLocation, FVector_NetQuantizeNormal NewAim);
120 UFUNCTION(
Server, Reliable, WithValidation)
void ShootRep(
bool Trigger);
121 UFUNCTION(
Server, Reliable, WithValidation)
void ShootRepCSA(
bool Trigger, FVector_NetQuantize NewLocation, FVector_NetQuantizeNormal NewAim);
123 UFUNCTION(NetMulticast, Reliable)
124 void ShotFiredMulticast();
128 bool RemoteAimReceived;
129 float TimeSinceAimUpdate;
130 bool PredictTrace(UWorld* World,
AEBBullet*
Bullet, FVector Start, FVector End, FHitResult &HitResult, TArray<AActor*> IgnoredActors)
const;
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FJumpPressedSignature)
UCLASS(Blueprintable, BlueprintType, ClassGroup=(BucciGames), meta=(BlueprintSpawnableComponent)) class CHATSYSTEM_API UChatSystemComponent
Definition ChatSystemComponent.h:13
EFireMode
Definition EBBarrel.h:11