5#include "CoreMinimal.h"
8#include "HookshotComponent.generated.h"
11class UPrimitiveComponent;
15UCLASS(ClassGroup = (
Custom), meta = (BlueprintSpawnableComponent), Blueprintable)
16class PROJECTX_API UHookshotComponent :
public UActorComponent
18 GENERATED_UCLASS_BODY()
21 virtual
void BeginPlay() override;
22 virtual
void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
23 virtual
void TickComponent(
float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
25 virtual
void StartHookshot();
26 virtual
void StopHookshot();
27 virtual
void StartCooldown();
28 virtual
void SetHookshot(
bool bEnable,
bool bForced = false);
29 virtual
void OnCooldownFinished();
30 virtual
bool IsOnCooldown() const;
31 virtual
bool HasEnoughStartStamina() const;
32 virtual
void SetupPlayerInputComponent();
34 UFUNCTION(BlueprintPure)
35 const FVector& GetHookshotLocation()
const {
return HookshotLocation; }
36 UFUNCTION(BlueprintPure)
37 UPrimitiveComponent* GetHookedComponent()
const {
return HookedComponent.IsValid()? HookedComponent.Get() : NULL; }
40 virtual
void OnComponentHit(UPrimitiveComponent* HitComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult&
Hit);
42 UPROPERTY(BlueprintAssignable)
43 FHookshotUpdateSignature OnHookshotStart;
44 UPROPERTY(BlueprintAssignable)
45 FHookshotUpdateSignature OnHookshotStop;
46 UPROPERTY(BlueprintAssignable)
47 FHookshotUpdateSignature OnHookshotTargetAvailable;
48 UPROPERTY(BlueprintAssignable)
49 FHookshotUpdateSignature OnHookshotTargetNotAvailable;
51 bool bCanUseHookshot = false;
55 virtual
void CheckCustomMovementToggle(
ECustomMovementType CustomMovementType,
bool bToggledState);
58 UFUNCTION(
Server, Unreliable)
59 void Server_Unreliable_SetHookedLocation(const FVector HookedLocation);
61 virtual
void OnRep_HookedLocation();
65 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
66 float HookshootInitialCost = 10.0f;
68 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
69 float HookshotLength = 20000.0f;
71 UPROPERTY(EditDefaultsOnly)
72 float MinDotAllowedOnHook = 0.9f;
74 UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
75 bool bShouldHookshotResetJumpCount = false;
78 UPROPERTY(EditDefaultsOnly)
79 TArray<
float> RangeCheckFailsafes;
82 UPROPERTY(EditDefaultsOnly)
83 float CooldownInSeconds = 0.5f;
85 UPROPERTY(EditDefaultsOnly)
86 float HookshotDisengagementDistance = 100.0f;
87 bool bHookshotEnabled = false;
93 UPROPERTY(ReplicatedUsing = OnRep_HookedLocation)
94 FVector HookshotLocation = FVector::ZeroVector;
95 TWeakObjectPtr<UPrimitiveComponent> HookedComponent;
96 float HookshotDisengagementDistanceSqrd = 0.0f;
97 float CurrentMaxSpeed = 0.0f;
98 FTimerHandle CooldownTimerHandle;
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FHookshotUpdateSignature, const UHookshotComponent *, HookshotComponent)
ECustomMovementType
Definition: PlayerStructs.h:15
Definition: ProjectXCharacter.h:128