LEAP Documentation 40220
Documentation for the LEAP project
PickupReviveBeacon.h
Go to the documentation of this file.
1// Copyright Blue Isle Studios Inc 2021. All Rights Reserved.
2#pragma once
3#include "CoreMinimal.h"
4#include "Deployable.h"
7#include "PickupReviveBeacon.generated.h"
8
9class APlayerController;
10class UInteractableComponent;
11class UCameraComponent;
12class USpringArmComponent;
13
14UENUM(BlueprintType)
15enum class EReviveRespawResponse : uint8
16{
17 None = 0,
18 Accepted = 1,
19 Declined = 2
20};
21
22USTRUCT(BlueprintType)
24{
25 GENERATED_USTRUCT_BODY()
26
28 {
29 ReviverPlayerState = NULL;
30 bReviveRespawnActive = false;
31 RespawnAcceptanceStatus = EReviveRespawResponse::None;
32 }
33
34 UPROPERTY()
35 TWeakObjectPtr<AProjectXPlayerState> ReviverPlayerState;
36 UPROPERTY()
37 bool bReviveRespawnActive;
38 UPROPERTY()
39 EReviveRespawResponse RespawnAcceptanceStatus;
40};
41
44DECLARE_DYNAMIC_MULTICAST_DELEGATE(FReviveStatusUpdatedSignature);
45
46UCLASS()
48{
49 GENERATED_BODY()
50
51public:
53 virtual void BeginPlay() override;
54 virtual void SetupInput(UInputComponent* InputComponent);
55 virtual void EndPlay(EEndPlayReason::Type EndplayReason) override;
56 virtual bool CanSpawnPlayer(const AProjectXPlayerState* InInstigator) const;
57 virtual bool GetSpawnLocation(AProjectXPlayerState* InInstigator, FTransform& Transform) const;
58 virtual bool CanBeInteractedWith(const UPrimitiveComponent* Component, const APlayerController* EventSender) const override;
59 virtual FText GetHighlightText(const UPrimitiveComponent* Component, const APlayerController* EventSender) const override;
60 virtual float GetHoldTimeMultiplier(const APlayerController* EventSender) const override;
61 virtual void FocusBeacon();
62 virtual void RequestHelp();
63 virtual void UpdateReviveStatus(AProjectXPlayerState* RevivingPlayerState, bool bReviveAvailable, EReviveRespawResponse RespawnResponse);
64 virtual float GetRadarIconEnemyOpacity() const override { return 0.0f; }
65 virtual float GetRadarIconOpacity() const override { return 0.5f; }
66 virtual bool GetAllyVisibilityResponse() override { return true; }
67 virtual void PromptRevivalExternal(APlayerController* Sender);
68 virtual FReviveStatus GetReviveStatus() const { return ReviveStatus;}
69 void SetReviveStartTime(float Time);
70 virtual void DeployComplete() override;
71 UFUNCTION(BlueprintCallable)
72 float GetHoverHeight() const { return HoverHeight; }
73 UFUNCTION(BlueprintCallable)
74 bool IsReviveRespawnActive() const { return ReviveStatus.bReviveRespawnActive; }
75 UFUNCTION(BlueprintCallable)
76 bool HasPlayerAcceptedRevive() const { return ReviveStatus.RespawnAcceptanceStatus == EReviveRespawResponse::Accepted; }
77 UFUNCTION(BlueprintCallable)
78 AProjectXPlayerState* const GetReviveTriggerPlayerState() const { return ReviveStatus.ReviverPlayerState.IsValid() ? ReviveStatus.ReviverPlayerState.Get() : NULL; }
79 UFUNCTION(BlueprintCallable)
80 TSubclassOf<class ULocalMessage> GetReviveBroadcastMessage() const { return ReviveBroadcastMessage; }
81 void Turn(float Value);
82 void LookUp(float Value);
83
84 UPROPERTY(BlueprintAssignable)
85 FRequestHelpSignature OnHelpRequested;
86 UPROPERTY(BlueprintAssignable)
87 FReviveAvailableSignature OnReviveStatusUpdated;
88 UPROPERTY(BlueprintAssignable)
89 FReviveStatusUpdatedSignature OnReviveStatusChanged;
90
91protected:
92 void SetDeadPlayerCanRedeploy(bool bNewDeadPlayerCanRedeploy);
93
94 UFUNCTION()
95 void OnSelected(APlayerController* Sender, UPrimitiveComponent* Component);
96 UFUNCTION()
97 void HoldStarted(APlayerController* Sender, UPrimitiveComponent* Component);
98 UFUNCTION()
99 void HoldExited(APlayerController* Sender, UPrimitiveComponent* Component);
100 UFUNCTION()
101 void OnNextRespawnTimeChanged();
102
103 UFUNCTION(BlueprintPure)
104 float GetReviveStartTime() { return ReviveStartTime; }
105
106 UFUNCTION()
107 void OnRep_ReviveRespawnActive();
108 UFUNCTION()
109 void OnRep_DeadPlayerCanRedeploy();
110 UFUNCTION()
111 void OnRep_ReviveStartTime();
112 UFUNCTION(Server,Reliable,WithValidation)
113 void Server_Reliable_RequestHelp();
114 UFUNCTION(NetMulticast,Reliable,WithValidation)
115 void MultiCast_Reliable_RequestHelp();
116
117 UFUNCTION(BlueprintImplementableEvent)
118 void OnFocusBeacon();
119 UFUNCTION(BlueprintImplementableEvent)
120 void OnHoldStarted();
121 UFUNCTION(BlueprintImplementableEvent)
122 void OnHoldExited();
123 UFUNCTION(BlueprintImplementableEvent)
124 void OnRequestHelp();
125 UFUNCTION(BlueprintImplementableEvent)
126 void OnReviveStartTimeReplicated(float InReviveStartTime);
127 UFUNCTION(BlueprintImplementableEvent)
128 void OnReviveRespawnActive();
129 UFUNCTION(BlueprintImplementableEvent)
130 void OnDeadPlayerCanRedeploy();
131
132
133
134 /* The time death was set on the server */
135 UPROPERTY(ReplicatedUsing = OnRep_ReviveStartTime)
136 float ReviveStartTime = -1.f;
137 /*Interaction Component*/
138 UPROPERTY(EditDefaultsOnly, Category = Pickup)
139 UInteractableComponent* InteractableComponent;
140 /*Root Component*/
141 UPROPERTY(EditDefaultsOnly)
142 USceneComponent* Root;
143 /* Text to display when interacting*/
144 UPROPERTY(EditDefaultsOnly, Category = Pickup)
145 FText HighlightText;
146 /*Height to hover above the ground*/
147 UPROPERTY(EditDefaultsOnly, Category = Pickup)
148 float HoverHeight;
149
150 UPROPERTY(EditDefaultsOnly, Category = Pickup)
151 TSubclassOf<class ULocalMessage> ReviveBroadcastMessage;
152
153 UPROPERTY(EditDefaultsOnly, Category = Pickup)
154 TSubclassOf<class UProjectXDamageType> ReviveDamageType;
155
156 UPROPERTY(EditAnywhere, Category = "Camera")
157 UCameraComponent* PawnCameraComponent = nullptr;
158 UPROPERTY(EditAnywhere, Category = "Camera")
159 USpringArmComponent* CameraBoom = nullptr;
160 bool bIsFocusable = true;
161 UPROPERTY(Replicated)
162 bool bCanInteract = true;
163 UPROPERTY(ReplicatedUsing = OnRep_ReviveRespawnActive)
164 FReviveStatus ReviveStatus = FReviveStatus();
165 UPROPERTY(ReplicatedUsing = OnRep_DeadPlayerCanRedeploy)
166 bool bDeadPlayerCanRedeploy = false;
167};
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FRequestHelpSignature, APickupReviveBeacon *, Beacon, AProjectXPlayerState *, PlayerState)
EReviveRespawResponse
Definition: PickupReviveBeacon.h:16
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FReviveAvailableSignature, FReviveStatus, Status)
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FReviveStatusUpdatedSignature)
Definition: Deployable.h:47
Definition: PickupReviveBeacon.h:48
virtual bool GetAllyVisibilityResponse() override
Definition: PickupReviveBeacon.h:66
virtual float GetRadarIconOpacity() const override
Definition: PickupReviveBeacon.h:65
virtual FReviveStatus GetReviveStatus() const
Definition: PickupReviveBeacon.h:68
virtual float GetRadarIconEnemyOpacity() const override
Definition: PickupReviveBeacon.h:64
Definition: ProjectXPlayerState.h:238
Definition: InteractableInterface.h:18
Definition: SpawnTargetInterface.h:18
Definition: ProjectXDamageType.h:62
Definition: PickupReviveBeacon.h:24