Files
DedicatedServerCourse/Source/FPSTemplate/Public/Player/MatchPlayerState.h

93 lines
2.2 KiB
C
Raw Normal View History

2026-02-24 22:39:26 -05:00
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/PlayerState.h"
#include "Data/SpecialElimData.h"
#include "MatchPlayerState.generated.h"
enum class ESpecialElimType : uint16;
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnScoreChanged, int32, NewScore);
/**
*
*/
UCLASS()
class FPSTEMPLATE_API AMatchPlayerState : public APlayerState
{
GENERATED_BODY()
public:
AMatchPlayerState();
void AddScoredElim();
void AddDefeat();
void AddHit();
void AddMiss();
APlayerState* GetLastAttacker() const { return LastAttacker; }
void SetLastAttacker(APlayerState* Attacker) { LastAttacker = Attacker; }
bool IsOnStreak() const { return bOnStreak; }
void SetOnStreak(bool bIsOnStreak) { bOnStreak = bIsOnStreak; }
int32 GetScoredElims() const { return ScoredElims; }
void AddHeadShotElim();
void AddSequentialElim(int32 SequenceCount);
void UpdateHighestStreak(int32 StreakCount);
void AddRevengeElim();
void AddDethroneElim();
void AddShowStopperElim();
void GotFirstBlood();
void IsTheWinner();
UFUNCTION(Client, Reliable)
void Client_SpecialElim(const ESpecialElimType& SpecialElim, int32 SequentialElimCount, int32 StreakCount, int32 ElimScore);
UFUNCTION(Client, Reliable)
void Client_ScoredElim(int32 ElimScore);
UFUNCTION(Client, Reliable)
void Client_LostTheLead();
UPROPERTY(BlueprintAssignable)
FOnScoreChanged OnScoreChanged;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
TObjectPtr<USpecialElimData> SpecialElimData;
TArray<ESpecialElimType> DecodeElimBitmask(ESpecialElimType ElimTypeBitmask);
protected:
UPROPERTY(EditDefaultsOnly, Category = "UI")
TSubclassOf<UUserWidget> SpecialElimWidgetClass;
private:
int32 ScoredElims;
int32 Defeats;
int32 Hits;
int32 Misses;
bool bOnStreak;
int32 HeadShotElims;
TMap<int32, int32> SequentialElims;
int32 HighestStreak;
int32 RevengeElims;
int32 DethroneElims;
int32 ShowStopperElims;
bool bFirstBlood;
bool bWinner;
UPROPERTY()
TObjectPtr<APlayerState> LastAttacker;
TQueue<FSpecialElimInfo> SpecialElimQueue;
bool bIsProcessingQueue;
void ProcessNextSpecialElim();
void ShowSpecialElim(const FSpecialElimInfo& ElimMessageInfo);
};