6#include "CoreMinimal.h"
7#include "GameFramework/Actor.h"
8#include "Components/CapsuleComponent.h"
9#include "Engine/DataTable.h"
15#include "CapturePoint.generated.h"
17#define NUMBER_OF_DECAYS_UNTIL_AWARD_RESET 2
22class UAfflictionComponent;
23class UAfflictionInstance;
38 GENERATED_USTRUCT_BODY()
42 UPROPERTY(BlueprintReadWrite, Category =
"Capture")
45 UPROPERTY(BlueprintReadWrite, Category = "Capture")
47 UPROPERTY(BlueprintReadWrite, Category = "Capture")
49 UPROPERTY(BlueprintReadWrite, Category = "Capture")
50 int32 CurrentCheckPoint = 0;
51 UPROPERTY(BlueprintReadOnly, Category = "Capture")
52 int32 LastAwardedCheckPoint = -1;
53 UPROPERTY(BlueprintReadOnly, Category = "Capture")
54 int32 DecayCounter = 0;
56 UPROPERTY(BlueprintReadWrite, Category = "Capture")
57 bool bBeingTaken = false;
63 GENERATED_USTRUCT_BODY()
65 UPROPERTY(EditDefaultsOnly, Category =
"Sound")
67 UPROPERTY(EditDefaultsOnly, Category = "
Sound")
75UCLASS(BlueprintType, Blueprintable)
78 GENERATED_UCLASS_BODY()
81 virtual void BeginPlay()
override;
82 virtual void CollectPlayerStartList();
85 virtual void Tick(
float DeltaTime)
override;
87 virtual void TickCapture(
float DeltaTime);
89 virtual int32 GetActorTeam(AActor* Target)
const;
91 virtual int32
GetTeam()
const override {
return TeamOwner; }
92 virtual int32 SetTeam(int32 NewTeam)
override;
94 virtual TSoftObjectPtr<UTexture2D>
GetRadarIcon()
const override {
return RadarIcon; }
99 virtual FStopTrackingActorSignature&
GetStopTrackingEvent()
override {
return StopTrackingCapturePointEvent; }
100 UFUNCTION(BlueprintCallable, Category = CapturePoint)
101 int32 GetSortOrder()
const {
return SortOrder; }
103 UFUNCTION(BlueprintCallable, Category = CapturePoint)
104 FText GetPointName()
const {
return PointName; }
106 UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly, Category = CapturePoint)
107 virtual void SetLocked(
bool bNewLocked);
108 UFUNCTION(BlueprintCallable, Category = CapturePoint)
109 virtual
bool GetIsLocked()
const {
return bLocked; }
111 UFUNCTION(BlueprintCallable, Category = CapturePoint)
113 UFUNCTION(BlueprintCallable, Category = CapturePoint)
114 FORCEINLINE
float GetCaptureRadius()
const {
return CapsuleComponent ? CapsuleComponent->GetScaledCapsuleRadius() : -1.f; }
116 virtual void Initialize(int32 NumberOfCheckPointsOverride = INDEX_NONE,
float PerPlayerCaptureRateOverride = INDEX_NONE);
120 virtual float GetSpawnScoreForInstigator(
const AActor*
const QueryInstigator, FVector& TargetLocation,
bool bUseDistanceToTargetLocation =
false)
const override;
121 virtual bool GetSpawnLocation(
AProjectXPlayerState* Instigator, FTransform& Transform)
const override;
124 void TriggerDelayedActivation();
126 virtual AActor* GetPlayerStart(
class AController* Player)
const;
129 virtual void MatchEnded()
override;
132 UPROPERTY(BlueprintAssignable)
133 FControlPointOwnerChangedSignature OnControlPointOwnerChanged;
134 UPROPERTY(BlueprintAssignable)
135 FCaptureInfoChanged OnCaptureInfoChanged;
136 UPROPERTY(BlueprintAssignable)
137 FCapturePointLockChangedSignature OnCapturePointLockChangedEvent;
138 UPROPERTY(BlueprintAssignable)
139 FControlPointOwnerChangedSignature OnPointBeingClaimedEvent;
140 UPROPERTY(BlueprintAssignable)
141 FStopTrackingActorSignature StopTrackingCapturePointEvent;
145 void OnOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex,
bool bFromSweep, const FHitResult& SweepResult);
148 void OnOverlapEnd(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex);
151 void UpdateProcessedOccupants();
154 void CollectInitialOverlaps();
159 bool DoesOccupantHaveAnInvalidAffliction(UAfflictionComponent* AfflictionComponent);
165 void OnRep_TeamOwner();
168 void OnRep_CaptureInfo();
170 UFUNCTION(BlueprintImplementableEvent, BlueprintAuthorityOnly, Category = CapturePoint)
171 void OnPointOwnerChanged(
int LastOwner);
173 UFUNCTION(BlueprintImplementableEvent, BlueprintAuthorityOnly, Category = CapturePoint)
174 void OnCaptureComplete();
176 UFUNCTION(BlueprintImplementableEvent, Category = CapturePoint)
177 void OnCapturePointLockChanged(
bool bIsLock);
179 UFUNCTION(BlueprintCallable)
182 UFUNCTION(BlueprintCallable)
183 void ChangeCaptureProgress(
float Amount);
184 UFUNCTION(BlueprintCallable, Category = CapturePoint)
185 int32 GetTopCapturingTeam()
const
187 int32 TopTeam = INDEX_NONE;
188 if (TeamStandings.Num() >= 1)
190 TopTeam = TeamStandings[0];
198 if (TeamStandings.Num() > 1)
200 return TeamStandings[1];
207 UFUNCTION(BlueprintCallable)
208 void UpdateCheckPoint();
211 void AwardCapture(
ECaptureType Type, int32 AwardingTeam);
212 const TSubclassOf<UExperienceEvent> GetExpEventOverride(
EXPEventType Type)
const;
215 UPROPERTY(EditInstanceOnly, Category =
"Capture Point", meta = (AllowPrivateAccess =
true))
216 int32 DefaultTeam = INDEX_NONE;
218 UPROPERTY(EditDefaultsOnly, Category = "Capture Point", meta = (AllowPrivateAccess = true))
219 TSoftObjectPtr<UTexture2D> RadarIcon =
nullptr;
221 UPROPERTY(EditDefaultsOnly, Category = "Capture Point", meta = (AllowPrivateAccess = true))
222 float RadarIconOpacity = 0.3f;
224 UPROPERTY(EditDefaultsOnly, Category = "Capture Point", meta = (AllowPrivateAccess = true))
225 bool bRegisterOnBeginPlay = true;
227 UPROPERTY(EditDefaultsOnly, Category = "Capture Point", meta = (AllowPrivateAccess = true))
228 bool bIsTrackableWhenLocked = true;
230 UPROPERTY(EditDefaultsOnly, Category = "Capture Point", meta = (AllowPrivateAccess = true))
231 TSet<uint8> ValidCaptureTeams = TSet<uint8>({0,1});
233 UPROPERTY(EditDefaultsOnly, Category =
"Spawn Scoring", meta = (AllowPrivateAccess =
true))
234 float LockedScoringWeight = 0.5f;
236 UPROPERTY(EditDefaultsOnly, Category = "Spawn Scoring", meta = (AllowPrivateAccess = true))
237 float ControlPointDistanceScoringWeight = 10000.f;
238 UPROPERTY(EditInstanceOnly, Category = "Capture Point", meta = (AllowPrivateAccess = true))
239 float CaptureDecayRate = 0.05f;
241 UPROPERTY(EditInstanceOnly, Category = "Capture Point", meta = (AllowPrivateAccess = true))
242 float MaxSpawnPointSearchDistance = 10000.0f;
244 UPROPERTY(EditInstanceOnly, Category = "Capture Point", meta = (AllowPrivateAccess = true))
245 float MinSpawnPointSearchDistance = 3000.0f;
247 UPROPERTY(EditInstanceOnly, Category = "Capture Point", meta = (AllowPrivateAccess = true))
248 int32 SortOrder = INDEX_NONE;
249 UPROPERTY(EditInstanceOnly, Category = "Capture Point", meta = (AllowPrivateAccess = true))
250 UCapsuleComponent* CapsuleComponent = NULL;
251 UPROPERTY(EditInstanceOnly, Category = "Capture Point Spawns")
254 UPROPERTY(EditInstanceOnly, Category = "Capture Point", meta = (AllowPrivateAccess = true))
255 FText PointName = FText::FromString("X");
257 UPROPERTY(EditDefaultsOnly, Category = "Capture Point")
258 TArray<TSubclassOf<UAfflictionInstance>> InvalidAfflictionClasses;
260 UPROPERTY(EditDefaultsOnly)
261 bool bIgnoreTeamWhenSpawning = false;
263 UPROPERTY(EditDefaultsOnly)
264 bool bResetOnLocked = false;
266 UPROPERTY(EditDefaultsOnly)
267 float DelayActivationTime = 0.0f;
269 UPROPERTY(EditDefaultsOnly)
272 UPROPERTY(ReplicatedUsing = OnRep_Locked, EditInstanceOnly, Category = "Capture Point", meta = (AllowPrivateAccess = true))
273 bool bLocked = false;
274 UPROPERTY(ReplicatedUsing = OnRep_TeamOwner)
275 int32 TeamOwner = INDEX_NONE;
277 UPROPERTY(ReplicatedUsing = OnRep_CaptureInfo)
284 TArray<AActor*> PlayerStartList;
287 TMap<int32, int32> NumberOfOccupantsByTeam;
288 TArray<int32> TeamStandings;
289 TArray<
float>CaptureCheckPoints;
290 int32 CapturingTeam = INDEX_NONE;
291 float PerPlayerCaptureRate = 0.1f;
292 int32 NumberOfCheckPoints;
293 FTimerHandle DelayedUnlockHandle;
296 UFUNCTION(BlueprintCallable)
297 static
void GetAllControlPoints(const UObject* WorldContextObject, TArray<class
ACapturePoint*>& CapturePointList);
298 UFUNCTION(BlueprintPure)
299 static
void GetBaseControlEventTableRow(const
FBaseControlEventTableRow& TableRow, FString& AllySound, FString& EnemySound);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FControlPointOwnerChangedSignature, int32, TeamOwner, ACapturePoint *, Point)
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FCaptureInfoChanged, const FCaptureInfo &, CaptureInfo)
ECaptureType
Definition: CapturePoint.h:28
EXPEventType
Definition: PlayerStats.h:13
Definition: CapturePoint.h:77
virtual void SetRadarIconOpacity(float Opacity) override
Definition: CapturePoint.h:97
virtual float GetRadarIconSize() const
Definition: CapturePoint.h:93
virtual float GetRadarIconOpacity() const override
Definition: CapturePoint.h:95
virtual AActor * GetTrackableInterfaceActor() override
Definition: CapturePoint.h:127
int32 GetSecondCapturingTeam() const
Definition: CapturePoint.h:196
virtual int32 GetTeam() const override
Definition: CapturePoint.h:91
virtual const FText & GetRadarLabel() const
Definition: CapturePoint.h:96
virtual TSoftObjectPtr< UTexture2D > GetRadarIcon() const override
Definition: CapturePoint.h:94
virtual bool RegisterOnStart() const override
Definition: CapturePoint.h:98
virtual FStopTrackingActorSignature & GetStopTrackingEvent() override
Definition: CapturePoint.h:99
void SetCaptureInfo(int32 &NumberOfPlayers, int32 &Direction)
Definition: ProjectXCharacter.h:128
Definition: ProjectXGameModeBaseControl.h:14
Definition: ProjectXPlayerState.h:238
Definition: ProjectXVehicle.h:56
Definition: StartPointVolume.h:14
Definition: ReactsToMatchEvents.h:16
Definition: SpawnTargetInterface.h:18
Definition: TeamInterface.h:26
Definition: TrackableInterface.h:22
Definition: ExperienceEvent.h:18
class USoundBase * Sound
Definition: ExperienceEvent.h:46
Definition: CapturePoint.h:62
Definition: CapturePoint.h:37