LEAP Documentation 40220
Documentation for the LEAP project
StatTrackingSave.h
Go to the documentation of this file.
1// Copyright Blue Isle Studios Inc 2018. All Rights Reserved.
2
3#pragma once
4#include "Runtime/Json/Public/Dom/JsonObject.h"
5#include "CoreMinimal.h"
6#include "GameFramework/SaveGame.h"
8#include "PlayerStats.h"
9#include "StatTrackingSave.generated.h"
10
11#define ANALYTICS_THROTTLING_TIME 1.0f
12
13USTRUCT()
15{
16 GENERATED_USTRUCT_BODY()
18 FShotTracking(uint8 ID, uint8 Shots)
19 {
20 ShotID = ID;
21 ActiveShot = Shots;
22 }
23
24 uint8 ShotID = 0;
25 uint8 ActiveShot = 0;
26};
27
28USTRUCT(BlueprintType)
29struct FStat
30{
31 GENERATED_USTRUCT_BODY()
33 {
34 Value = 0;
35 Delta = 0;
37 }
38
40 {
41 Value = InValue;
42 Tag = InTag;
43 Delta = 0;
44 }
45
46public:
47 void Update(int32 Val,const EStatUpdateBehaviour& OverrideTag = EStatUpdateBehaviour::NONE,bool bUpdateDelta = false)
48 {
49 UpdateValue(Value, Val, OverrideTag);
50 if (bUpdateDelta)
51 {
52 UpdateValue(Delta, Val, OverrideTag);
53 }
54
55 Value = FMath::Clamp(Value, 0, MAX_int32);
56 Delta = FMath::Clamp(Delta, 0, MAX_int32);
57 }
58
59 void UpdateValue(int32& ValueIn,int32 UpdateValue, EStatUpdateBehaviour OverrideTag)
60 {
61 switch (OverrideTag)
62 {
64 ValueIn += UpdateValue;
65 break;
67 ValueIn = FMath::Max(ValueIn, UpdateValue);
68 break;
70 ValueIn = FMath::Min(ValueIn, UpdateValue);
71 break;
73 ValueIn = UpdateValue;
74 break;
75 }
76 }
77
78 const int32 GetValue() const { return Value; }
79 const int32 GetDelta() const { return Delta; }
80
82
83protected:
84 int32 Value;
85 int32 Delta;
86};
87
88
90{
91 Dirty = 0,
93 Synced = 2
94};
95
96USTRUCT(BlueprintType)
98{
99 GENERATED_BODY()
100
101public:
102 UPROPERTY(BlueprintReadWrite)
103 TMap<FString, FStat> StatList;
104
105 void UpdateStat(const FString& StatKey, int Value, EStatUpdateBehaviour Tag = EStatUpdateBehaviour::OVERRIDE,bool bUpdateDelta = false)
106 {
107 if (!StatList.Contains(StatKey))
108 {
109 StatList.Add(StatKey, FStat(Value, Tag));
110 return;
111 }
112
113 StatList[StatKey].Update(Value, Tag, bUpdateDelta);
114 }
115};
116
118
120class UWeaponInstance;
121
122UCLASS()
123class PROJECTX_API UStatTrackingSave : public UObject
124{
125 GENERATED_BODY()
126
127public:
129 UPROPERTY()
130 FPlayerStat PlayerStats;
131 UPROPERTY(BlueprintReadWrite)
132 FString PlayerID;
133
134 int32 GetStat(const EStatClassifier& ClassStatType, const FString& ClassName, const EStatNames& StatName);
135 int32 GetStatDelta(const EStatClassifier& ClassStatType, const FString& ClassName, const EStatNames& StatName);
136
137 FTimedChallenges& GetChallenges() { return DailyChallenges; }
138 void InitStatType(const EStatClassifier& StatClass, const TArray<FString>& ClassNames,const TSet<EStatNames>& StatsToTrack);
139
140 FStatsLoadedSignature OnStatsLoaded;
141
142 bool CanLoadStats(bool bAuthoritative = false) const { return bAuthoritative ? AuthoritativeStatState == EStatState::Dirty : StatState == EStatState::Dirty; }
143 EStatState GetStatState(bool bAuthoritative = false) const { return bAuthoritative ? AuthoritativeStatState : StatState; }
144 bool IsInitialized() const { return bInitialized; }
145 void SetIsInitialized(bool bNewInitialized) { bInitialized = bNewInitialized; }
146 void FindOrUpdateClassEntry(const EStatClassifier& ClassStatType, const FString& ClassName, const EStatNames& StatName, const int32 Value, const EStatUpdateBehaviour& Tag = EStatUpdateBehaviour::NONE, bool bUpdateDelta = false);
147 void OnSave(bool bSuccess);
148 void UpdateState(EStatState State, bool bAuthoritative = false);
149
150 void OnLoadedStats();
151 void OnLoadedAuthoritativeStats();
152 bool FindChallengeIDByStat(FServerChallengeInfo& FoundChallenge, const FString& StatKey);
153 void UpdateServerChallengeInfo(const TArray<FServerChallengeInfo>& ChallengeInfos) {ServerChallenges = ChallengeInfos;}
154
155 void UpdateStatsSaved(bool bNewStatsSaved) { bStatsSaved = bNewStatsSaved; }
156 void UpdateChallengesSaved(bool bNewChallengesSaved) { bChallengesSaved = bNewChallengesSaved; }
157 void UpdateExperienceSaved(bool bNewExperienceSaved) { bExperienceSaved = bNewExperienceSaved; }
158
159 bool IsStatObjectSaved() const { return bChallengesSaved && bStatsSaved && bExperienceSaved; }
160
161 UFUNCTION()
162 bool TrackProjectile(uint16 ID);
163
164 UFUNCTION()
165 void ClearProjectileID(uint16 ID);
166
167 TMap<FString, float> AnalyticsStats;
168
169protected:
170 bool bInitialized = false;
172 EStatState AuthoritativeStatState = EStatState::Dirty;
173
174 bool bChallengesSaved = false;
175 bool bStatsSaved = false;
176 bool bExperienceSaved = false;
177
178 void GenerateTagList();
180 FPlayerStat StatObjectBuffer;
181 TSet<uint16> ShotHitIDs;
182 FTimedChallenges DailyChallenges;
183 TArray<FServerChallengeInfo> ServerChallenges;
184 TMap<FString, FTimerHandle> StatThrottler;
185 TWeakObjectPtr<UWorld> World = nullptr;
186};
EStatClassifier
Definition: PlayerStats.h:75
EStatUpdateBehaviour
Definition: PlayerStats.h:142
EStatNames
Definition: PlayerStats.h:86
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FStatsLoadedSignature)
EStatState
Definition: StatTrackingSave.h:90
@ Loading
Definition: StatTrackingSave.h:92
@ Synced
Definition: StatTrackingSave.h:93
@ Dirty
Definition: StatTrackingSave.h:91
Definition: ProjectXPlayerState.h:238
Definition: StatTrackingSave.h:124
void UpdateServerChallengeInfo(const TArray< FServerChallengeInfo > &ChallengeInfos)
Definition: StatTrackingSave.h:153
void SetIsInitialized(bool bNewInitialized)
Definition: StatTrackingSave.h:145
bool CanLoadStats(bool bAuthoritative=false) const
Definition: StatTrackingSave.h:142
bool IsInitialized() const
Definition: StatTrackingSave.h:144
bool IsStatObjectSaved() const
Definition: StatTrackingSave.h:159
void UpdateExperienceSaved(bool bNewExperienceSaved)
Definition: StatTrackingSave.h:157
FStatsLoadedSignature OnStatsLoaded
Definition: StatTrackingSave.h:140
void UpdateChallengesSaved(bool bNewChallengesSaved)
Definition: StatTrackingSave.h:156
void UpdateStatsSaved(bool bNewStatsSaved)
Definition: StatTrackingSave.h:155
EStatState GetStatState(bool bAuthoritative=false) const
Definition: StatTrackingSave.h:143
Definition: WeaponInstance.h:220
bool bInitialized
Definition: WeaponInstance.h:1191
Definition: StatTrackingSave.h:98
Definition: PlayerStats.h:213
Definition: StatTrackingSave.h:15
FShotTracking(uint8 ID, uint8 Shots)
Definition: StatTrackingSave.h:18
Definition: StatTrackingSave.h:30
int32 Delta
Definition: StatTrackingSave.h:85
EStatUpdateBehaviour Tag
Definition: StatTrackingSave.h:81
const int32 GetDelta() const
Definition: StatTrackingSave.h:79
void Update(int32 Val, const EStatUpdateBehaviour &OverrideTag=EStatUpdateBehaviour::NONE, bool bUpdateDelta=false)
Definition: StatTrackingSave.h:47
FStat(int32 InValue, EStatUpdateBehaviour InTag=EStatUpdateBehaviour::NONE)
Definition: StatTrackingSave.h:39
int32 Value
Definition: StatTrackingSave.h:84
const int32 GetValue() const
Definition: StatTrackingSave.h:78
void UpdateValue(int32 &ValueIn, int32 UpdateValue, EStatUpdateBehaviour OverrideTag)
Definition: StatTrackingSave.h:59
Definition: PlayerStats.h:200