-
-
Notifications
You must be signed in to change notification settings - Fork 36
/
GameLiftTutorialWidget.cpp
123 lines (102 loc) · 4.62 KB
/
GameLiftTutorialWidget.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
// Fill out your copyright notice in the Description page of Project Settings.
#include "GameLiftTutorialWidget.h"
#include "Components/TextBlock.h"
#include "GameFramework/GameStateBase.h"
#include "GameLiftTutorialPlayerState.h"
#include "GameLiftTutorialGameState.h"
#include "GameLiftTutorialGameInstance.h"
#include "Kismet/GameplayStatics.h"
void UGameLiftTutorialWidget::NativeConstruct() {
Super::NativeConstruct();
TeamNameTextBlock = (UTextBlock*) GetWidgetFromName(TEXT("TextBlock_TeamName"));
TeammateCountTextBlock = (UTextBlock*) GetWidgetFromName(TEXT("TextBlock_TeammateCount"));
EventTextBlock = (UTextBlock*) GetWidgetFromName(TEXT("TextBlock_Event"));
PingTextBlock = (UTextBlock*) GetWidgetFromName(TEXT("TextBlock_Ping"));
GetWorld()->GetTimerManager().SetTimer(SetTeammateCountHandle, this, &UGameLiftTutorialWidget::SetTeammateCount, 1.0f, true, 1.0f);
GetWorld()->GetTimerManager().SetTimer(SetLatestEventHandle, this, &UGameLiftTutorialWidget::SetLatestEvent, 1.0f, true, 1.0f);
GetWorld()->GetTimerManager().SetTimer(SetAveragePlayerLatencyHandle, this, &UGameLiftTutorialWidget::SetAveragePlayerLatency, 1.0f, true, 1.0f);
}
void UGameLiftTutorialWidget::NativeDestruct() {
GetWorld()->GetTimerManager().ClearTimer(SetTeammateCountHandle);
GetWorld()->GetTimerManager().ClearTimer(SetLatestEventHandle);
GetWorld()->GetTimerManager().ClearTimer(SetAveragePlayerLatencyHandle);
Super::NativeDestruct();
}
void UGameLiftTutorialWidget::SetTeammateCount() {
FString OwningPlayerTeam;
APlayerState* OwningPlayerState = GetOwningPlayerState();
if (OwningPlayerState != nullptr) {
AGameLiftTutorialPlayerState* OwningGameLiftTutorialPlayerState = Cast<AGameLiftTutorialPlayerState>(OwningPlayerState);
if (OwningGameLiftTutorialPlayerState != nullptr) {
OwningPlayerTeam = OwningGameLiftTutorialPlayerState->Team;
TeamNameTextBlock->SetText(FText::FromString("Team Name: " + OwningPlayerTeam));
}
}
if (OwningPlayerTeam.Len() > 0) {
TArray<APlayerState*> PlayerStates = GetWorld()->GetGameState()->PlayerArray;
int TeammateCount = 0;
for (APlayerState* PlayerState : PlayerStates) {
if (PlayerState != nullptr) {
AGameLiftTutorialPlayerState* GameLiftTutorialPlayerState = Cast<AGameLiftTutorialPlayerState>(PlayerState);
if (GameLiftTutorialPlayerState != nullptr && GameLiftTutorialPlayerState->Team.Equals(OwningPlayerTeam)) {
TeammateCount++;
}
}
}
TeammateCountTextBlock->SetText(FText::FromString("Teammate Count: " + FString::FromInt(TeammateCount)));
}
}
void UGameLiftTutorialWidget::SetLatestEvent() {
FString LatestEvent;
FString WinningTeam;
AGameStateBase* GameState = GetWorld()->GetGameState();
if (GameState != nullptr) {
AGameLiftTutorialGameState* GameLiftTutorialGameState = Cast<AGameLiftTutorialGameState>(GameState);
if (GameLiftTutorialGameState != nullptr) {
LatestEvent = GameLiftTutorialGameState->LatestEvent;
WinningTeam = GameLiftTutorialGameState->WinningTeam;
}
}
if (LatestEvent.Len() > 0) {
if (LatestEvent.Equals("GameEnded")) {
FString OwningPlayerTeam;
APlayerState* OwningPlayerState = GetOwningPlayerState();
if (OwningPlayerState != nullptr) {
AGameLiftTutorialPlayerState* OwningGameLiftTutorialPlayerState = Cast<AGameLiftTutorialPlayerState>(OwningPlayerState);
if (OwningGameLiftTutorialPlayerState != nullptr) {
OwningPlayerTeam = OwningGameLiftTutorialPlayerState->Team;
}
}
if (WinningTeam.Len() > 0 && OwningPlayerTeam.Len() > 0) {
FString GameOverMessage = "You and the " + OwningPlayerTeam;
if (OwningPlayerTeam.Equals(WinningTeam)) {
EventTextBlock->SetText(FText::FromString(GameOverMessage + " won!"));
}
else {
EventTextBlock->SetText(FText::FromString(GameOverMessage + " lost :("));
}
}
}
else {
EventTextBlock->SetText(FText::FromString(LatestEvent));
}
}
}
void UGameLiftTutorialWidget::SetAveragePlayerLatency() {
UGameInstance* GameInstance = GetGameInstance();
if (GameInstance != nullptr) {
UGameLiftTutorialGameInstance* GameLiftTutorialGameInstance = Cast<UGameLiftTutorialGameInstance>(GameInstance);
if (GameLiftTutorialGameInstance != nullptr) {
float TotalPlayerLatency = 0.0f;
for (float PlayerLatency : GameLiftTutorialGameInstance->PlayerLatencies) {
TotalPlayerLatency += PlayerLatency;
}
float AveragePlayerLatency = 60.0f;
if (TotalPlayerLatency > 0) {
AveragePlayerLatency = TotalPlayerLatency / GameLiftTutorialGameInstance->PlayerLatencies.Num();
FString PingString = "Ping: " + FString::FromInt(FMath::RoundToInt(AveragePlayerLatency)) + "ms";
PingTextBlock->SetText(FText::FromString(PingString));
}
}
}
}