LEAP Documentation 40220
Documentation for the LEAP project
FlagSpawn.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 "GameFramework/Actor.h"
8#include "TeamInterface.h"
10#include "TrackableInterface.h"
11#include "FlagSpawn.generated.h"
12
13class AFlag;
16class USphereComponent;
17class UAfflictionInstance;
18
19DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FFlagSpawnEventSignature, AFlag*, Flag,bool, bNewFlag);
20DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FFlagCarrierEventSignature,AFlag*, Flag, AProjectXCharacter*, Character, int32, Team);
21DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FFlagStateUpdatedEventSignature, bool, bFlagIsHome);
22
23UENUM()
24enum class EFlagSpawnBehaviour : uint8
25{
26 CaptureOnly = 0,
27 SpawnOnly = 1,
28 Both = 2,
29};
30
31UCLASS()
32class PROJECTX_API AFlagSpawn : public AActor, public IReactsToMatchEvents, public ITeamInterface, public ISpawnTargetInterface, public ITrackableInterface
33{
34 GENERATED_UCLASS_BODY()
35
36 AFlagSpawn();
37
38public:
39 FORCEINLINE virtual int32 GetTeam() const override { return Team; }
40 virtual int32 SetTeam(int32 NewTeam) override {Team = NewTeam; return Team;}
41 UFUNCTION(BlueprintCallable)
42 AFlag* GetFlag() const { return Flag; }
43 UFUNCTION(BlueprintCallable)
44 bool IsFlagHome() const { return bFlagIsHome; }
45 UFUNCTION()
46 void ResetFlag(AFlag* FlagReset, AProjectXCharacter* Character, int32 FlagTeam);
47 void UpdateBehaviour(EFlagSpawnBehaviour NewSpawnBehaviour){ FlagBehaviour = NewSpawnBehaviour;}
48 virtual bool CanSpawnPlayer(const AProjectXPlayerState* Instigator) const override;
49 virtual float GetSpawnScoreForInstigator(const AActor* const QueryInstigator, FVector& TargetLocation, bool bUseDistanceToTargetLocation = false) const override;
50
51 virtual TSoftObjectPtr<UTexture2D> GetRadarIcon() const override { return RadarIcon; }
52 virtual float GetRadarIconOpacity() const { return RadarIconOpacity; }
53 virtual void SetRadarIconOpacity(float Opacity) override { RadarIconOpacity = Opacity; }
54 virtual bool CanFlagBeCaptured() const;
55 virtual bool CanFlagBeSpawned() const;
56
57 UPROPERTY(BlueprintAssignable)
58 FFlagSpawnEventSignature OnFlagUpdatedEvent;
59 UPROPERTY(BlueprintAssignable)
60 FFlagCarrierEventSignature OnFlagCapturedEvent;
61 UPROPERTY(BlueprintAssignable)
62 FFlagStateUpdatedEventSignature OnFlagStateUpdatedEvent;
63
64protected:
65 virtual void BeginPlay() override;
66 virtual void CollectPlayerStartList();
67 AFlag* SpawnFlag();
68 virtual bool GetSpawnLocation(AProjectXPlayerState* Instigator, FTransform& Transform) const override;
69 virtual AActor* GetPlayerStart(class AController* Player) const;
70 virtual AActor* GetTrackableInterfaceActor() override { return this; }
71
72 UFUNCTION(BlueprintImplementableEvent)
73 void OnFlagReset();
74 UFUNCTION()
75 virtual void OnFlagPickedUp(AFlag* FlagPickedUp, AProjectXCharacter* Character, int32 FlagTeam);
76 UFUNCTION()
77 void OnRep_Flag();
78 UFUNCTION()
79 void OnRep_FlagState();
80 UFUNCTION()
81 virtual void OnOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);
82
83 UFUNCTION(NetMulticast, Unreliable)
84 void Multicast_OnFlagCaptured();
85 UFUNCTION(BlueprintImplementableEvent)
86 void OnFlagCaptured();
87
88 UPROPERTY()
89 TArray<AActor*> PlayerStartList;
90
91 UPROPERTY(ReplicatedUsing = OnRep_FlagState)
92 bool bFlagIsHome = false;
93 UPROPERTY(ReplicatedUsing = OnRep_Flag)
94 AFlag* Flag;
95
96 /* The icon used for the flag spawn on the radar*/
97 UPROPERTY(EditDefaultsOnly, Category = "Capture Point", meta = (AllowPrivateAccess = true))
98 TSoftObjectPtr<UTexture2D> RadarIcon = nullptr;
99 /* Use this to make the radar icon semi-transparent */
100 UPROPERTY(EditDefaultsOnly, Category = "Capture Point", meta = (AllowPrivateAccess = true))
101 float RadarIconOpacity = 0.3f;
102 /* The maximum distance considered for awarding a score increment, every distance bigger than this value will award 0 score. Value needs to be > 0*/
103 UPROPERTY(EditDefaultsOnly, Category = "Spawn Scoring", meta = (AllowPrivateAccess = true))
104 float FlagSpawnDistanceScoringWeight = 10000.f;
105
106 /*Class for the flag that is used*/
107 UPROPERTY(EditDefaultsOnly)
108 TSubclassOf<AFlag> FlagClass;
109 /*Volumes for player spawns*/
110 UPROPERTY(EditInstanceOnly, Category = "Capture Point Spawns")
111 TArray<class AStartPointVolume*> StartPointVolumes;
112 /* Team that controls the point*/
113 UPROPERTY(EditInstanceOnly, Category = FlagSpawn)
114 int32 Team = MAX_uint8;
115 /* Sphere used to check if you scored*/
116 UPROPERTY(EditDefaultsOnly)
117 USphereComponent* Sphere;
118 /*does the flag respawn if its captured*/
119 UPROPERTY(EditDefaultsOnly)
120 bool bDoesFlagResetIfCaptured = true;
121 /*does the flag have to be present inorder to capture the opponents*/
122 UPROPERTY(EditDefaultsOnly)
123 bool bCanFlagBeCapturedWhenNotHome = false;
124 /*Flags Behaviour*/
125 UPROPERTY(EditDefaultsOnly)
127};
DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(FFlagCarrierEventSignature, AFlag *, Flag, AProjectXCharacter *, Character, int32, Team)
EFlagSpawnBehaviour
Definition: FlagSpawn.h:25
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FFlagStateUpdatedEventSignature, bool, bFlagIsHome)
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FFlagSpawnEventSignature, AFlag *, Flag, bool, bNewFlag)
Definition: Flag.h:43
Definition: FlagSpawn.h:33
virtual float GetRadarIconOpacity() const
Definition: FlagSpawn.h:52
virtual FORCEINLINE int32 GetTeam() const override
Definition: FlagSpawn.h:39
virtual void SetRadarIconOpacity(float Opacity) override
Definition: FlagSpawn.h:53
virtual int32 SetTeam(int32 NewTeam) override
Definition: FlagSpawn.h:40
virtual TSoftObjectPtr< UTexture2D > GetRadarIcon() const override
Definition: FlagSpawn.h:51
Definition: ProjectXCharacter.h:128
Definition: ProjectXPlayerState.h:238
Definition: StartPointVolume.h:14
Definition: ReactsToMatchEvents.h:16
Definition: SpawnTargetInterface.h:18
Definition: TeamInterface.h:26
Definition: TrackableInterface.h:22