Files

47 lines
1.8 KiB
C
Raw Permalink Normal View History

2026-02-24 22:39:26 -05:00
#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);
};