#pragma once #include "CoreMinimal.h" #include "AmmoDrivenWeapon.h" #include "BoltActionWeaponFullyFocusedDelegateDelegate.h" #include "Templates/SubclassOf.h" #include "TracerData.h" #include "BoltActionWeapon.generated.h" class AActor; class UDamageComponent; class UFSDPhysicalMaterial; class UHealthComponentBase; class UHitscanBaseComponent; class UParticleSystem; class UPrimitiveComponent; class USoundCue; class UStatusEffect; UCLASS(Abstract, Blueprintable) class ABoltActionWeapon : public AAmmoDrivenWeapon { GENERATED_BODY() public: UPROPERTY(BlueprintAssignable, BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) FBoltActionWeaponFullyFocusedDelegate FullyFocusedEvent; UPROPERTY(BlueprintAssignable, BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) FBoltActionWeaponFullyFocusedDelegate FocusLostEvent; protected: UPROPERTY(BlueprintReadWrite, EditAnywhere, Instanced, Transient, meta=(AllowPrivateAccess=true)) UDamageComponent* DamageComponent; UPROPERTY(BlueprintReadWrite, EditAnywhere, Instanced, Transient, meta=(AllowPrivateAccess=true)) UHitscanBaseComponent* HitscanComponent; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) TSubclassOf FocusedHitSTE; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) bool RequireWeakspotForFocusedHitSTE; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) bool IsNoGravityOnFocusEnabled; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float NoGravityOnFocusDuration; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float NoGravityFocusFallFriction; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float NoGravityFocusGravityScale; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float ZoomSpreadAmount; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float ZoomMinSpreadWhileMoving; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float ChargeSpeed; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float ChargeAmmoCost; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float ChargeRecoilMult; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) USoundCue* ZoomedInAudio; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) UParticleSystem* ChargedShotTrailParticles; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) FTracerData ChargedShotTracer; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) USoundCue* ButtonDownFireSound; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) USoundCue* ChargedShotFireSound; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float ChargedFoVChange; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float ChargedFoVFadeSpeed; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float MinCharge; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float SlowMovementAtCharge; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float FullChargeDamageBonus; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float AimedShotStaggerChance; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float AimedShotWeakpointDamageBonusMultiplier; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float AimedWeakspotKilLRange; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float TargetKilledReloadTimeBoost; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float TargetKilledReloadTimeBoostDuration; UPROPERTY(BlueprintReadWrite, EditAnywhere, Replicated, meta=(AllowPrivateAccess=true)) bool LastShotWasAimed; UPROPERTY(BlueprintReadWrite, EditAnywhere, Replicated, Transient, meta=(AllowPrivateAccess=true)) bool IsMovementSlowed; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) bool ChargeAffectsDamage; UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, meta=(AllowPrivateAccess=true)) bool Charging; UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, meta=(AllowPrivateAccess=true)) float ChargeProgress; public: ABoltActionWeapon(); virtual void GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const override; protected: UFUNCTION(BlueprintCallable) void SetOverheated(bool isOverheated); UFUNCTION(BlueprintCallable, Reliable, Server) void Server_SetIsMovementSlowed(bool bisMovementSlowed); UFUNCTION(BlueprintCallable, Reliable, Server) void Server_SetIsLatestShotFocused(bool bisShotFocused); UFUNCTION(BlueprintCallable, Reliable, Server) void Server_SetIsChargingShot(bool bisCharging); UFUNCTION(BlueprintCallable) void OnTimerElapsed(); UFUNCTION(BlueprintCallable) void OnTargetKilled(AActor* Target, UFSDPhysicalMaterial* PhysicalMaterial, bool wasDirectHit); UFUNCTION(BlueprintCallable) void OnTargetDamaged(UHealthComponentBase* Health, float Amount, UPrimitiveComponent* HitComponent, UFSDPhysicalMaterial* PhysicalMaterial); UFUNCTION(BlueprintCallable) void OnShotPowerSet(); UFUNCTION(BlueprintCallable, BlueprintImplementableEvent) void OnMovementSlowed(bool isSlowed); UFUNCTION(BlueprintCallable, Client, Reliable) void Client_OnTargetKilled(bool BoostReloadTime); };