LEAP Documentation 40220
Documentation for the LEAP project
Flag.h
Go to the documentation of this file.
1// Copyright Blue Isle Studios Inc 2018. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "TeamInterface.h"
8#include "Flag.generated.h"
9
10class UAfflictionInstance;
12class UCapsuleComponent;
14class USphereComponent;
15
16UENUM(BlueprintType)
17enum class EFlagState : uint8
18{
19 HOME,
20 CARRIED,
21 DROPPED,
22 NONE,
23};
24
25USTRUCT(BlueprintType)
27{
28 GENERATED_USTRUCT_BODY()
29
30 UPROPERTY(BlueprintReadWrite)
32 UPROPERTY(BlueprintReadWrite)
33 TWeakObjectPtr<AProjectXCharacter> CurrentCarrier = NULL;
34 UPROPERTY()
35 TWeakObjectPtr<AProjectXCharacter> PreviousCarrier = NULL;
36};
37
38DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FFlagEventSignature,AFlag*, Flag, AProjectXCharacter*, Character, int32, Team);
40
41UCLASS()
42class PROJECTX_API AFlag : public AActor, public ITeamInterface, public ITrackableInterface
43{
44 GENERATED_UCLASS_BODY()
45 AFlag();
46
47public:
48 virtual int32 GetTeam() const override { return Team; }
49 UFUNCTION(BlueprintCallable)
50 AProjectXCharacter* GetCharacter() const;
51 UFUNCTION(BlueprintCallable)
52 FORCEINLINE FFlagInfo GetFlagInfo() const { return FlagInfo; }
53 UFUNCTION(BlueprintCallable)
54 FORCEINLINE float GetPickupRadius() const { return PickupRadius; }
55 UFUNCTION(BlueprintCallable)
56 FORCEINLINE UCapsuleComponent* GetCapsuleComponent() const { return CapsuleComponent; }
57 UFUNCTION(BlueprintCallable)
58 FORCEINLINE TSubclassOf<UAfflictionInstance> GetFlagCarrierAffliction() const { return FlagCarrierAfflictionInstance; }
59 UFUNCTION(BlueprintCallable)
60 FORCEINLINE bool CanBePickedUp() const { return bCanBePickedUp; }
61 virtual bool GetAllyVisibilityResponse() override { return true; }
62
63 virtual TSoftObjectPtr<UTexture2D> GetRadarIcon() const override { return RadarIcon; }
64 virtual float GetRadarIconOpacity() const { return RadarIconOpacity; }
65 virtual void SetRadarIconOpacity(float Opacity) override { RadarIconOpacity = Opacity; }
66
67 UPROPERTY(BlueprintAssignable)
68 FFlagEventSignature OnFlagPickedUp;
69 UPROPERTY(BlueprintAssignable)
70 FFlagEventSignature OnFlagReturned;
71 UPROPERTY(BlueprintAssignable)
72 FFlagEventSignature OnFlagCaptured;
73 UPROPERTY(BlueprintAssignable)
74 FFlagEventSignature OnFlagDropped;
75 UPROPERTY(BlueprintAssignable)
76 FFlagStateSignature OnFlagStateUpdated;
77 UPROPERTY(BlueprintAssignable)
78 FFlagEventSignature OnCarrierCharacterUpdatedEvent;
79
80 void UpdateFlagState(EFlagState NewFlagState);
81 void UpdateFlagCarrier(AProjectXCharacter* NewFlagCarrier);
82 void ReturnFlag();
83 void FlagCaptured();
84 virtual int32 SetTeam(int32 NewTeam) override { Team = NewTeam; return Team; }
85
86protected:
87 virtual void Tick(float DeltaSeconds) override;
88 virtual bool ItemPickedUp(AActor* PickingUpActor);
89
90 void DropFlag();
91 bool CheckForFlagPickups();
92 void UpdateCanBePickedUp(bool bNewPickupableState) { bCanBePickedUp = bNewPickupableState; }
93
94 UFUNCTION(BlueprintImplementableEvent)
95 void FlagStatUpdated();
96 UFUNCTION(BlueprintImplementableEvent)
97 void FlagPickupUpdated();
98
99 UFUNCTION()
100 virtual void OnOverlap(UPrimitiveComponent* OverlapComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
101 UFUNCTION()
102 void CarrierDied(AActor* Victim, const float Damage, struct FDamageEvent const& DamageEvent, const class AController* EventInstigator, const AActor* DamageCauser, const APlayerState* InstigatorPlayerState);
103 UFUNCTION()
104 void OnCarrierEnterSoftBoundary(AActor* Actor, ASoftBoundaryVolume* TargetSoftBoundaryVolume);
105 UFUNCTION()
106 void FlagAfflictionEnded();
107
108 UFUNCTION()
109 void OnRep_CanBePickedUp();
110 UFUNCTION()
111 void OnRep_FlagInfo();
112
113 UPROPERTY(EditDefaultsOnly, Category = "Flag")
114 TSoftObjectPtr<UTexture2D> RadarIcon = nullptr;
115 UPROPERTY(EditDefaultsOnly, Category = "Flag")
116 float RadarIconOpacity = 0.3f;
117 UPROPERTY(EditDefaultsOnly, Category = "Flag")
118 float RadarIconOpacityWhenCarried = 0.0f;
119 UPROPERTY(EditDefaultsOnly, Category = "Flag")
120 float RadarIconOpacityWhenDropped = 1.0f;
121
122 UPROPERTY(ReplicatedUsing = OnRep_FlagInfo)
123 FFlagInfo FlagInfo;
124 UPROPERTY(Replicated)
125 int32 Team = -1;
126 UPROPERTY(Replicated)
127 bool bCanBePickedUp = true;
128 /*From How Far can you pickup the flag*/
129 UPROPERTY(EditDefaultsOnly)
130 float PickupRadius = 200.0f;
131 /* Collision Component of the flag*/
132 UPROPERTY(EditDefaultsOnly)
133 UCapsuleComponent* CapsuleComponent;
134 /*Affliction Applied to the carrier of the flag*/
135 UPROPERTY(EditDefaultsOnly)
136 TSubclassOf<UAfflictionInstance> FlagCarrierAfflictionInstance;
137 /* How long after the flag is dropped before it can be picked up again*/
138 UPROPERTY(EditDefaultsOnly)
139 float PickupDelay = 1.0f;
140 /*Does the flag return home when captured*/
141 UPROPERTY(EditDefaultsOnly)
142 bool bDoesFlagResetOnCapture = true;
143 /* List of actors that can trigger resets on overlaps*/
144 UPROPERTY(EditDefaultsOnly)
145 TArray<TSubclassOf<AActor>> ActorClassesToTriggerReset;
146 /* Sphere used for collision between players*/
147 UPROPERTY(EditDefaultsOnly)
148 USphereComponent* Sphere;
149 FTimerHandle PickUpDelayTimer;
150};
DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FFlagEventSignature, AFlag *, Flag, AProjectXCharacter *, Character, int32, Team)
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FFlagStateSignature, const FFlagInfo &, Info)
EFlagState
Definition: Flag.h:18
Definition: Flag.h:43
virtual TSoftObjectPtr< UTexture2D > GetRadarIcon() const override
Definition: Flag.h:63
virtual int32 GetTeam() const override
Definition: Flag.h:48
void UpdateCanBePickedUp(bool bNewPickupableState)
Definition: Flag.h:92
virtual float GetRadarIconOpacity() const
Definition: Flag.h:64
virtual bool GetAllyVisibilityResponse() override
Definition: Flag.h:61
virtual void SetRadarIconOpacity(float Opacity) override
Definition: Flag.h:65
Definition: ProjectXCharacter.h:128
Definition: SoftBoundaryVolume.h:19
Definition: TeamInterface.h:26
Definition: TrackableInterface.h:22
Definition: Flag.h:27