DRG-Femboy-Voice/Source/FSD/Public/LockOnWeapon.h
2025-04-15 12:39:31 -07:00

218 lines
8 KiB
C++
Executable file

#pragma once
#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "UObject/NoExportTypes.h"
#include "Engine/EngineTypes.h"
#include "AmmoDrivenWeapon.h"
#include "LockCounter.h"
#include "Templates/SubclassOf.h"
#include "TracerData.h"
#include "LockOnWeapon.generated.h"
class AActor;
class ALockOnBeam;
class UActorTrackingWidget;
class UDamageComponent;
class UHitscanComponent;
class UStatusEffect;
UCLASS(Abstract, Blueprintable)
class FSD_API ALockOnWeapon : public AAmmoDrivenWeapon {
GENERATED_BODY()
public:
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMaxTargetsDelegate, int32, InMaxTargets);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FLockonTargetRotationUpdated, bool, hasTargetLockon, FRotator, socketRotation);
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FLockOnRifleLockingOnState);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FLockOnCountDelegate, int32, InCurrentCount);
UPROPERTY(BlueprintAssignable, BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
FLockOnRifleLockingOnState OnLockingStarted;
UPROPERTY(BlueprintAssignable, BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
FLockOnRifleLockingOnState OnLockingStopped;
UPROPERTY(BlueprintAssignable, BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
FMaxTargetsDelegate OnMaxTargetsChanged;
UPROPERTY(BlueprintAssignable, BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
FLockOnCountDelegate OnLockOnCountChanged;
UPROPERTY(BlueprintAssignable, BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
FLockonTargetRotationUpdated OnLockonTargetRotationUpdated;
protected:
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
AActor* AimTarget;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
float LockOnDamageMultiplier;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
int32 ShotsPerTarget;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
int32 MaxTargets;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
float TimeBetweenLockedShots;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
float LockOnTime;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
float MaxLockOnDegree;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
float LoseLockOnDegree;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
float DegreeTolerance;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
float MaxLockOnRange;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
bool bPrioritizeLowHitPoint;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
bool bAlwaysHitTarget;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
float MaxLockOnDuration;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
bool bLockOnControlsSentryGun;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
bool bSentryGunShootsOnLockedShot;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
TSubclassOf<UActorTrackingWidget> TrackingWidgetClass;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
TSubclassOf<ALockOnBeam> LockOnBeamClass;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
TSubclassOf<AActor> AoeActorClass;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
int32 AoeHitCountThreshhold;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
bool UseLockOnTargetStatusEffect;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
TSubclassOf<UStatusEffect> LockOnTargetStatusEffect;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
int32 PushStatusEffectEveryXLock;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
int32 LockOnCount;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Instanced, Transient, meta=(AllowPrivateAccess=true))
UDamageComponent* DamageComponent;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Instanced, Transient, meta=(AllowPrivateAccess=true))
UHitscanComponent* HitscanComponent;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
FTracerData ChargedShotTracer;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
float ChargeSpeed;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
float SlowMovementAtCharge;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
bool FearEnabled;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
float FearFactorBase;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
float FearFactorPerShotBonus;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
float FearRange;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
float FearRangePerShotBonus;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Replicated, Transient, meta=(AllowPrivateAccess=true))
bool IsMovementSlowed;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, meta=(AllowPrivateAccess=true))
bool Charging;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Transient, meta=(AllowPrivateAccess=true))
float ChargeProgress;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Replicated, meta=(AllowPrivateAccess=true))
bool LastShotWasLockedOn;
UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true))
float LockOnRecoilMult;
public:
ALockOnWeapon();
virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
protected:
UFUNCTION(BlueprintCallable)
void UpdateRifleEye();
UFUNCTION(BlueprintCallable, BlueprintImplementableEvent)
void SetMuzzleDirection(FVector TargetLocation);
UFUNCTION(BlueprintCallable, Reliable, Server)
void Server_TriggerAoe(FVector Location);
UFUNCTION(BlueprintCallable, Reliable, Server)
void Server_SetTotalLockCount(int32 totalLockCount);
UFUNCTION(BlueprintCallable, Reliable, Server)
void Server_SetLockCount(const FLockCounter& LockCounter);
UFUNCTION(BlueprintCallable, Reliable, Server)
void Server_SetIsMovementSlowed(bool bisMovementSlowed);
UFUNCTION(BlueprintCallable, Reliable, Server)
void Server_SetIsLatestShotLockedOn(bool bisShotLockedOn);
UFUNCTION(BlueprintCallable, Reliable, Server)
void Server_SetIsChargingShot(bool bisCharging);
UFUNCTION(BlueprintCallable, Reliable, Server)
void Server_PushStatusEffect(AActor* Target);
UFUNCTION(BlueprintCallable, Reliable, Server)
void Server_PopStatusEffect(AActor* Target);
UFUNCTION(BlueprintCallable, Reliable, Server)
void Server_FiringComplete(int32 ShotsFired);
UFUNCTION(BlueprintCallable, Client, Reliable)
void RefundAmmo();
UFUNCTION(BlueprintCallable, BlueprintImplementableEvent)
void OnRep_AimTarget();
UFUNCTION(BlueprintCallable, BlueprintImplementableEvent)
void OnMovementSlowed(bool isSlowed);
UFUNCTION(BlueprintCallable)
void OnHitDeadTarget();
UFUNCTION(BlueprintCallable)
void OnHit(const FHitResult& Hit, bool alwaysPenetrate);
UFUNCTION(BlueprintCallable)
void OnAsyncFireComplete();
UFUNCTION(BlueprintCallable, BlueprintImplementableEvent)
void MuzzleLerpToTarget(FVector TargetLocation);
};