Space Plunder
Loading...
Searching...
No Matches
UEpicOnlineGameInstance Class Reference

#include <EpicOnlineGameInstance.h>

Inheritance diagram for UEpicOnlineGameInstance:
IMenuSystem IDifficultyInterface IReplayClipInterface ILevelSelectInterface IModalInterface IPlayFabMenu UMenuSystemGameInstance

Public Member Functions

 UEpicOnlineGameInstance (const FObjectInitializer &ObjectInitializer)
 
virtual void Init () override
 
virtual void Shutdown () override
 
virtual EDifficultyLevel GetDifficultyLevel () const override
 
virtual void SetDifficultyLevel (const EDifficultyLevel NewDifficultyLevel) override
 
virtual FString GetAuthToken () const override
 
virtual void LoginToPlayFab () override
 
virtual FString GetPlayFabID () const override
 
virtual bool GetIsLoggedInToPlayFab () const override
 
virtual float GetPlayFabCurrency () const override
 
virtual TArray< UPlayFabJsonObject * > GetPlayFabInventory () const override
 
virtual void LoginToEpicOnline (FString ID="", FString Token="", FString LoginType="accountportal") override
 
virtual void Logout () const override
 
virtual void CreateEOSSession (FString SessionName, bool bIsDedicatedServer, bool bIsLAN, bool bIsPresence, int32 MaxNumPlayers) override
 
virtual void FindSessionAndJoin () override
 
virtual void DestroySession () override
 
virtual FString GetPlayerUserName () const override
 
virtual bool GetIsPlayerLoggedIn () const override
 
virtual FString GetCurrentSessionName () const override
 
virtual void LaunchInGameMenu (APlayerController *Player, const bool bOpen=true) override
 
virtual void LaunchOptionsMenu (APlayerController *Player, UUserWidget *CurrentWidget=nullptr, const bool bOpen=true) override
 
virtual void StartSession () override
 
virtual TSubclassOf< UUserWidget > GetModalWidgetClass () override
 
virtual bool GetDebuggingMode () const override
 
virtual void SearchServers () override
 
virtual void StartCampaign (const bool bNewGame) const override
 
virtual void RestartLevel () const
 
virtual void StartHorde () const override
 
virtual void SetCurrentSaveSlot (const int32 NewSaveSlot) override
 
virtual int32 GetCurrentSaveSlot () override
 
virtual TArray< int32 > GetAllSaveSlots () override
 
virtual FUserSaveGame GetSaveInfoFromSlot (const int32 Slot) override
 
virtual bool GetIsOnlineGame () const override
 
virtual bool GetIsPublicMatch () const override
 
virtual EOnlineSubsystem GetOnlineSubsystem () const override
 
virtual void Host (FOnlineSessionSettings HostSessionSettings) override
 
virtual void SinglePlayer () override
 
virtual void Character () override
 
virtual void Options () override
 
virtual void Join (uint32 Index) override
 
virtual void JoinManualAddress (const FString &IpAddress) override
 
virtual void Quit (APlayerController *Player) override
 
virtual void UpdateStats (FString StatName, int32 Amount)
 
virtual void GetStats (TArray< FString > StatName)
 
virtual void LoadMenu () override
 
TArray< uint8 > ConvertSaveFileTouint (class USaveGame *SavedGame)
 
class USaveGame * ConvertunitToSaveFile (TArray< uint8 > SavedGameArray)
 
void UpdatePlayerData (const FString &FileName, TArray< uint8 > SavedGameArray)
 
void GetPlayerData (const FString &FileName)
 
void ReadPlayerData (const FString &FileName) const
 
virtual int32 GetMinNumberOfPlayersToStart () const override
 
virtual void SetMinNumberOfPlayersToStart (const int32 Num) override
 
virtual UDataTable * GetLevelDataTable () override
 
virtual void SetSelectedLevel (const FGameLevel GameLevel, const EGameplayMode GameMode) override
 
virtual FGameLevel GetSelectedLevel (const EGameplayMode GameMode) const override
 
virtual FUserProfile GetOfflinePlayerProfile () const override
 
virtual UDataTable * GetProfilePicturesDT () const override
 
virtual bool SaveOfflinePlayerProfile () override
 
virtual bool LoadOfflinePlayerProfile (FUserProfile &OfflineProfile) override
 

Public Attributes

FOnServersFound OnServersFoundChanged
 
FOnFileDataFound OnFileDataFound
 
FOnFindReplaysComplete OnFindReplaysComplete
 
TSharedPtr< FOnlineSessionSearch > OnlineSessionSearch
 
class IOnlineSubsystem * OnlineSubsystem = nullptr
 
IOnlineSessionPtr OnlineSessionPtr
 
FString LobbyLevelText
 
FString StartupLevelText
 
FString DemoLevelText
 

Protected Member Functions

virtual void ReturnToMainMenu () override
 
virtual bool OpenReplayMenu (APlayerController *Player, const bool bOpen=true) override
 
virtual void StartRecordingReplayFromBP (const FString &InName, const FString &FriendlyName) override
 
virtual void CreateReplayEvent (const int32 TimeInMS, const FString &Group, const FString &Meta, const TArray< uint8 > &Data) override
 
virtual void StopRecordingReplayFromBP () override
 
virtual void PlayReplayFromBP (FString ReplayName) override
 
virtual void FindReplays () override
 
virtual void RenameReplay (const FString &ReplayName, const FString &NewFriendlyReplayName) override
 
virtual void DeleteReplay (const FString &ReplayName) override
 
void OnLoginEOSCompleted (int32 LocalUserNum, bool bSuccess, const FUniqueNetId &UserID, const FString &Error) const
 
void OnLogoutComplete (const int32 ResultCode, const bool bSuccess) const
 
void OnCreateSessionCompleted (FName SessionName, bool bSuccess) const
 
void OnDestroySessionCompleted (FName SessionName, bool bSuccess) const
 
void OnFindSessionCompleted (bool bSuccess)
 
void OnFindSessionListCompleted (bool bSuccess) const
 
void OnJoinSessionCompleted (FName SessionName, EOnJoinSessionCompleteResult::Type Result) const
 
void OnUpdateStatsComplete (const FOnlineError &Result) const
 
void OnGetStatsComplete (const FOnlineError &Result, const TArray< TSharedRef< const FOnlineStatsUserStats > > &UserStats)
 
void OnWriteUserFileComplete (bool bSuccess, const FUniqueNetId &UserID, const FString &FileName) const
 
void OnGetUserFileComplete (bool bSuccess, const FUniqueNetId &UserID, const FString &FileName) const
 

Protected Attributes

class UInGameMenuSystemWidgetInGameMenuWidget = nullptr
 
TSubclassOf< class UUserWidget > InGameMenuClass = nullptr
 
class UOptionsMenuSystemWidgetOptionsMenuWidget = nullptr
 
TSubclassOf< class UUserWidget > OptionsMenuClass = nullptr
 
TSubclassOf< class UUserWidget > ModalWidgetClass = nullptr
 
class UMenuSystemWidgetMainMenu = nullptr
 
TSubclassOf< class UUserWidget > MenuClass = nullptr
 
class UReplayMenuReplayMenu = nullptr
 
TSubclassOf< UReplayMenuReplayMenuClass = nullptr
 
bool bDebuggingMode = true
 
bool bInGameMenuOpen = false
 
bool bOptionsMenuOpen = false
 
class UDataTable * ProfilePicturesDT = nullptr
 
class UDataTable * LevelDataTable = nullptr
 
bool bAutoLoginToPlayFab = true
 
FString CurrencyCode = "PC"
 
FGameLevel SelectedCampaignLevel
 
FGameLevel SelectedMultiplayerLevel
 
FGameLevel SelectedHordeLevel
 
FGameLevel SelectedDebugLevel
 

Private Member Functions

IOnlineIdentityPtr GetOnlineIdentity () const
 
void SetPlayerProfileName ()
 @ TODO REMOVE AFTER Loading Player PROFILE from save,
 
virtual void OnNetworkFailure (UWorld *World, UNetDriver *NewDriver, ENetworkFailure::Type FailureType, const FString &ErrorString)
 
void OnEnumerateStreamsComplete (const FEnumerateStreamsResult &Result) const
 
void OnDeleteFinishedStreamComplete (const FDeleteFinishedStreamResult &Result)
 
void OnReplayRenameFinishedComplete (const FRenameReplayResult &Result)
 
void SetPlayFabDisplayName ()
 
void OnPlayFabLoginSuccess (const PlayFab::ClientModels::FLoginResult &Result)
 
void OnPlayFabError (const PlayFab::FPlayFabCppError &ErrorResult)
 
void OnPlayFabDisplayChangedSuccess (const PlayFab::AdminModels::FUpdateUserTitleDisplayNameResult &Result)
 
void OnPlayFabLGetInventorySuccess (const PlayFab::ClientModels::FGetUserInventoryResult &Result)
 

Private Attributes

int32 MinNumberOfPlayersToStart = 2
 
FString CurrentSessionName = "Default_Server_Name"
 
EDifficultyLevel DifficultyLevel = EDifficultyLevel::Normal
 
FUserProfile OfflinePlayerProfile
 
int32 CurrentSaveSlot = 1
 
TArray< int32 > AllSaveSlots
 
TSharedPtr< INetworkReplayStreamer > EnumerateStreamsPtr
 
FEnumerateStreamsCallback OnEnumerateStreamsCompleteDelegate
 
FDeleteFinishedStreamCallback OnDeleteFinishedStreamCompleteDelegate
 
FRenameReplayCallback OnRenameReplayCompleteDelegate
 
PlayFabClientPtr ClientAPI = nullptr
 
PlayFabAdminPtr AdminAPI = nullptr
 
FString PlayFabID = ""
 
float PlayFabCurrency = 0.0f
 
TArray< PlayFab::ClientModels::FItemInstance > PlayFabInventory
 

Constructor & Destructor Documentation

◆ UEpicOnlineGameInstance()

UEpicOnlineGameInstance::UEpicOnlineGameInstance ( const FObjectInitializer & ObjectInitializer)
explicit
43 : Super(ObjectInitializer)
44{
45 //@BUG mac doesn't compile this Constructor ..
46 bDebuggingMode = true;
47 ConstructorHelpers::FClassFinder<UUserWidget> const InGameMenuBP(TEXT("/MenuSystem/Widgets/WBP_InGameMenuSystem"));
48 if (!ensure(InGameMenuBP.Class != nullptr)) return;
49 InGameMenuClass = InGameMenuBP.Class;
50 ConstructorHelpers::FClassFinder<UUserWidget> const MainMenuBP(TEXT("/MenuSystem/Widgets/WBP_MainMenuSystem"));
51 if (!ensure(MainMenuBP.Class != nullptr)) return;
52 MenuClass = MainMenuBP.Class;
53 ConstructorHelpers::FClassFinder<UUserWidget> const OptionsMenuBP(TEXT("/MenuSystem/Widgets/WBP_OptionsMenuSystem"));
54 if (!ensure(OptionsMenuBP.Class != nullptr)) return;
55 OptionsMenuClass = OptionsMenuBP.Class;
56 ConstructorHelpers::FClassFinder<UUserWidget> const ReplayMenuBP(TEXT("/MenuSystem/Widgets/Replays/WBP_ReplayMenu"));
57 if (!ensure(ReplayMenuBP.Class != nullptr)) return;
58 ReplayMenuClass = ReplayMenuBP.Class;
59 ConstructorHelpers::FClassFinder<UUserWidget> const ModalWidgetBP(TEXT("/MenuSystem/Widgets/CommonUI/WBP_PopupMenuSystem"));
60 if (!ensure(ModalWidgetBP.Class != nullptr)) return;
61 ModalWidgetClass = ModalWidgetBP.Class;
62}
TSubclassOf< class UUserWidget > InGameMenuClass
Definition EpicOnlineGameInstance.h:214
bool bDebuggingMode
Definition EpicOnlineGameInstance.h:234
TSubclassOf< class UUserWidget > MenuClass
Definition EpicOnlineGameInstance.h:225
TSubclassOf< UReplayMenu > ReplayMenuClass
Definition EpicOnlineGameInstance.h:230
TSubclassOf< class UUserWidget > OptionsMenuClass
Definition EpicOnlineGameInstance.h:218
TSubclassOf< class UUserWidget > ModalWidgetClass
Definition EpicOnlineGameInstance.h:220

Member Function Documentation

◆ Character()

void UEpicOnlineGameInstance::Character ( )
overridevirtual

Implements IMenuSystem.

Reimplemented in UMenuSystemGameInstance.

694{
695}

◆ ConvertSaveFileTouint()

TArray< uint8 > UEpicOnlineGameInstance::ConvertSaveFileTouint ( class USaveGame * SavedGame)
1212{
1213 TArray<uint8> SavedData;
1214 if(SavedGame != nullptr)
1215 {
1216 UGameplayStatics::SaveGameToMemory(SavedGame, SavedData);
1217 }
1218 return SavedData;
1219}

◆ ConvertunitToSaveFile()

USaveGame * UEpicOnlineGameInstance::ConvertunitToSaveFile ( TArray< uint8 > SavedGameArray)
1222{
1223 USaveGame* LocalObject = nullptr;
1224 if(!SavedGameArray.IsEmpty())
1225 {
1226 LocalObject = UGameplayStatics::LoadGameFromMemory(SavedGameArray);
1227 }
1228 return LocalObject;
1229}

◆ CreateEOSSession()

void UEpicOnlineGameInstance::CreateEOSSession ( FString SessionName,
bool bIsDedicatedServer,
bool bIsLAN,
bool bIsPresence,
int32 MaxNumPlayers )
overridevirtual

Implements IMenuSystem.

778{
779 if(OnlineSessionPtr == nullptr){UE_LOG(LogOnlineGameInstance, Error, TEXT("Online Session PTR FAILED, create EOS session"));return;}
780 FOnlineSessionSettings SessionSettings;
781 //- Public Match //
782 SessionSettings.bShouldAdvertise = true;
783 SessionSettings.bIsDedicated = bIsDedicatedServer;
784 SessionSettings.bAllowJoinInProgress = true;
785 SessionSettings.bAllowInvites = true;
786 if(IOnlineSubsystem::Get()->GetSubsystemName() == "NULL")
787 {
788 SessionSettings.bIsLANMatch = true;
789 }
790 else
791 {
792 SessionSettings.bIsLANMatch = bIsLAN;
793 }
794 SessionSettings.bUsesPresence = bIsPresence;
795 SessionSettings.bAllowJoinViaPresence = bIsPresence;
796 SessionSettings.NumPublicConnections = MaxNumPlayers;
797
798 if(IOnlineSubsystem::Get()->GetSubsystemName() == "STEAM")
799 {
800 SessionSettings.bUsesPresence = true;
801 SessionSettings.bUseLobbiesIfAvailable = true; // Glitched?
802 SessionSettings.bUseLobbiesVoiceChatIfAvailable = true; // Glitched?
803 SessionSettings.bAllowJoinViaPresence = true;
804 SessionSettings.bShouldAdvertise = true;
805 SessionSettings.bIsLANMatch = false;
806 SessionSettings.bIsDedicated = false;
807 SessionSettings.NumPublicConnections = 5;
808 }
809
810 if(!SessionName.IsEmpty())
811 {
812 CurrentSessionName = SessionName;
813 }
814 const FNamedOnlineSession* ExistingSession = OnlineSessionPtr->GetNamedSession(SESSION_NAME);
815 if(ExistingSession != nullptr)
816 {
817 OnlineSessionPtr->DestroySession(SESSION_NAME);
818 }
819 SessionSettings.Set(SERVER_NAME_KEY, FString(CurrentSessionName), EOnlineDataAdvertisementType::ViaOnlineServiceAndPing);
820 //@TODO Only create session after we destroy session
821 SessionSettings.Set(SEARCH_KEYWORDS, FString("Lobby"), EOnlineDataAdvertisementType::ViaOnlineServiceAndPing);
822 OnlineSessionPtr->OnCreateSessionCompleteDelegates.AddUObject(this, &UEpicOnlineGameInstance::OnCreateSessionCompleted);
823 OnlineSessionPtr->CreateSession(0,SESSION_NAME, SessionSettings);
824}
static const FName SESSION_NAME
Definition EpicOnlineGameInstance.cpp:33
static const FName SERVER_NAME_KEY
Definition EpicOnlineGameInstance.cpp:34
FString CurrentSessionName
Definition EpicOnlineGameInstance.h:314
IOnlineSessionPtr OnlineSessionPtr
Definition EpicOnlineGameInstance.h:163
void OnCreateSessionCompleted(FName SessionName, bool bSuccess) const
Definition EpicOnlineGameInstance.cpp:826

◆ CreateReplayEvent()

void UEpicOnlineGameInstance::CreateReplayEvent ( const int32 TimeInMS,
const FString & Group,
const FString & Meta,
const TArray< uint8 > & Data )
overrideprotectedvirtual

Implements IReplayClipInterface.

351{
352 // const UDemoNetDriver* DemoDriver = Cast<UDemoNetDriver>(GetWorld()->GetDemoNetDriver());
353 //
354 // if(DemoDriver != nullptr && DemoDriver->IsPlaying())
355 // {
356 // // Get the current replay time in seconds and convert it to milliseconds
357 // uint32 Time = static_cast<uint32>(DemoDriver->GetDemoCurrentTime() * 1000);
358 // if(EnumerateStreamsPtr.Get() != nullptr)
359 // {
360 // EnumerateStreamsPtr.Get()->AddEvent(Time, Group, Meta, Data);
361 // // EnumerateStreamsPtr.Get()->GetTotalDemoTime()
362 // }
363 // }
364}

◆ DeleteReplay()

void UEpicOnlineGameInstance::DeleteReplay ( const FString & ReplayName)
overrideprotectedvirtual

Delete a previously recorded replay

Implements IReplayClipInterface.

408{
409 if(EnumerateStreamsPtr.Get() != nullptr)
410 {
411 EnumerateStreamsPtr.Get()->DeleteFinishedStream(ReplayName, OnDeleteFinishedStreamCompleteDelegate);
412 }
413}
FDeleteFinishedStreamCallback OnDeleteFinishedStreamCompleteDelegate
Definition EpicOnlineGameInstance.h:336
TSharedPtr< INetworkReplayStreamer > EnumerateStreamsPtr
Definition EpicOnlineGameInstance.h:334

◆ DestroySession()

void UEpicOnlineGameInstance::DestroySession ( )
overridevirtual

Implements IMenuSystem.

1305{
1306 if(OnlineSessionPtr != nullptr && OnlineSubsystem != nullptr)
1307 {
1308 const FNamedOnlineSession* ExistingSession = OnlineSessionPtr->GetNamedSession(SESSION_NAME);
1309 if(ExistingSession != nullptr)
1310 {
1311 if(ExistingSession->SessionState == EOnlineSessionState::Pending || ExistingSession->SessionState == EOnlineSessionState::InProgress || ExistingSession->SessionState == EOnlineSessionState::Starting)
1312 {
1313 OnlineSessionPtr->DestroySession(SESSION_NAME);
1314 }
1315 }
1316 }
1317}
class IOnlineSubsystem * OnlineSubsystem
Definition EpicOnlineGameInstance.h:162

◆ FindReplays()

void UEpicOnlineGameInstance::FindReplays ( )
overrideprotectedvirtual

Start looking for/finding replays on the hard drive

Implements IReplayClipInterface.

378{
379 if(EnumerateStreamsPtr.Get() != nullptr)
380 {
381 //@TODO Check user Index 0
382 EnumerateStreamsPtr.Get()->EnumerateStreams(FNetworkReplayVersion(),0, FString(), TArray<FString>(), OnEnumerateStreamsCompleteDelegate);
383 }
384}
FEnumerateStreamsCallback OnEnumerateStreamsCompleteDelegate
Definition EpicOnlineGameInstance.h:335

◆ FindSessionAndJoin()

void UEpicOnlineGameInstance::FindSessionAndJoin ( )
overridevirtual

Implements IMenuSystem.

916{
917 if(OnlineSessionPtr == nullptr){UE_LOG(LogOnlineGameInstance, Error, TEXT("Online Session PTR FAILED, create EOS session"));return;}
918 OnlineSessionSearch = MakeShareable(new FOnlineSessionSearch());
919 if(OnlineSessionSearch.IsValid())
920 {
921 OnlineSessionSearch->QuerySettings.Set(SEARCH_LOBBIES, true, EOnlineComparisonOp::Equals);
922 OnlineSessionSearch->QuerySettings.Set(SEARCH_PRESENCE, true, EOnlineComparisonOp::Equals);
923 if(IOnlineSubsystem::Get()->GetSubsystemName() == "NULL")
924 {
925 OnlineSessionSearch->bIsLanQuery = true;
926 }
927 OnlineSessionSearch->MaxSearchResults = 20;
928 // OnlineSessionSearch->QuerySettings.SearchParams.Empty();
929 OnlineSessionPtr->OnFindSessionsCompleteDelegates.AddUObject(this, &UEpicOnlineGameInstance::OnFindSessionCompleted);
930 OnlineSessionPtr->FindSessions(0, OnlineSessionSearch.ToSharedRef());
931 }
932
933}
TSharedPtr< FOnlineSessionSearch > OnlineSessionSearch
Definition EpicOnlineGameInstance.h:161
void OnFindSessionCompleted(bool bSuccess)
Definition EpicOnlineGameInstance.cpp:935

◆ GetAllSaveSlots()

virtual TArray< int32 > UEpicOnlineGameInstance::GetAllSaveSlots ( )
inlineoverridevirtual

Implements IMenuSystem.

112{return AllSaveSlots;};
TArray< int32 > AllSaveSlots
Definition EpicOnlineGameInstance.h:325

◆ GetAuthToken()

FString UEpicOnlineGameInstance::GetAuthToken ( ) const
overridevirtual

Implements IMenuSystem.

137{
138 if(GetOnlineIdentity() != nullptr)
139 {
140 return GetOnlineIdentity()->GetAuthToken(0);
141 }
142 UE_LOG(LogOnlineGameInstance, Error, TEXT("UEpicOnlineGameInstance::GetAuthToken"));
143 return "Null";
144}
IOnlineIdentityPtr GetOnlineIdentity() const
Definition EpicOnlineGameInstance.cpp:293

◆ GetCurrentSaveSlot()

virtual int32 UEpicOnlineGameInstance::GetCurrentSaveSlot ( )
inlineoverridevirtual

Implements IMenuSystem.

Reimplemented in UMenuSystemGameInstance.

111{return CurrentSaveSlot;};
int32 CurrentSaveSlot
Definition EpicOnlineGameInstance.h:324

◆ GetCurrentSessionName()

FString UEpicOnlineGameInstance::GetCurrentSessionName ( ) const
overridevirtual

Implements IMenuSystem.

275{
276 if(OnlineSubsystem != nullptr)
277 {
278 const FName SessionName = NAME_GameSession; // Or your specific session name
279 if (OnlineSessionPtr->GetNamedSession(SessionName) != nullptr)
280 {
281 return SessionName.ToString();
282 }
283 }
284 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Error, TEXT("Failed to GetCurrentSessionName from GetNamedSession"));}
285 if(!CurrentSessionName.IsEmpty())
286 {
287 return CurrentSessionName;
288 }
289 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Error, TEXT("Failed to GetCurrentSessionName"));}
290 return "InvalidName";
291}

◆ GetDebuggingMode()

virtual bool UEpicOnlineGameInstance::GetDebuggingMode ( ) const
inlineoverridevirtual

Implements IMenuSystem.

97{return bDebuggingMode;};

◆ GetDifficultyLevel()

EDifficultyLevel UEpicOnlineGameInstance::GetDifficultyLevel ( ) const
overridevirtual

Implements IDifficultyInterface.

127{
128 return DifficultyLevel;
129}
EDifficultyLevel DifficultyLevel
Definition EpicOnlineGameInstance.h:315

◆ GetIsLoggedInToPlayFab()

bool UEpicOnlineGameInstance::GetIsLoggedInToPlayFab ( ) const
overridevirtual

Implements IPlayFabMenu.

213{
214 return PlayFabID.IsEmpty() == false;
215}
FString PlayFabID
Definition EpicOnlineGameInstance.h:349

◆ GetIsOnlineGame()

bool UEpicOnlineGameInstance::GetIsOnlineGame ( ) const
overridevirtual

Implements IMenuSystem.

605{
606 if(GetWorld() == nullptr){return false;}
607 const ENetMode NetMode = GetWorld()->GetNetMode();
608 return NetMode == NM_DedicatedServer || NetMode == NM_ListenServer || NetMode == NM_Client;
609}

◆ GetIsPlayerLoggedIn()

bool UEpicOnlineGameInstance::GetIsPlayerLoggedIn ( ) const
overridevirtual

Implements IMenuSystem.

261{
262 if(GetOnlineIdentity() != nullptr)
263 {
264 if(GetOnlineIdentity()->GetLoginStatus(0) == ELoginStatus::LoggedIn)
265 {
266 return true;
267 }
268 return false;
269 }
270 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Error, TEXT("Failed to GetIsPlayerLoggedIn"));}
271 return false;
272}

◆ GetIsPublicMatch()

bool UEpicOnlineGameInstance::GetIsPublicMatch ( ) const
overridevirtual

Implements IMenuSystem.

612{
613 if(OnlineSessionPtr.IsValid() && OnlineSessionPtr->GetNamedSession(NAME_GameSession) != nullptr)
614 {
615 const FOnlineSessionSettings* SessionSettings = OnlineSessionPtr->GetSessionSettings(NAME_GameSession);
616 if(SessionSettings)
617 {
618 return SessionSettings->bIsLANMatch == false && SessionSettings->bShouldAdvertise == true;
619 }
620 }
621 return false;
622}

◆ GetLevelDataTable()

virtual UDataTable * UEpicOnlineGameInstance::GetLevelDataTable ( )
inlineoverridevirtual

Implements ILevelSelectInterface.

189{return LevelDataTable;};
class UDataTable * LevelDataTable
Definition EpicOnlineGameInstance.h:242

◆ GetMinNumberOfPlayersToStart()

virtual int32 UEpicOnlineGameInstance::GetMinNumberOfPlayersToStart ( ) const
inlineoverridevirtual

Implements IMenuSystem.

int32 MinNumberOfPlayersToStart
Definition EpicOnlineGameInstance.h:313

◆ GetModalWidgetClass()

virtual TSubclassOf< UUserWidget > UEpicOnlineGameInstance::GetModalWidgetClass ( )
inlineoverridevirtual

Reimplemented from IModalInterface.

95{return ModalWidgetClass;};

◆ GetOfflinePlayerProfile()

virtual FUserProfile UEpicOnlineGameInstance::GetOfflinePlayerProfile ( ) const
inlineoverridevirtual

Implements IMenuSystem.

199{return OfflinePlayerProfile;};
FUserProfile OfflinePlayerProfile
Definition EpicOnlineGameInstance.h:322

◆ GetOnlineIdentity()

IOnlineIdentityPtr UEpicOnlineGameInstance::GetOnlineIdentity ( ) const
private
294{
295 if(OnlineSubsystem != nullptr)
296 {
297 return OnlineSubsystem->GetIdentityInterface();
298 }
299 return nullptr;
300}

◆ GetOnlineSubsystem()

EOnlineSubsystem UEpicOnlineGameInstance::GetOnlineSubsystem ( ) const
overridevirtual

Implements IMenuSystem.

625{
626 if(OnlineSubsystem != nullptr)
627 {
628 if(OnlineSubsystem->GetSubsystemName() == "STEAM")
629 {
631 }
632 if(OnlineSubsystem->GetSubsystemName() == "EOS")
633 {
635 }
636 if(OnlineSubsystem->GetSubsystemName() == "SWITCH")
637 {
639 }
640 if(OnlineSubsystem->GetSubsystemName() == "PS4SERVER")
641 {
643 }
644 if(OnlineSubsystem->GetSubsystemName() == "PS4")
645 {
647 }
648 if(OnlineSubsystem->GetSubsystemName() == "FACEBOOK")
649 {
651 }
652 if(OnlineSubsystem->GetSubsystemName() == "GOOGLE")
653 {
655 }
656 if(OnlineSubsystem->GetSubsystemName() == "AMAZON")
657 {
659 }
660 if(OnlineSubsystem->GetSubsystemName() == "APPLE")
661 {
663 }
664 if(OnlineSubsystem->GetSubsystemName() == "IOS")
665 {
667 }
668 if(OnlineSubsystem->GetSubsystemName() == "GOOGLEPLAY")
669 {
671 }
672 if(OnlineSubsystem->GetSubsystemName() == "PlayFab")
673 {
675 }
676 if(OnlineSubsystem->GetSubsystemName() == "NULL")
677 {
679 }
680 }
682}

◆ GetPlayerData()

void UEpicOnlineGameInstance::GetPlayerData ( const FString & FileName)
1260{
1261 if(GetOnlineIdentity() != nullptr)
1262 {
1263 const IOnlineUserCloudPtr UserCloud = OnlineSubsystem->GetUserCloudInterface();
1264 if(UserCloud != nullptr)
1265 {
1266 const TSharedPtr<const FUniqueNetId> UserID = GetOnlineIdentity()->GetUniquePlayerId(0).ToSharedRef();
1267 UserCloud->OnReadUserFileCompleteDelegates.AddUObject(this, &UEpicOnlineGameInstance::OnGetUserFileComplete);
1268 UserCloud->ReadUserFile(*UserID, FileName);
1269 }
1270 }
1271}
void OnGetUserFileComplete(bool bSuccess, const FUniqueNetId &UserID, const FString &FileName) const
Definition EpicOnlineGameInstance.cpp:1273

◆ GetPlayerUserName()

FString UEpicOnlineGameInstance::GetPlayerUserName ( ) const
overridevirtual

Implements IMenuSystem.

248{
249 if(GetOnlineIdentity() != nullptr)
250 {
252 {
253 return GetOnlineIdentity()->GetPlayerNickname(0);
254 }
255 }
256 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Error, TEXT("Failed to Get Player UserName"));}
257 return FString("Default Player");
258}
virtual bool GetIsPlayerLoggedIn() const override
Definition EpicOnlineGameInstance.cpp:260

◆ GetPlayFabCurrency()

float UEpicOnlineGameInstance::GetPlayFabCurrency ( ) const
overridevirtual

Implements IPlayFabMenu.

218{
219 return PlayFabCurrency;
220}
float PlayFabCurrency
Definition EpicOnlineGameInstance.h:350

◆ GetPlayFabID()

FString UEpicOnlineGameInstance::GetPlayFabID ( ) const
overridevirtual

Implements IPlayFabMenu.

160{
161 return PlayFabID;
162}

◆ GetPlayFabInventory()

TArray< UPlayFabJsonObject * > UEpicOnlineGameInstance::GetPlayFabInventory ( ) const
overridevirtual

Implements IPlayFabMenu.

223{
224 TArray<UPlayFabJsonObject*> Inventory;
225 for(auto Item :PlayFabInventory)
226 {
227 // Create a string to hold the JSON data
228 FString OutputString;
229 // Create a JsonWriter to write to a string
230 TSharedRef<TJsonWriter<TCHAR, TCondensedJsonPrintPolicy<TCHAR>>> JsonWriter = TJsonWriterFactory<TCHAR, TCondensedJsonPrintPolicy<TCHAR>>::Create(&OutputString);
231 // Call the writeJSON function to serialize the FItemInstance into JSON
232 Item.writeJSON(JsonWriter);
233 // Close the writer to flush the contents to the string
234 JsonWriter->Close();
235 // Create a UPlayFabJsonObject
236 UPlayFabJsonObject* JsonObject = NewObject<UPlayFabJsonObject>();
237 // Convert the string into a UPlayFabJsonObject
238 JsonObject->DecodeJson(OutputString);
239 // Add the JsonObject to the array
240 Inventory.Add(JsonObject);
241 }
242 return Inventory;
243}
TArray< PlayFab::ClientModels::FItemInstance > PlayFabInventory
Definition EpicOnlineGameInstance.h:351

◆ GetProfilePicturesDT()

virtual UDataTable * UEpicOnlineGameInstance::GetProfilePicturesDT ( ) const
inlineoverridevirtual

Implements IMenuSystem.

200{return ProfilePicturesDT;};
class UDataTable * ProfilePicturesDT
Definition EpicOnlineGameInstance.h:240

◆ GetSaveInfoFromSlot()

virtual FUserSaveGame UEpicOnlineGameInstance::GetSaveInfoFromSlot ( const int32 Slot)
inlineoverridevirtual

Implements IMenuSystem.

114{return FUserSaveGame();};
Definition MenuData.h:69

◆ GetSelectedLevel()

FGameLevel UEpicOnlineGameInstance::GetSelectedLevel ( const EGameplayMode GameMode) const
overridevirtual

Implements ILevelSelectInterface.

997{
998 switch(GameMode)
999 {
1001 return SelectedCampaignLevel;
1003 return SelectedHordeLevel;
1005 return SelectedDebugLevel;
1007 default:
1009 }
1010}
FGameLevel SelectedHordeLevel
Definition EpicOnlineGameInstance.h:302
FGameLevel SelectedDebugLevel
Definition EpicOnlineGameInstance.h:304
FGameLevel SelectedMultiplayerLevel
Definition EpicOnlineGameInstance.h:300
FGameLevel SelectedCampaignLevel
Definition EpicOnlineGameInstance.h:298

◆ GetStats()

void UEpicOnlineGameInstance::GetStats ( TArray< FString > StatName)
virtual
1148{
1149 if(GetOnlineIdentity() != nullptr)
1150 {
1151 const IOnlineStatsPtr StatsPointer = OnlineSubsystem->GetStatsInterface();
1152 if(StatsPointer != nullptr)
1153 {
1154 TArray<TSharedRef<const FUniqueNetId>> UserVar;
1155 UserVar.Add(GetOnlineIdentity()->GetUniquePlayerId(0).ToSharedRef());
1156 StatsPointer->QueryStats(GetOnlineIdentity()->GetUniquePlayerId(0).ToSharedRef(), UserVar, StatName, FOnlineStatsQueryUsersStatsComplete::CreateUObject(this, &UEpicOnlineGameInstance::OnGetStatsComplete));
1157 }
1158 }
1159}
void OnGetStatsComplete(const FOnlineError &Result, const TArray< TSharedRef< const FOnlineStatsUserStats > > &UserStats)
Definition EpicOnlineGameInstance.cpp:1185

◆ Host()

void UEpicOnlineGameInstance::Host ( FOnlineSessionSettings HostSessionSettings)
overridevirtual

Implements IMenuSystem.

Reimplemented in UMenuSystemGameInstance.

685{
686
687}

◆ Init()

void UEpicOnlineGameInstance::Init ( )
overridevirtual

Reimplemented in UMenuSystemGameInstance.

65{
66 Super::Init();
67 OnlineSubsystem = IOnlineSubsystem::Get();
68 if(OnlineSubsystem != nullptr)
69 {
70 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance,Warning,TEXT("Found Subsystem %s"), *OnlineSubsystem->GetSubsystemName().ToString());}
71 OnlineSessionPtr = OnlineSubsystem->GetSessionInterface();
72 if(OnlineSessionPtr != nullptr)
73 {
74 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance,Warning,TEXT("Found Online Session Pointer"));}
75 // OnlineSessionPtr->OnFindSessionsCompleteDelegates.AddUObject(this, &UEpicOnlineGameInstance::OnFindSessionListCompleted);
76 OnlineSessionPtr->OnDestroySessionCompleteDelegates.AddUObject(this, &UEpicOnlineGameInstance::OnDestroySessionCompleted);
78 }
79 else{UE_LOG(LogOnlineGameInstance,Error,TEXT("Online Session Pointer FAILED"));;}
80 }
81 else
82 {
83 UE_LOG(LogOnlineGameInstance,Error,TEXT("Subsystem FAILED"));
84 }
85 if(GEngine != nullptr)
86 {
87 GEngine->OnNetworkFailure().AddUObject(this, &UEpicOnlineGameInstance::OnNetworkFailure);
88 }
89 if(LevelDataTable == nullptr)
90 {
91 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance,Error,TEXT("Level Data Table Null in GameInstance"));}
92 }
93 //- Set Default Selected Levels //
94 if(GetWorld() != nullptr)
95 {
100 }
101
102 //TEST Activement on STEAM
103 UpdateStats("stat_beta_played", 1);
104
105 //- Replay System //
106 // create a ReplayStreamer for FindReplays() and DeleteReplay(..)
107 EnumerateStreamsPtr = FNetworkReplayStreaming::Get().GetFactory().CreateReplayStreamer();
108 OnEnumerateStreamsCompleteDelegate = FEnumerateStreamsCallback::CreateUObject(this, &UEpicOnlineGameInstance::OnEnumerateStreamsComplete);
109 OnDeleteFinishedStreamCompleteDelegate = FDeleteFinishedStreamCallback::CreateUObject(this, &UEpicOnlineGameInstance::OnDeleteFinishedStreamComplete);
112 {
114 }
115}
void OnDeleteFinishedStreamComplete(const FDeleteFinishedStreamResult &Result)
Definition EpicOnlineGameInstance.cpp:414
void SetPlayerProfileName()
@ TODO REMOVE AFTER Loading Player PROFILE from save,
Definition EpicOnlineGameInstance.cpp:303
virtual void OnNetworkFailure(UWorld *World, UNetDriver *NewDriver, ENetworkFailure::Type FailureType, const FString &ErrorString)
Definition EpicOnlineGameInstance.cpp:1328
void OnReplayRenameFinishedComplete(const FRenameReplayResult &Result)
Definition EpicOnlineGameInstance.cpp:419
virtual void UpdateStats(FString StatName, int32 Amount)
Definition EpicOnlineGameInstance.cpp:1131
bool bAutoLoginToPlayFab
Definition EpicOnlineGameInstance.h:294
void OnDestroySessionCompleted(FName SessionName, bool bSuccess) const
Definition EpicOnlineGameInstance.cpp:1319
FRenameReplayCallback OnRenameReplayCompleteDelegate
Definition EpicOnlineGameInstance.h:338
void OnEnumerateStreamsComplete(const FEnumerateStreamsResult &Result) const
Definition EpicOnlineGameInstance.cpp:386
virtual void LoginToPlayFab() override
Definition EpicOnlineGameInstance.cpp:146
static FGameLevel GetDefaultLevel(const UObject *WorldContextObject, const EGameplayMode GameplayMode=EGameplayMode::Multiplayer)
Definition MenuBPLib.cpp:153

◆ Join()

void UEpicOnlineGameInstance::Join ( uint32 Index)
overridevirtual

Implements IMenuSystem.

Reimplemented in UMenuSystemGameInstance.

702{
703 if(!OnlineSessionPtr.IsValid()) return;
704 if(!OnlineSessionSearch.IsValid()) return;
705 OnlineSessionPtr->OnJoinSessionCompleteDelegates.AddUObject(this, &UEpicOnlineGameInstance::OnJoinSessionCompleted);
706 OnlineSessionPtr->JoinSession(0, SESSION_NAME, OnlineSessionSearch->SearchResults[Index]);
707}
void OnJoinSessionCompleted(FName SessionName, EOnJoinSessionCompleteResult::Type Result) const
Definition EpicOnlineGameInstance.cpp:958

◆ JoinManualAddress()

void UEpicOnlineGameInstance::JoinManualAddress ( const FString & IpAddress)
overridevirtual

Implements IMenuSystem.

Reimplemented in UMenuSystemGameInstance.

710{
711}

◆ LaunchInGameMenu()

void UEpicOnlineGameInstance::LaunchInGameMenu ( APlayerController * Player,
const bool bOpen = true )
overridevirtual

Implements IMenuSystem.

Reimplemented in UMenuSystemGameInstance.

432{
433 if(Player == nullptr){UE_LOG(LogOnlineGameInstance,Warning,TEXT("Player Controller NULL in Launch In Game Menu"));return;}
434 if(InGameMenuClass == nullptr){return;}
435 if(!Player->IsLocalController()){return;}
436 //- Create Widget //
437 if(InGameMenuWidget == nullptr || !InGameMenuWidget->IsInViewport())
438 {
439 InGameMenuWidget = CreateWidget<UInGameMenuSystemWidget>(Player, InGameMenuClass);
440 if(InGameMenuWidget == nullptr){UE_LOG(LogOnlineGameInstance,Warning,TEXT("InGameMenuWidget NULL in Launch In Game Menu")); return;}
441 //@TODO Check if Local Player works
442 InGameMenuWidget->SetOwningLocalPlayer(Player->GetLocalPlayer());
443 InGameMenuWidget->AddToViewport();
444 }
445 if(bInGameMenuOpen || !bOpen)
446 {
448 {
449 LaunchOptionsMenu(Player, InGameMenuWidget, false);
450 return;
451 }
452 InGameMenuWidget->SetOwningLocalPlayer(Player->GetLocalPlayer());
453 InGameMenuWidget->DeactivateWidget();
454 InGameMenuWidget->SetVisibility(ESlateVisibility::Collapsed);
455 const FInputModeGameOnly InputMode;
456 Player->SetInputMode(InputMode);
457 Player->bShowMouseCursor = false;
458 bInGameMenuOpen = false;
459 }
460 else
461 {
462 InGameMenuWidget->SetOwningLocalPlayer(Player->GetLocalPlayer());
463 InGameMenuWidget->SetVisibility(ESlateVisibility::Visible);
464 InGameMenuWidget->ActivateWidget();
465 const FInputModeGameAndUI InputMode;
466 Player->SetInputMode(InputMode);
467 Player->bShowMouseCursor = true;
468 bInGameMenuOpen = true;
469 }
471 {
472 const bool bGamePaused = UGameplayStatics::IsGamePaused(Player);
473 UGameplayStatics::SetGamePaused(Player, !bGamePaused);
474 }
475 //@bug Doesn't work
476 if(InGameMenuWidget != nullptr)
477 {
478 InGameMenuWidget->SetOwningLocalPlayer(Player->GetLocalPlayer());
479 }
480}
bool bOptionsMenuOpen
Definition EpicOnlineGameInstance.h:236
bool bInGameMenuOpen
Definition EpicOnlineGameInstance.h:235
class UInGameMenuSystemWidget * InGameMenuWidget
Definition EpicOnlineGameInstance.h:212
virtual EOnlineSubsystem GetOnlineSubsystem() const override
Definition EpicOnlineGameInstance.cpp:624
virtual bool GetIsPublicMatch() const override
Definition EpicOnlineGameInstance.cpp:611
virtual void LaunchOptionsMenu(APlayerController *Player, UUserWidget *CurrentWidget=nullptr, const bool bOpen=true) override
Definition EpicOnlineGameInstance.cpp:482

◆ LaunchOptionsMenu()

void UEpicOnlineGameInstance::LaunchOptionsMenu ( APlayerController * Player,
UUserWidget * CurrentWidget = nullptr,
const bool bOpen = true )
overridevirtual

Implements IMenuSystem.

483{
484 if(Player == nullptr){UE_LOG(LogOnlineGameInstance,Warning,TEXT("Player Controller NULL in UEpicOnlineGameInstance::LaunchOptionsMenu"));return;}
485 if(OptionsMenuClass == nullptr){return;}
486 if(!Player->IsLocalController()){return;}
487 //- Create Widget //
488 if(OptionsMenuWidget == nullptr || !OptionsMenuWidget->IsInViewport())
489 {
490 OptionsMenuWidget = CreateWidget<UOptionsMenuSystemWidget>(Player, OptionsMenuClass);
491 if(OptionsMenuWidget == nullptr){UE_LOG(LogOnlineGameInstance,Warning,TEXT("Options Menu NULL in UEpicOnlineGameInstance::LaunchOptionsMenu")); return;}
492 OptionsMenuWidget->AddToViewport();
493 }
494 if(CurrentWidget != nullptr && bOpen)
495 {
496 OptionsMenuWidget->SetOwnerWidget(CurrentWidget);
497 }
498 if(bOptionsMenuOpen || !bOpen)
499 {
500 UCommonActivatableWidget* CurrentActivatable = Cast<UCommonActivatableWidget>(CurrentWidget);
501 if(CurrentActivatable != nullptr)
502 {
503 CurrentActivatable->SetVisibility(ESlateVisibility::Visible);
504 CurrentActivatable->ActivateWidget();
505 }
506 OptionsMenuWidget->DeactivateWidget();
507 OptionsMenuWidget->SetVisibility(ESlateVisibility::Collapsed);
508 bOptionsMenuOpen = false;
509 }
510 else
511 {
512 UCommonActivatableWidget* CurrentActivatable = Cast<UCommonActivatableWidget>(CurrentWidget);
513 if(CurrentActivatable != nullptr)
514 {
515 CurrentActivatable->DeactivateWidget();
516 CurrentActivatable->SetVisibility(ESlateVisibility::Collapsed);
517 }
518 OptionsMenuWidget->SetVisibility(ESlateVisibility::Visible);
519 OptionsMenuWidget->ActivateWidget();
520 bOptionsMenuOpen = true;
521 }
522 //@bug Doesn't work
523 if(OptionsMenuWidget != nullptr)
524 {
525 OptionsMenuWidget->SetOwningPlayer(Player);
526 }
527}
class UOptionsMenuSystemWidget * OptionsMenuWidget
Definition EpicOnlineGameInstance.h:216
void SetOwnerWidget(UUserWidget *Owner)
Definition MenuSystemWidget.h:44

◆ LoadMenu()

void UEpicOnlineGameInstance::LoadMenu ( )
overridevirtual

Implements IMenuSystem.

Reimplemented in UMenuSystemGameInstance.

1162{
1163 if (!ensure(MenuClass != nullptr)) return;
1164 MainMenu = CreateWidget<UMenuSystemWidget>(GetFirstLocalPlayerController(), MenuClass);
1165 if (!ensure(MainMenu != nullptr)) return;
1166 MainMenu->Setup();
1168 //@TODO ADd Dynamic for, Playfab Login, Player Loaded, etc.
1169 //? Add dynamic to Menu Class
1171}
class UMenuSystemWidget * MainMenu
Definition EpicOnlineGameInstance.h:223
FOnServersFound OnServersFoundChanged
Definition EpicOnlineGameInstance.h:49
virtual void SetServerList(const TArray< FServerRow > &ServerInfo)
Definition MenuSystemWidget.cpp:120
void Setup()
Definition MenuSystemWidget.cpp:57
void SetMenuInterface(IMenuSystem *Interface)
Definition MenuSystemWidget.cpp:52

◆ LoadOfflinePlayerProfile()

bool UEpicOnlineGameInstance::LoadOfflinePlayerProfile ( FUserProfile & OfflineProfile)
overridevirtual

Implements IMenuSystem.

1055{
1056 if(GetFirstLocalPlayerController() == nullptr){UE_LOG(LogOnlineGameInstance, Error, TEXT("Load OFFLINE Controller ERROR"));return false;}
1057 const FString SlotName = GetSaveInfoFromSlot(CurrentSaveSlot).Name;
1058 if(UGameplayStatics::DoesSaveGameExist(SlotName, 0))
1059 {
1060 USaveGame* LoadedSaveGame = UGameplayStatics::LoadGameFromSlot(SlotName, 0);
1061 const UPlayerProfileSaveGame* LoadedPlayerSaveGame = Cast<UPlayerProfileSaveGame>(LoadedSaveGame);
1062 if(LoadedPlayerSaveGame != nullptr)
1063 {
1064 //@ TODO Check for alterations //
1065 //- Check Online profile vs fetched online profile .
1066
1067 //- Add Any other extras that have been saved //
1068 OfflinePlayerProfile = LoadedPlayerSaveGame->OfflineProfile;
1069 // OnlinePlayerProfile = LoadedPlayerSaveGame->OnlineProfile;
1070 SetDifficultyLevel(LoadedPlayerSaveGame->DifficultyLevel);
1072 OfflineProfile = OfflinePlayerProfile;
1073 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Warning, TEXT("Loaded Offline Profile Save Game Into Player State"));}
1074 return true;
1075 // IOnlinePlayerState* OnlinePlayer = Cast<IOnlinePlayerState>(GetFirstLocalPlayerController()->PlayerState);
1076 // if(OnlinePlayer != nullptr)
1077 // {
1078 // OnlinePlayer->SetUserProfile(OfflinePlayerProfile);
1079 // if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Warning, TEXT("Loaded Offline Profile Save Game Into Player State"));}
1080 // return true;
1081 // }
1082 }
1083 }
1084 else
1085 {
1086 //- No Save Game //
1087 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Error, TEXT("No Save File Exists"));}
1088 return false;
1089 }
1090 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Error, TEXT("LOAD OFFLINE PROFILE ERROR"));}
1091 return false;
1092}
virtual FUserSaveGame GetSaveInfoFromSlot(const int32 Slot) override
Definition EpicOnlineGameInstance.h:114
virtual void SetDifficultyLevel(const EDifficultyLevel NewDifficultyLevel) override
Definition EpicOnlineGameInstance.cpp:131
Definition PlayerProfileSaveGame.h:15
FUserProfile OfflineProfile
Definition PlayerProfileSaveGame.h:20
EDifficultyLevel DifficultyLevel
Definition PlayerProfileSaveGame.h:25
FString Name
Definition MenuData.h:75

◆ LoginToEpicOnline()

void UEpicOnlineGameInstance::LoginToEpicOnline ( FString ID = "",
FString Token = "",
FString LoginType = "accountportal" )
overridevirtual

Implements IMenuSystem.

724{
725 if(GetOnlineIdentity() != nullptr)
726 {
727 FOnlineAccountCredentials AccountDetails;
728 AccountDetails.Id = ID;
729 AccountDetails.Token = Token;
730 AccountDetails.Type = LoginType;
731 GetOnlineIdentity()->OnLoginCompleteDelegates->AddUObject(this, &UEpicOnlineGameInstance::OnLoginEOSCompleted);
732 GetOnlineIdentity()->Login(0, AccountDetails);
733 }
734}
void OnLoginEOSCompleted(int32 LocalUserNum, bool bSuccess, const FUniqueNetId &UserID, const FString &Error) const
Definition EpicOnlineGameInstance.cpp:736

◆ LoginToPlayFab()

void UEpicOnlineGameInstance::LoginToPlayFab ( )
overridevirtual

Implements IPlayFabMenu.

147{
148 ClientAPI = IPlayFabModuleInterface::Get().GetClientAPI();
149 if(ClientAPI == nullptr){return;}
150 PlayFab::ClientModels::FLoginWithSteamRequest Request;
151 Request.CreateAccount = true;
152 Request.SteamTicket = GetAuthToken();
153 ClientAPI->LoginWithSteam(Request,
154 PlayFab::UPlayFabClientAPI::FLoginWithSteamDelegate::CreateUObject(this, &UEpicOnlineGameInstance::OnPlayFabLoginSuccess),
155 PlayFab::FPlayFabErrorDelegate::CreateUObject(this, &UEpicOnlineGameInstance::OnPlayFabError)
156 );
157}
void OnPlayFabLoginSuccess(const PlayFab::ClientModels::FLoginResult &Result)
Definition EpicOnlineGameInstance.cpp:180
void OnPlayFabError(const PlayFab::FPlayFabCppError &ErrorResult)
Definition EpicOnlineGameInstance.cpp:164
PlayFabClientPtr ClientAPI
Definition EpicOnlineGameInstance.h:347
virtual FString GetAuthToken() const override
Definition EpicOnlineGameInstance.cpp:136

◆ Logout()

void UEpicOnlineGameInstance::Logout ( ) const
overridevirtual

Implements IMenuSystem.

747{
748 if(!GetIsPlayerLoggedIn()){if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Warning, TEXT("Player Already Logged out"));}return;}
749 if(OnlineSubsystem != nullptr)
750 {
751 const IOnlineIdentityPtr OnlineIdentity = OnlineSubsystem->GetIdentityInterface();
752 if(OnlineIdentity != nullptr)
753 {
754 OnlineIdentity->OnLogoutCompleteDelegates->AddUObject(this, &UEpicOnlineGameInstance::OnLogoutComplete);
755 OnlineIdentity->Logout(0);
756 }
757 }
758}
void OnLogoutComplete(const int32 ResultCode, const bool bSuccess) const
Definition EpicOnlineGameInstance.cpp:760

◆ OnCreateSessionCompleted()

void UEpicOnlineGameInstance::OnCreateSessionCompleted ( FName SessionName,
bool bSuccess ) const
protected
827{
828 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance,Warning,TEXT("Session Name: %s"), *SessionName.ToString());}
829 if(bSuccess)
830 {
831 GetWorld()->ServerTravel(LobbyLevelText);
832 }
833 else
834 {
835 UE_LOG(LogOnlineGameInstance,Error,TEXT("Failed to create session"));
836 }
837}
FString LobbyLevelText
Definition EpicOnlineGameInstance.h:166

◆ OnDeleteFinishedStreamComplete()

void UEpicOnlineGameInstance::OnDeleteFinishedStreamComplete ( const FDeleteFinishedStreamResult & Result)
private
415{
416 FindReplays();
417}
virtual void FindReplays() override
Definition EpicOnlineGameInstance.cpp:377

◆ OnDestroySessionCompleted()

void UEpicOnlineGameInstance::OnDestroySessionCompleted ( FName SessionName,
bool bSuccess ) const
protected
1320{
1321 if(bSuccess)
1322 {
1323 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance,Warning,TEXT("%s Session Destroyed"), *SessionName.ToString());}
1324 }
1325 else{UE_LOG(LogOnlineGameInstance,Error,TEXT("%s Session FAILED to destroy"), *SessionName.ToString());}
1326}

◆ OnEnumerateStreamsComplete()

void UEpicOnlineGameInstance::OnEnumerateStreamsComplete ( const FEnumerateStreamsResult & Result) const
private
387{
388 TArray<FReplayInfo> AllReplays;
389 for (const FNetworkReplayStreamInfo& StreamInfo : Result.FoundStreams)
390 {
391 if(!StreamInfo.bIsLive)
392 {
393 AllReplays.Add(FReplayInfo(StreamInfo.Name, StreamInfo.FriendlyName, StreamInfo.Timestamp, StreamInfo.LengthInMS, StreamInfo.SizeInBytes));
394 }
395 }
396 OnFindReplaysComplete.Broadcast(AllReplays);
397}
FOnFindReplaysComplete OnFindReplaysComplete
Definition EpicOnlineGameInstance.h:53
Definition MenuData.h:317

◆ OnFindSessionCompleted()

void UEpicOnlineGameInstance::OnFindSessionCompleted ( bool bSuccess)
protected
936{
937 if(OnlineSessionPtr != nullptr)
938 {
939 OnlineSessionPtr->OnFindSessionsCompleteDelegates.RemoveAll(this);
940 }
941 if(bSuccess)
942 {
943 if(OnlineSessionPtr == nullptr){UE_LOG(LogOnlineGameInstance, Error, TEXT("Online Session PTR FAILED, create EOS session"));return;}
944 OnlineSessionPtr->OnJoinSessionCompleteDelegates.AddUObject(this, &UEpicOnlineGameInstance::OnJoinSessionCompleted);
945 if(OnlineSessionSearch->SearchResults.IsValidIndex(0))
946 {
947 OnlineSessionPtr->JoinSession(0, SESSION_NAME, OnlineSessionSearch->SearchResults[0]);
948 return;
949 }
950 }
951 if(MainMenu != nullptr)
952 {
953 const FModalData QuickMatchModal = FModalData(EMenuSystemModalAlert::General, EMenuSystemModalType::Popup1, "Search Complete", "No Matches Found", "", "Close");
954 MainMenu->OpenConfirmationMessage(QuickMatchModal);
955 }
956}
virtual void OpenConfirmationMessage(const FModalData &ModalData)
Definition MenuSystemWidget.cpp:69
Definition MenuData.h:266

◆ OnFindSessionListCompleted()

void UEpicOnlineGameInstance::OnFindSessionListCompleted ( bool bSuccess) const
protected

Remove Delegate

862{
863 if(OnlineSessionPtr != nullptr)
864 {
865 OnlineSessionPtr->OnFindSessionsCompleteDelegates.RemoveAll(this);
866 }
867 if(bSuccess && OnlineSessionSearch.IsValid())
868 {
869 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance,Warning, TEXT("Find Session Complete"));}
870 TArray<FServerRow> ServerInfo;
871 FServerRow TestData;
872 for(const FOnlineSessionSearchResult& It : OnlineSessionSearch->SearchResults)
873 {
874 FServerRow ServerData;
875 ServerData.MaxPlayers = It.Session.SessionSettings.NumPublicConnections;
876 ServerData.CurrentPlayers = (ServerData.MaxPlayers - It.Session.NumOpenPublicConnections);
877 ServerData.HostUsername = It.Session.OwningUserName;
878 ServerData.Ping = It.PingInMs;
879 ServerData.ServerName = It.GetSessionIdStr();
880 FString ServerName;
881 if(It.Session.SessionSettings.Get(SERVER_NAME_KEY, ServerName))
882 {
883 ServerData.ServerName = ServerName;
884 }
885 // else
886 // {
887 // ServerData.ServerName = "Error in Server Name";
888 // }
889 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance,Warning, TEXT("Session Found: %s"), *ServerData.ServerName);}
890 ServerInfo.Add(ServerData);
891 }
892 if(MainMenu != nullptr)
893 {
894 if(OnlineSessionSearch->SearchResults.IsEmpty())
895 {
896 const FModalData NoServersModal = FModalData(EMenuSystemModalAlert::General, EMenuSystemModalType::Popup1, "Search Complete", "No Servers Found", "", "Close");
897 MainMenu->OpenConfirmationMessage(NoServersModal);
898 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Warning, TEXT("No Servers Found"));}
899 }
900 MainMenu->SetServerList(ServerInfo);
901 }
903 // OnServersFoundChanged.Broadcast(ServerInfo);
904 }
905 else
906 {
907 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance,Warning, TEXT("Find Session Failed"));}
908 }
909}
Definition MenuData.h:90
int32 Ping
Definition MenuData.h:101
int32 CurrentPlayers
Definition MenuData.h:95
FString ServerName
Definition MenuData.h:93
FString HostUsername
Definition MenuData.h:99
int32 MaxPlayers
Definition MenuData.h:97

◆ OnGetStatsComplete()

void UEpicOnlineGameInstance::OnGetStatsComplete ( const FOnlineError & Result,
const TArray< TSharedRef< const FOnlineStatsUserStats > > & UserStats )
protected
1187{
1188 if(Result.WasSuccessful())
1189 {
1190 for(const auto StatsVar : UserStats)
1191 {
1192 for(auto StoredValueRef : StatsVar->Stats)
1193 {
1194 const FString KeyName = StoredValueRef.Key;
1195 int32 Value;
1196 StoredValueRef.Value.GetValue(Value);
1197 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Warning, TEXT("Stat with name %s is %i"), *KeyName, Value);}
1198 }
1199 }
1200 }
1201 else
1202 {
1203 UE_LOG(LogOnlineGameInstance, Error, TEXT("Get Stats Failed"));
1204 }
1205}

◆ OnGetUserFileComplete()

void UEpicOnlineGameInstance::OnGetUserFileComplete ( bool bSuccess,
const FUniqueNetId & UserID,
const FString & FileName ) const
protected
1274{
1275 if(bSuccess)
1276 {
1277 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Warning, TEXT("On Read File Success"));}
1278 ReadPlayerData(FileName);
1279 }
1280 else{UE_LOG(LogOnlineGameInstance, Warning, TEXT("On Read File Failed"));}
1281}
void ReadPlayerData(const FString &FileName) const
Definition EpicOnlineGameInstance.cpp:1284

◆ OnJoinSessionCompleted()

void UEpicOnlineGameInstance::OnJoinSessionCompleted ( FName SessionName,
EOnJoinSessionCompleteResult::Type Result ) const
protected
959{
960 if(Result == EOnJoinSessionCompleteResult::Success)
961 {
962 if(OnlineSessionPtr == nullptr){UE_LOG(LogOnlineGameInstance, Error, TEXT("Online Session PTR FAILED, create EOS session"));return;}
963 if(APlayerController* PlayerController = GetFirstLocalPlayerController())
964 {
965 FString JoinAddress;
966 OnlineSessionPtr->GetResolvedConnectString(SESSION_NAME, JoinAddress);
967 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance,Warning,TEXT("Join Address: %s"), *JoinAddress);}
968 if(!JoinAddress.IsEmpty())
969 {
970 PlayerController->ClientTravel(JoinAddress, ETravelType::TRAVEL_Absolute);
971 }
972 }
973 }
974}

◆ OnLoginEOSCompleted()

void UEpicOnlineGameInstance::OnLoginEOSCompleted ( int32 LocalUserNum,
bool bSuccess,
const FUniqueNetId & UserID,
const FString & Error ) const
protected
738{
740 {
741 if(bSuccess){UE_LOG(LogOnlineGameInstance, Warning, TEXT("Login Success - UserID - %s"), *UserID.ToString());}
742 else{UE_LOG(LogOnlineGameInstance, Error, TEXT("Login Failed - %s"), *Error);}
743 }
744}

◆ OnLogoutComplete()

void UEpicOnlineGameInstance::OnLogoutComplete ( const int32 ResultCode,
const bool bSuccess ) const
protected
761{
762 if(bSuccess)
763 {
764 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Warning, TEXT("Logout Success"));}
765 }
766 else
767 {
768 UE_LOG(LogOnlineGameInstance, Error, TEXT("Logout Failed, Result Code: %i"), ResultCode);
769 }
770}

◆ OnNetworkFailure()

void UEpicOnlineGameInstance::OnNetworkFailure ( UWorld * World,
UNetDriver * NewDriver,
ENetworkFailure::Type FailureType,
const FString & ErrorString )
privatevirtual
1330{
1331 FString ErrorType = "Connection Lost ";
1332 switch (FailureType)
1333 {
1334 case (ENetworkFailure::ConnectionLost):
1335 ErrorType = "Connection Lost ";
1336 break;
1337 case (ENetworkFailure::ConnectionTimeout):
1338 ErrorType = "Connection Timeout ";
1339 break;
1340 case (ENetworkFailure::FailureReceived):
1341 ErrorType = "Failure Received ";
1342 break;
1343 case (ENetworkFailure::OutdatedClient):
1344 ErrorType = "Outdated Client ";
1345 break;
1346 case (ENetworkFailure::OutdatedServer):
1347 ErrorType = "Outdated Server ";
1348 break;
1349 case (ENetworkFailure::NetChecksumMismatch):
1350 ErrorType = "Net Checksum Mismatch ";
1351 break;
1352 case (ENetworkFailure::NetGuidMismatch):
1353 ErrorType = "Net Guid Mismatch ";
1354 break;
1355 case (ENetworkFailure::PendingConnectionFailure):
1356 ErrorType = "Pending Connection Failure ";
1357 break;
1358 case (ENetworkFailure::NetDriverAlreadyExists):
1359 ErrorType = "Net Driver Already Exists ";
1360 break;
1361 case (ENetworkFailure::NetDriverCreateFailure):
1362 ErrorType = "Net Driver Create Failure ";
1363 break;
1364 case (ENetworkFailure::NetDriverListenFailure):
1365 ErrorType = "Net Driver Listen Failure ";
1366 break;
1367 default:
1368 ErrorType = "Unknown Error ";
1369 break;
1370 }
1371 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance,Error,TEXT("%s %s "), *ErrorType, *ErrorString);}
1372 if(MainMenu != nullptr)
1373 {
1374 const FModalData NetworkModal = FModalData(EMenuSystemModalAlert::Error, EMenuSystemModalType::Popup1, "Network Error", (ErrorType + ErrorString), "", "Close");
1375 MainMenu->OpenConfirmationMessage(NetworkModal);
1376 }
1377}

◆ OnPlayFabDisplayChangedSuccess()

void UEpicOnlineGameInstance::OnPlayFabDisplayChangedSuccess ( const PlayFab::AdminModels::FUpdateUserTitleDisplayNameResult & Result)
private
198{
199 UE_LOG(LogOnlineGameInstance, Warning, TEXT("Display Name Changed To: %s!"), *Result.DisplayName);
200}

◆ OnPlayFabError()

void UEpicOnlineGameInstance::OnPlayFabError ( const PlayFab::FPlayFabCppError & ErrorResult)
private
165{
166 UE_LOG(LogTemp, Error, TEXT("Something went wrong with your first API call.\nHere's some debug information:\n%s"), *ErrorResult.GenerateErrorReport());
167}

◆ OnPlayFabLGetInventorySuccess()

void UEpicOnlineGameInstance::OnPlayFabLGetInventorySuccess ( const PlayFab::ClientModels::FGetUserInventoryResult & Result)
private
204{
205 const int32* CurrencyPtr = Result.VirtualCurrency.Find(CurrencyCode);
206 PlayFabInventory = Result.Inventory;
207 if(CurrencyPtr == nullptr){UE_LOG(LogOnlineGameInstance, Error, TEXT("Currency NOT FOUND"));return;}
208 PlayFabCurrency = *CurrencyPtr;
209 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Warning, TEXT("Currency: %.2f!"), PlayFabCurrency);}
210}
FString CurrencyCode
Definition EpicOnlineGameInstance.h:296

◆ OnPlayFabLoginSuccess()

void UEpicOnlineGameInstance::OnPlayFabLoginSuccess ( const PlayFab::ClientModels::FLoginResult & Result)
private
181{
182 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Warning, TEXT("Congratulations, you made your first successful API call!"));}
183 PlayFabID = Result.PlayFabId;
184 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Warning, TEXT("PlayFab ID: %s"), *PlayFabID);}
185 if(Result.NewlyCreated)
186 {
187 UE_LOG(LogTemp, Warning, TEXT("New Account Created!"));
189 }
190 PlayFab::ClientModels::FGetUserInventoryRequest Request;
191 ClientAPI->GetUserInventory(Request, PlayFab::UPlayFabClientAPI::FGetUserInventoryDelegate::CreateUObject(this, &UEpicOnlineGameInstance::OnPlayFabLGetInventorySuccess),
192 PlayFab::FPlayFabErrorDelegate::CreateUObject(this, &UEpicOnlineGameInstance::OnPlayFabError));
193}
void OnPlayFabLGetInventorySuccess(const PlayFab::ClientModels::FGetUserInventoryResult &Result)
Definition EpicOnlineGameInstance.cpp:202
void SetPlayFabDisplayName()
Definition EpicOnlineGameInstance.cpp:169

◆ OnReplayRenameFinishedComplete()

void UEpicOnlineGameInstance::OnReplayRenameFinishedComplete ( const FRenameReplayResult & Result)
private
420{
421 if(Result.WasSuccessful())
422 {
423 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance,Warning, TEXT("Replay Renamed Successfully"));}
424 }
425 FindReplays();
426}

◆ OnUpdateStatsComplete()

void UEpicOnlineGameInstance::OnUpdateStatsComplete ( const FOnlineError & Result) const
protected
1174{
1175 if(Result == FOnlineError::Success())
1176 {
1177 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Warning, TEXT("Update Stats Success"));}
1178 }
1179 else
1180 {
1181 UE_LOG(LogOnlineGameInstance, Error, TEXT("Update Stats Failed"));
1182 }
1183}

◆ OnWriteUserFileComplete()

void UEpicOnlineGameInstance::OnWriteUserFileComplete ( bool bSuccess,
const FUniqueNetId & UserID,
const FString & FileName ) const
protected
1251{
1252 if(bSuccess)
1253 {
1254 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance,Warning,TEXT("Uploading File Success %s"), *FileName);}
1255 }
1256 else{UE_LOG(LogOnlineGameInstance, Warning, TEXT("Uploading Failed"));}
1257}

◆ OpenReplayMenu()

bool UEpicOnlineGameInstance::OpenReplayMenu ( APlayerController * Player,
const bool bOpen = true )
overrideprotectedvirtual

Implements IReplayClipInterface.

316{
317 if(Player == nullptr){UE_LOG(LogOnlineGameInstance,Warning,TEXT("Player Controller NULL in OpenReplayMenu"));return false;}
318 if(ReplayMenuClass == nullptr){return false;}
319 if(!Player->IsLocalController()){return false;}
320 //- Create Widget //
321 if(ReplayMenu == nullptr || !ReplayMenu->IsInViewport())
322 {
323 ReplayMenu = CreateWidget<UReplayMenu>(Player, ReplayMenuClass);
324 if(ReplayMenu == nullptr){UE_LOG(LogOnlineGameInstance,Warning,TEXT("ReplayMenu NULL OpenReplayMenu")); return false;}
326 ReplayMenu->AddToViewport();
327 FindReplays();
328 }
329 if(!bOpen)
330 {
331 ReplayMenu->SetVisibility(ESlateVisibility::Collapsed);
332 return false;
333 }
334
335 ReplayMenu->SetVisibility(ESlateVisibility::Visible);
336 const FInputModeGameAndUI InputMode;
337 Player->SetInputMode(InputMode);
338 Player->bShowMouseCursor = true;
339 return true;
340}
class UReplayMenu * ReplayMenu
Definition EpicOnlineGameInstance.h:228
virtual void OnFindReplays(const TArray< FReplayInfo > &Replays)
Definition ReplayMenu.cpp:57

◆ Options()

void UEpicOnlineGameInstance::Options ( )
overridevirtual

Implements IMenuSystem.

Reimplemented in UMenuSystemGameInstance.

698{
699}

◆ PlayReplayFromBP()

void UEpicOnlineGameInstance::PlayReplayFromBP ( FString ReplayName)
overrideprotectedvirtual

Start playback for a previously recorded Replay, from blueprint

Implements IReplayClipInterface.

373{
374 PlayReplay(ReplayName);
375}

◆ Quit()

void UEpicOnlineGameInstance::Quit ( APlayerController * Player)
overridevirtual

Implements IMenuSystem.

Reimplemented in UMenuSystemGameInstance.

714{
715 if (!ensure(Player != nullptr)) return;
716 UKismetSystemLibrary::QuitGame(GetWorld(), Player, EQuitPreference::Quit, false);
717}

◆ ReadPlayerData()

void UEpicOnlineGameInstance::ReadPlayerData ( const FString & FileName) const
1285{
1286 if(GetOnlineIdentity() != nullptr)
1287 {
1288 const IOnlineUserCloudPtr UserCloud = OnlineSubsystem->GetUserCloudInterface();
1289 if(UserCloud != nullptr)
1290 {
1291 const TSharedPtr<const FUniqueNetId> UserID = GetOnlineIdentity()->GetUniquePlayerId(0).ToSharedRef();
1292 TArray<uint8> UserData;
1293 UserCloud->GetFileContents(*UserID, FileName, UserData);
1294 OnFileDataFound.Broadcast(FileName, UserData);
1295 }
1296 }
1297}
FOnFileDataFound OnFileDataFound
Definition EpicOnlineGameInstance.h:51

◆ RenameReplay()

void UEpicOnlineGameInstance::RenameReplay ( const FString & ReplayName,
const FString & NewFriendlyReplayName )
overrideprotectedvirtual

Apply a new custom name to the replay (for UI only)

Implements IReplayClipInterface.

400{
401 if(EnumerateStreamsPtr.Get() != nullptr)
402 {
403 EnumerateStreamsPtr.Get()->RenameReplayFriendlyName(ReplayName, NewFriendlyReplayName, OnRenameReplayCompleteDelegate);
404 }
405}

◆ RestartLevel()

void UEpicOnlineGameInstance::RestartLevel ( ) const
virtual

Implements IMenuSystem.

578{
579 if(GetWorld() == nullptr){if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Error, TEXT("GetWorld Failed UEpicOnlineGameInstance::RestartLevel"));}return;}
580 const FName LevelName = FName(UGameplayStatics::GetCurrentLevelName(this));
581 UGameplayStatics::OpenLevel(GetWorld(), LevelName);
582}

◆ ReturnToMainMenu()

void UEpicOnlineGameInstance::ReturnToMainMenu ( )
overrideprotectedvirtual
1095{
1096 Super::ReturnToMainMenu();
1097 //-@ TODO Extract this to function, RemoveSplitscreenPlayers()
1098 const int MaxSplitScreenPlayers = 4;
1099 ULocalPlayer* PlayersToRemove[MaxSplitScreenPlayers];
1100 int RemIndex = 0;
1101
1102 for (FConstPlayerControllerIterator Iterator = GEngine->GameViewport->GetWorld()->GetPlayerControllerIterator(); Iterator; ++Iterator)
1103 {
1104 // Remove only local split screen players
1105 const TWeakObjectPtr<APlayerController> Controller = *Iterator;
1106 if (Controller.Get() && Controller->IsLocalController() && !Controller->IsPrimaryPlayer())
1107 {
1108
1109 ULocalPlayer* ExPlayer = Cast<ULocalPlayer>(Controller->Player);
1110 if (ExPlayer)
1111 {
1112 PlayersToRemove[RemIndex++] = ExPlayer;
1113 Controller->PawnPendingDestroy(Controller->GetPawn());
1114 }
1115 }
1116 }
1117 for (int i = 0; i < RemIndex; ++i)
1118 {
1119 RemoveLocalPlayer(PlayersToRemove[i]);
1120 }
1121 //-
1122 bInGameMenuOpen = false;
1123 bOptionsMenuOpen = false;
1124}

◆ SaveOfflinePlayerProfile()

bool UEpicOnlineGameInstance::SaveOfflinePlayerProfile ( )
overridevirtual

Implements IMenuSystem.

1013{
1014 //- TODO Slot
1015 if(GetFirstLocalPlayerController() == nullptr){UE_LOG(LogOnlineGameInstance, Error, TEXT("Save OFFLINE Controller ERROR"));return false;}
1016 const IOnlinePlayerState* OnlinePlayer = Cast<IOnlinePlayerState>(GetFirstLocalPlayerController()->PlayerState);
1017 if(OnlinePlayer != nullptr)
1018 {
1019 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Warning, TEXT("Got Player State From Controller"));}
1020 OfflinePlayerProfile = OnlinePlayer->GetUserProfile();
1021 }
1022 //- TODO Check this actually gets something
1023 const FString SlotName = GetSaveInfoFromSlot(CurrentSaveSlot).Name;
1024 if(UGameplayStatics::DoesSaveGameExist(SlotName, 0))
1025 {
1026 USaveGame* LoadedSaveGame = UGameplayStatics::LoadGameFromSlot(SlotName, 0);
1027 UPlayerProfileSaveGame* LoadedPlayerSaveGame = Cast<UPlayerProfileSaveGame>(LoadedSaveGame);
1028 if(LoadedPlayerSaveGame != nullptr)
1029 {
1030 LoadedPlayerSaveGame->OfflineProfile = OfflinePlayerProfile;
1031 // LoadedPlayerSaveGame->OnlineProfile = OnlinePlayerProfile;
1032 LoadedPlayerSaveGame->DifficultyLevel = GetDifficultyLevel();
1033 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Warning, TEXT("Saved Offline Profile Save Game"));}
1034 return UGameplayStatics::SaveGameToSlot(LoadedPlayerSaveGame, SlotName, 0);
1035 }
1036 }
1037 else
1038 {
1039 USaveGame* NewSaveGame = UGameplayStatics::CreateSaveGameObject(UPlayerProfileSaveGame::StaticClass());
1040 UPlayerProfileSaveGame* NewOfflineProfileSaveGame = Cast<UPlayerProfileSaveGame>(NewSaveGame);
1041 if(NewOfflineProfileSaveGame != nullptr)
1042 {
1043 NewOfflineProfileSaveGame->OfflineProfile = OfflinePlayerProfile;
1044 // NewOfflineProfileSaveGame->OnlineProfile = OnlinePlayerProfile;
1045 NewOfflineProfileSaveGame->DifficultyLevel = GetDifficultyLevel();
1046 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Warning, TEXT("Created New Offline Profile Save Game"));}
1047 return UGameplayStatics::SaveGameToSlot(NewOfflineProfileSaveGame, SlotName, 0);
1048 }
1049 }
1050 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Error, TEXT("Save OFFLINE PROFILE ERROR"));}
1051 return false;
1052}
Definition OnlinePlayerState.h:18
virtual FUserProfile GetUserProfile() const =0
virtual EDifficultyLevel GetDifficultyLevel() const override
Definition EpicOnlineGameInstance.cpp:126

◆ SearchServers()

void UEpicOnlineGameInstance::SearchServers ( )
overridevirtual

Implements IMenuSystem.

Reimplemented in UMenuSystemGameInstance.

844{
845 if(OnlineSessionPtr == nullptr){UE_LOG(LogOnlineGameInstance, Error, TEXT("Online Session PTR FAILED, SearchServers"));return;}
846 OnlineSessionSearch = MakeShareable(new FOnlineSessionSearch());
847 if(OnlineSessionSearch.IsValid())
848 {
849 if(IOnlineSubsystem::Get()->GetSubsystemName() == "NULL")
850 {
851 OnlineSessionSearch->bIsLanQuery = true;
852 }
853 OnlineSessionSearch->MaxSearchResults = 100;
854 OnlineSessionSearch->QuerySettings.Set(SEARCH_PRESENCE, true, EOnlineComparisonOp::Equals);
855 OnlineSessionPtr->OnFindSessionsCompleteDelegates.AddUObject(this, &UEpicOnlineGameInstance::OnFindSessionListCompleted);
856 OnlineSessionPtr->FindSessions(0, OnlineSessionSearch.ToSharedRef());
857 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Warning, TEXT("Searching For sessions..."));}
858 }
859}
void OnFindSessionListCompleted(bool bSuccess) const
Definition EpicOnlineGameInstance.cpp:861

◆ SetCurrentSaveSlot()

virtual void UEpicOnlineGameInstance::SetCurrentSaveSlot ( const int32 NewSaveSlot)
inlineoverridevirtual

Implements IMenuSystem.

109{CurrentSaveSlot = NewSaveSlot;};

◆ SetDifficultyLevel()

void UEpicOnlineGameInstance::SetDifficultyLevel ( const EDifficultyLevel NewDifficultyLevel)
overridevirtual

Implements IDifficultyInterface.

132{
133 DifficultyLevel = NewDifficultyLevel;
134}

◆ SetMinNumberOfPlayersToStart()

virtual void UEpicOnlineGameInstance::SetMinNumberOfPlayersToStart ( const int32 Num)
inlineoverridevirtual

Implements IMenuSystem.

◆ SetPlayerProfileName()

void UEpicOnlineGameInstance::SetPlayerProfileName ( )
private

@ TODO REMOVE AFTER Loading Player PROFILE from save,

Temp Use for Offline AS well //

304{
307 //@ TODO Fill out the rest of the player profile items
308}
virtual FString GetPlayerUserName() const override
Definition EpicOnlineGameInstance.cpp:247
FString DisplayName
Definition BaseData.h:1243

◆ SetPlayFabDisplayName()

void UEpicOnlineGameInstance::SetPlayFabDisplayName ( )
private
170{
171 AdminAPI = IPlayFabModuleInterface::Get().GetAdminAPI();
172 PlayFab::AdminModels::FUpdateUserTitleDisplayNameRequest Request;
173 Request.DisplayName = GetPlayerUserName();
174 Request.PlayFabId = PlayFabID;
175 AdminAPI->UpdateUserTitleDisplayName(Request,
176 PlayFab::UPlayFabAdminAPI::FUpdateUserTitleDisplayNameDelegate::CreateUObject(this, &UEpicOnlineGameInstance::OnPlayFabDisplayChangedSuccess),
177 PlayFab::FPlayFabErrorDelegate::CreateUObject(this, &UEpicOnlineGameInstance::OnPlayFabError));
178}
PlayFabAdminPtr AdminAPI
Definition EpicOnlineGameInstance.h:348
void OnPlayFabDisplayChangedSuccess(const PlayFab::AdminModels::FUpdateUserTitleDisplayNameResult &Result)
Definition EpicOnlineGameInstance.cpp:196

◆ SetSelectedLevel()

void UEpicOnlineGameInstance::SetSelectedLevel ( const FGameLevel GameLevel,
const EGameplayMode GameMode )
overridevirtual

Implements ILevelSelectInterface.

977{
978 switch(GameMode)
979 {
981 SelectedCampaignLevel = GameLevel;
982 break;
984 SelectedHordeLevel = GameLevel;
985 break;
987 SelectedDebugLevel = GameLevel;
988 break;
990 default:
991 SelectedMultiplayerLevel = GameLevel;
992 break;
993 }
994}

◆ Shutdown()

void UEpicOnlineGameInstance::Shutdown ( )
overridevirtual
118{
119 if(!UKismetSystemLibrary::IsStandalone(this))
120 {
122 }
123 Super::Shutdown();
124}
virtual void DestroySession() override
Definition EpicOnlineGameInstance.cpp:1304

◆ SinglePlayer()

void UEpicOnlineGameInstance::SinglePlayer ( )
overridevirtual

Implements IMenuSystem.

Reimplemented in UMenuSystemGameInstance.

690{
691}

◆ StartCampaign()

void UEpicOnlineGameInstance::StartCampaign ( const bool bNewGame) const
overridevirtual

Implements IMenuSystem.

547{
548 if(bNewGame)
549 {
550
551 }
552 else
553 {
554 //Load Save Games
555 }
556 if(GetWorld() == nullptr){if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Error, TEXT("GetWorld Failed in Start Campaign"));}return;}
558 {
560 {
561 GetWorld()->ServerTravel(SelectedCampaignLevel.LevelLocation);
562 }
563 else
564 {
565 UGameplayStatics::OpenLevel(GetWorld(), FName(SelectedCampaignLevel.LevelLocation));
566 }
567 }
568 else
569 {
570 if(!DemoLevelText.IsEmpty())
571 {
572 GetWorld()->ServerTravel(DemoLevelText);
573 }
574 }
575}
FString DemoLevelText
Definition EpicOnlineGameInstance.h:170
bool IsValid() const
Definition MenuData.h:150
FString LevelLocation
Definition MenuData.h:121

◆ StartHorde()

void UEpicOnlineGameInstance::StartHorde ( ) const
overridevirtual

Reimplemented from IMenuSystem.

585{
586 if(GetWorld() == nullptr){if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Error, TEXT("GetWorld Failed in StartHorde"));}return;}
588 {
590 {
591 GetWorld()->ServerTravel(SelectedHordeLevel.LevelLocation);
592 }
593 else
594 {
595 UGameplayStatics::OpenLevel(GetWorld(), FName(SelectedHordeLevel.LevelLocation));
596 }
597 }
598 else
599 {
600 GetWorld()->ServerTravel("/Game/Levels/Debug/HordeTestMap");
601 }
602}

◆ StartRecordingReplayFromBP()

void UEpicOnlineGameInstance::StartRecordingReplayFromBP ( const FString & InName,
const FString & FriendlyName )
overrideprotectedvirtual

Start recording a replay from blueprint. ReplayName = Name of file on disk, FriendlyName = Name of replay in UI

Implements IReplayClipInterface.

344{
345 StartRecordingReplay(InName, FriendlyName);
346 //@ Todo Server Chat Message - Recording Started
347 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Error, TEXT("Recording Started"));}
348}

◆ StartSession()

void UEpicOnlineGameInstance::StartSession ( )
overridevirtual

Implements IMenuSystem.

Reimplemented in UMenuSystemGameInstance.

530{
531 if(OnlineSubsystem == nullptr || OnlineSessionPtr == nullptr){return;}
532 OnlineSessionPtr->StartSession(SESSION_NAME);
533 if(GetWorld() != nullptr)
534 {
536 {
537 GetWorld()->ServerTravel(SelectedMultiplayerLevel.LevelLocation);
538 }
539 else
540 {
541 GetWorld()->ServerTravel(StartupLevelText);
542 }
543 }
544}
FString StartupLevelText
Definition EpicOnlineGameInstance.h:168

◆ StopRecordingReplayFromBP()

void UEpicOnlineGameInstance::StopRecordingReplayFromBP ( )
overrideprotectedvirtual

Start recording a running replay and save it, from blueprint.

Implements IReplayClipInterface.

367{
368 StopRecordingReplay();
369 if(bDebuggingMode){UE_LOG(LogOnlineGameInstance, Error, TEXT("Recording Stopped"));}
370}

◆ UpdatePlayerData()

void UEpicOnlineGameInstance::UpdatePlayerData ( const FString & FileName,
TArray< uint8 > SavedGameArray )
1236{
1237 if(!SavedGameArray.IsEmpty() && GetOnlineIdentity() != nullptr)
1238 {
1239 const IOnlineUserCloudPtr UserCloud = OnlineSubsystem->GetUserCloudInterface();
1240 if(UserCloud != nullptr)
1241 {
1242 const TSharedPtr<const FUniqueNetId> UserID = GetOnlineIdentity()->GetUniquePlayerId(0).ToSharedRef();
1243 UserCloud->OnWriteUserFileCompleteDelegates.AddUObject(this, &UEpicOnlineGameInstance::OnWriteUserFileComplete);
1244 UserCloud->WriteUserFile(*UserID, FileName, SavedGameArray);
1245 }
1246 }
1247}
void OnWriteUserFileComplete(bool bSuccess, const FUniqueNetId &UserID, const FString &FileName) const
Definition EpicOnlineGameInstance.cpp:1249

◆ UpdateStats()

void UEpicOnlineGameInstance::UpdateStats ( FString StatName,
int32 Amount )
virtual
1132{
1133 if(GetOnlineIdentity() != nullptr)
1134 {
1135 const IOnlineStatsPtr StatsPointer = OnlineSubsystem->GetStatsInterface();
1136 if(StatsPointer != nullptr)
1137 {
1138 FOnlineStatsUserUpdatedStats StatVar = FOnlineStatsUserUpdatedStats(GetOnlineIdentity()->GetUniquePlayerId(0).ToSharedRef());
1139 StatVar.Stats.Add(StatName, FOnlineStatUpdate(Amount,FOnlineStatUpdate::EOnlineStatModificationType::Sum));
1140 TArray<FOnlineStatsUserUpdatedStats> StatArray;
1141 StatArray.Add(StatVar);
1142 StatsPointer->UpdateStats(GetOnlineIdentity()->GetUniquePlayerId(0).ToSharedRef(), StatArray, FOnlineStatsUpdateStatsComplete::CreateUObject(this, &UEpicOnlineGameInstance::OnUpdateStatsComplete));
1143 }
1144 }
1145}
void OnUpdateStatsComplete(const FOnlineError &Result) const
Definition EpicOnlineGameInstance.cpp:1173

Member Data Documentation

◆ AdminAPI

PlayFabAdminPtr UEpicOnlineGameInstance::AdminAPI = nullptr
private

◆ AllSaveSlots

TArray<int32> UEpicOnlineGameInstance::AllSaveSlots
private

◆ bAutoLoginToPlayFab

bool UEpicOnlineGameInstance::bAutoLoginToPlayFab = true
protected

◆ bDebuggingMode

bool UEpicOnlineGameInstance::bDebuggingMode = true
protected

◆ bInGameMenuOpen

bool UEpicOnlineGameInstance::bInGameMenuOpen = false
protected

◆ bOptionsMenuOpen

bool UEpicOnlineGameInstance::bOptionsMenuOpen = false
protected

◆ ClientAPI

PlayFabClientPtr UEpicOnlineGameInstance::ClientAPI = nullptr
private

◆ CurrencyCode

FString UEpicOnlineGameInstance::CurrencyCode = "PC"
protected

◆ CurrentSaveSlot

int32 UEpicOnlineGameInstance::CurrentSaveSlot = 1
private

◆ CurrentSessionName

FString UEpicOnlineGameInstance::CurrentSessionName = "Default_Server_Name"
private

◆ DemoLevelText

FString UEpicOnlineGameInstance::DemoLevelText

◆ DifficultyLevel

EDifficultyLevel UEpicOnlineGameInstance::DifficultyLevel = EDifficultyLevel::Normal
private

◆ EnumerateStreamsPtr

TSharedPtr<INetworkReplayStreamer> UEpicOnlineGameInstance::EnumerateStreamsPtr
private

◆ InGameMenuClass

TSubclassOf<class UUserWidget> UEpicOnlineGameInstance::InGameMenuClass = nullptr
protected

◆ InGameMenuWidget

class UInGameMenuSystemWidget* UEpicOnlineGameInstance::InGameMenuWidget = nullptr
protected

◆ LevelDataTable

class UDataTable* UEpicOnlineGameInstance::LevelDataTable = nullptr
protected

◆ LobbyLevelText

FString UEpicOnlineGameInstance::LobbyLevelText

◆ MainMenu

class UMenuSystemWidget* UEpicOnlineGameInstance::MainMenu = nullptr
protected

◆ MenuClass

TSubclassOf<class UUserWidget> UEpicOnlineGameInstance::MenuClass = nullptr
protected

◆ MinNumberOfPlayersToStart

int32 UEpicOnlineGameInstance::MinNumberOfPlayersToStart = 2
private

◆ ModalWidgetClass

TSubclassOf<class UUserWidget> UEpicOnlineGameInstance::ModalWidgetClass = nullptr
protected

◆ OfflinePlayerProfile

FUserProfile UEpicOnlineGameInstance::OfflinePlayerProfile
private

◆ OnDeleteFinishedStreamCompleteDelegate

FDeleteFinishedStreamCallback UEpicOnlineGameInstance::OnDeleteFinishedStreamCompleteDelegate
private

◆ OnEnumerateStreamsCompleteDelegate

FEnumerateStreamsCallback UEpicOnlineGameInstance::OnEnumerateStreamsCompleteDelegate
private

◆ OnFileDataFound

FOnFileDataFound UEpicOnlineGameInstance::OnFileDataFound

◆ OnFindReplaysComplete

FOnFindReplaysComplete UEpicOnlineGameInstance::OnFindReplaysComplete

◆ OnlineSessionPtr

IOnlineSessionPtr UEpicOnlineGameInstance::OnlineSessionPtr

◆ OnlineSessionSearch

TSharedPtr<FOnlineSessionSearch> UEpicOnlineGameInstance::OnlineSessionSearch

◆ OnlineSubsystem

class IOnlineSubsystem* UEpicOnlineGameInstance::OnlineSubsystem = nullptr

◆ OnRenameReplayCompleteDelegate

FRenameReplayCallback UEpicOnlineGameInstance::OnRenameReplayCompleteDelegate
private

◆ OnServersFoundChanged

FOnServersFound UEpicOnlineGameInstance::OnServersFoundChanged

◆ OptionsMenuClass

TSubclassOf<class UUserWidget> UEpicOnlineGameInstance::OptionsMenuClass = nullptr
protected

◆ OptionsMenuWidget

class UOptionsMenuSystemWidget* UEpicOnlineGameInstance::OptionsMenuWidget = nullptr
protected

◆ PlayFabCurrency

float UEpicOnlineGameInstance::PlayFabCurrency = 0.0f
private

◆ PlayFabID

FString UEpicOnlineGameInstance::PlayFabID = ""
private

◆ PlayFabInventory

TArray<PlayFab::ClientModels::FItemInstance> UEpicOnlineGameInstance::PlayFabInventory
private

◆ ProfilePicturesDT

class UDataTable* UEpicOnlineGameInstance::ProfilePicturesDT = nullptr
protected

◆ ReplayMenu

class UReplayMenu* UEpicOnlineGameInstance::ReplayMenu = nullptr
protected

◆ ReplayMenuClass

TSubclassOf<UReplayMenu> UEpicOnlineGameInstance::ReplayMenuClass = nullptr
protected

◆ SelectedCampaignLevel

FGameLevel UEpicOnlineGameInstance::SelectedCampaignLevel
protected

◆ SelectedDebugLevel

FGameLevel UEpicOnlineGameInstance::SelectedDebugLevel
protected

◆ SelectedHordeLevel

FGameLevel UEpicOnlineGameInstance::SelectedHordeLevel
protected

◆ SelectedMultiplayerLevel

FGameLevel UEpicOnlineGameInstance::SelectedMultiplayerLevel
protected

◆ StartupLevelText

FString UEpicOnlineGameInstance::StartupLevelText

The documentation for this class was generated from the following files: