#pragma once #include "CoreMinimal.h" #include "UObject/NoExportTypes.h" #include "Curves/CurveFloat.h" #include "SpecialAttackComponent.h" #include "SplineHookAttack.generated.h" class AActor; class UAnimMontage; class UDamageComponent; class UHitReactionComponent; class UPointLightComponent; class USkeletalMeshComponent; class USoundCue; class USplineMeshComponent; UCLASS(Blueprintable, ClassGroup=Custom, meta=(BlueprintSpawnableComponent)) class USplineHookAttack : public USpecialAttackComponent { GENERATED_BODY() public: UPROPERTY(BlueprintReadWrite, EditAnywhere, Instanced, Transient, meta=(AllowPrivateAccess=true)) USplineMeshComponent* Spline; UPROPERTY(BlueprintReadWrite, EditAnywhere, Instanced, Transient, meta=(AllowPrivateAccess=true)) USkeletalMeshComponent* HeadMesh; UPROPERTY(BlueprintReadWrite, EditAnywhere, Instanced, Transient, meta=(AllowPrivateAccess=true)) USkeletalMeshComponent* TailMesh; UPROPERTY(BlueprintReadWrite, EditAnywhere, Instanced, Transient, meta=(AllowPrivateAccess=true)) UHitReactionComponent* HitReacts; protected: UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) FRuntimeFloatCurve MovementCurve; UPROPERTY(BlueprintReadWrite, EditAnywhere, Replicated, Transient, meta=(AllowPrivateAccess=true)) TWeakObjectPtr SyncedTarget; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) FName TailSocket; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) FName HeadSocket; UPROPERTY(BlueprintReadWrite, EditAnywhere, Instanced, Transient, meta=(AllowPrivateAccess=true)) UPointLightComponent* GrabLight; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) USoundCue* GrabbedIndicationSound; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) UAnimMontage* HeadAnimation; UPROPERTY(BlueprintReadWrite, EditAnywhere, Instanced, meta=(AllowPrivateAccess=true)) UDamageComponent* Damage; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float ForwardPlacement; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float DesiredLaunchAngle; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float MaxAngledForce; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float AdjustmentStartDistance; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float AttackDuration; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float MaxAngle; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float AttackOnProgress; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float AttackDelay; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float LeadMultiplier; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) float AquireLocationTime; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) bool ShowGrabArea; UPROPERTY(BlueprintReadWrite, EditAnywhere, meta=(AllowPrivateAccess=true)) bool Lead; UPROPERTY(BlueprintReadWrite, EditAnywhere, ReplicatedUsing=OnRep_Using, meta=(AllowPrivateAccess=true)) bool Using; public: USplineHookAttack(); virtual void GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const override; protected: UFUNCTION(BlueprintCallable) void SetTailLight(UPointLightComponent* Light); UFUNCTION(BlueprintCallable) void OnRep_Using(); public: UFUNCTION(BlueprintCallable, BlueprintPure) FVector GetTargetLocation() const; UFUNCTION(BlueprintCallable, BlueprintPure) FVector GetTargetDirection() const; UFUNCTION(BlueprintCallable, BlueprintPure) bool GetHasAquiredTarget() const; };