93 lines
2.2 KiB
C++
93 lines
2.2 KiB
C++
// 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);
|
|
};
|
|
|
|
|