// 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 SpecialElimData; TArray DecodeElimBitmask(ESpecialElimType ElimTypeBitmask); protected: UPROPERTY(EditDefaultsOnly, Category = "UI") TSubclassOf SpecialElimWidgetClass; private: int32 ScoredElims; int32 Defeats; int32 Hits; int32 Misses; bool bOnStreak; int32 HeadShotElims; TMap SequentialElims; int32 HighestStreak; int32 RevengeElims; int32 DethroneElims; int32 ShowStopperElims; bool bFirstBlood; bool bWinner; UPROPERTY() TObjectPtr LastAttacker; TQueue SpecialElimQueue; bool bIsProcessingQueue; void ProcessNextSpecialElim(); void ShowSpecialElim(const FSpecialElimInfo& ElimMessageInfo); };