47 lines
1.8 KiB
C++
47 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "Components/ActorComponent.h"
|
|
#include "ShooterTypes/ShooterTypes.h"
|
|
#include "EliminationComponent.generated.h"
|
|
|
|
class AMatchPlayerState;
|
|
class AMatchGameState;
|
|
|
|
UCLASS(ClassGroup = (Custom), meta = (BlueprintSpawnableComponent))
|
|
class FPSTEMPLATE_API UEliminationComponent : public UActorComponent
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
UEliminationComponent();
|
|
|
|
UFUNCTION()
|
|
void OnRoundReported(AActor* Attacker, AActor* Victim, bool bHit, bool bHeadShot, bool bLethal);
|
|
|
|
protected:
|
|
virtual void BeginPlay() override;
|
|
|
|
private:
|
|
|
|
// Time frame to determine sequential elims
|
|
UPROPERTY(EditDefaultsOnly, Category = Elimination)
|
|
float SequentialElimInterval;
|
|
|
|
UPROPERTY(EditDefaultsOnly, Category = Elimination)
|
|
int32 ElimsNeededForStreak;
|
|
|
|
float LastElimTime;
|
|
int32 SequentialElims;
|
|
int32 Streak;
|
|
|
|
AMatchPlayerState* GetPlayerStateFromActor(AActor* Actor);
|
|
void ProcessHitOrMiss(bool bHit, AMatchPlayerState* AttackerPS);
|
|
void ProcessElimination(bool bHeadShot, AMatchPlayerState* AttackerPS, AMatchPlayerState* VictimPS);
|
|
void ProcessHeadshot(bool bHeadShot, ESpecialElimType& SpecialElimType, AMatchPlayerState* AttackerPS);
|
|
void ProcessSequentialEliminations(AMatchPlayerState* AttackerPS, ESpecialElimType& SpecialElimType);
|
|
void ProcessStreaks(AMatchPlayerState* AttackerPS, AMatchPlayerState* VictimPS, ESpecialElimType& SpecialElimType);
|
|
void HandleFirstBlood(AMatchGameState* GameState, ESpecialElimType& SpecialElimType, AMatchPlayerState* AttackerPS);
|
|
void UpdateLeaderStatus(AMatchGameState* GameState, ESpecialElimType& SpecialElimType, AMatchPlayerState* AttackerPS, AMatchPlayerState* VictimPS);
|
|
bool HasSpecialElimTypes(const ESpecialElimType& SpecialElimType);
|
|
}; |