From 884caf99746a4cd70d5ad08cedfc1be36dbb3d18 Mon Sep 17 00:00:00 2001 From: Kingsmedia Date: Mon, 16 May 2022 23:51:15 +0200 Subject: [PATCH] Added EOS and some time sync adjustments --- .gitignore | 5 +- Blaster.uproject | 8 ++ Config/DefaultEngine.ini | 27 ++++- .../GameModes/BP_BlasterGameMode.uasset | Bin 20388 -> 20338 bytes Content/Maps/BlasterMap.umap | Bin 1331237 -> 1331237 bytes .../Content/WBP_Menu.uasset | Bin 41224 -> 43905 bytes .../MultiplayerSessions.uplugin | 4 + .../MultiplayerSessions.Build.cs | 1 + .../MultiplayerSessions/Private/Menu.cpp | 38 +++++- .../Private/MultiplayerSessionsSubsystem.cpp | 112 ++++++++++++++---- .../Source/MultiplayerSessions/Public/Menu.h | 11 +- .../Public/MultiplayerSessionsSubsystem.h | 22 +++- Source/Blaster/GameMode/BlasterGameMode.cpp | 6 +- .../BlasterPlayerController.cpp | 36 +++--- 14 files changed, 220 insertions(+), 50 deletions(-) diff --git a/.gitignore b/.gitignore index 917aee4..a7ed43d 100644 --- a/.gitignore +++ b/.gitignore @@ -75,4 +75,7 @@ Intermediate/* Plugins/*/Intermediate/* # Cache files for the editor to use -DerivedDataCache/* \ No newline at end of file +DerivedDataCache/* + +#Config files +Config/User*.ini \ No newline at end of file diff --git a/Blaster.uproject b/Blaster.uproject index 673f04d..a1b61fd 100644 --- a/Blaster.uproject +++ b/Blaster.uproject @@ -22,6 +22,14 @@ "Editor" ] }, + { + "Name": "OnlineSubsystemSteam", + "Enabled": true + }, + { + "Name": "OnlineSubsystemEOS", + "Enabled": true + }, { "Name": "Bridge", "Enabled": true, diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini index d7bf3e8..6e1fcf4 100644 --- a/Config/DefaultEngine.ini +++ b/Config/DefaultEngine.ini @@ -45,19 +45,25 @@ bUseManualIPAddress=False ManualIPAddress= [/Script/Engine.GameEngine] -+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver") ++NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemEOS.NetDriverEOS",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver") [OnlineSubsystem] -DefaultPlatformService=Steam +DefaultPlatformService=EOS [OnlineSubsystemSteam] -bEnabled=true +bEnabled=false SteamDevAppId=480 bInitServerOnClient=true [/Script/OnlineSubsystemSteam.SteamNetDriver] NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection" +[OnlineSubsystemEOS] +bEnabled=true + +[/Script/OnlineSubsystemEOS.NetDriverEOS] +bIsUsingP2PSockets=true + [/Script/OnlineSubsystemUtils.IpNetDriver] NetServerMaxTickRate=120 @@ -118,3 +124,18 @@ NetServerMaxTickRate=120 +CollisionChannelRedirects=(OldName="VehicleMovement",NewName="Vehicle") +CollisionChannelRedirects=(OldName="PawnMovement",NewName="Pawn") +[/Script/OnlineSubsystemEOS.EOSSettings] +CacheDir=CacheDir +DefaultArtifactName=Blaster +TickBudgetInMilliseconds=0 +bEnableOverlay=True +bEnableSocialOverlay=True +bShouldEnforceBeingLaunchedByEGS=False +TitleStorageReadChunkLength=0 +bUseEAS=False +bUseEOSConnect=False +bMirrorStatsToEOS=False +bMirrorAchievementsToEOS=False +bUseEOSSessions=False +bMirrorPresenceToEAS=False + diff --git a/Content/Blueprints/GameModes/BP_BlasterGameMode.uasset b/Content/Blueprints/GameModes/BP_BlasterGameMode.uasset index 15b9ff2e66c2aa7ad19d81e89617e08a6e4e5702..55ad2cb0ea74020a47012244b46f23d508a80854 100644 GIT binary patch delta 3759 zcmcIlTTEPK5dKev$W{moyDYnuQZAL7b)hJ2mxTknz;a(osUU4dC}N?lyOjd9RkGR| zpBkl3YSL)hK4{~Mi47+DU}AjpO`nXhHEAREVo6(z)>tn%bI$zBf$lEbL?=0!fBx?~ zbNg@apHc3dR;FjuyIevf3L*T#z%Z%=F?HhZmhv6xLS&P?t`0ucb+_zwCl6UhwnnaVppc%kkY+&4&gv2@(r?pLV@~bt}3ooGnEP7n?n7J zKgaqSasoWAG5kBozArxjZZJ zUex`Gm3T*%^7Q%#cv7w%1%72IQL`fP+T-BOqQ93T^0@ymF-WQ}B2k|-@^;3_+ZBr^ z*Pl4g#3C|AN*>urtu`k3Y#jcy_ychei6ZZSl>+aM;BOw6fTuMzq8q8=5gar=q+4As zxa2K`FVZ(;jOsJOg!*$Hzw@@G*A`?0?=dmQ<83u?-s*#ORoc0SBI2Wb(ySGI$!~(Q77Ms-X4?TB5hbV#d3>P*25mhy+Qu?KGDC`A%jK3K z7kn@ToghiQ!qgOv3ZYE1jSh~4<>8pu;TxI9l^vj13gBIPNn!w>5Et{nL2UM> zG+B;J_Hil}-l{gYN@qlmxgF2%IvL##*Q;HNuf}b|o+IDMt6vwt;an*hDBN{z zY;;Yl`Ls4GL=o$7VM5&YJP{o{>#6rLDzggz`WMEoj|TpUV3`C#QLQGqLMr5_*?5fH zYDuXv%~r`~9ggz{x~hgZRobTKRHtJD6C$rbVy*c>-0Hi(x3)C4+sg7E?p#cn2>L(l zbA*O=midgCuV0pskL^vgB}|oUsW9DS&3}?DdDiF#)TEJh4XAZ_`RmxqXDw;DY>Pa2 ztS*0lvYB|DhqDHc&&pYKYhnxa=8*GmR^>0fv0V z${INCt1~rl)`hg_=$CHvw5CP}y(=VgQDn^#HitLr=8#XR+;y>6`ky8$EVbFa!Wv3% zlpbv``sfm|!9ufLX#;zUsyLyy<& zLt~={#>3qHj-yH)T<-9NUj>S5tjaI<*3JL` delta 3907 zcmb_eZA@EL7(RCcvnsG!`U%XHF<3!lY{;ZgT1qJl7%dY7Wjes})s3~tn7HXy=CZ{f zCPGePOjKN=zcfY-i$Byv{o@~X+2XPo6SKtNri>+?|IMj zocHsbbNOXndg~2ocF{26WGs_07KlcML1eHKbHCM8Mh%P=fVweU1 zRrqcG_{$%@JvZBNcE!PR&P6-;e#t7G;L}pqCdtOw*&y&$;~yC4sBht#qckZT*5h<2zlfpLSs^IDUei(fE|PNuqd?=A$H+fj36;biC`pJD8dm zW5VDP5XVy!72eOlJCuYsNNW+2n21P99bh6a#@IC=9@bzGc}Fzzp4Py-3ihVKzdTY$ z$QTlz(ZKr=ctaX_BgBiPbBqQ>d+x-W)adxxL|#1q#GWvQj*ll2Wi1)6Lj!LS>^+y1 zNA*8SAd0@E#Q36`_qayh6X|%O|H#>&jz}1aevP~V4LmtGQPyNVR%a~UfIIO*!Z8mT z@=amV?g8mvA6G_r%+PB-K!^_HCp3S@#djFX_}hkp;&rqn!~{*?U1K^au8i^v{wjXn zXyo&`dh--9Hh}zq<`Zsy(Z5rn^r$HB(!9_^l&xmG;Ak2xxG323i7mB=w2CPUY^Tb-BQTBo@brbRVBHSZ$k$D$pX*1CYI)e^Hxn zYhA_All~|l%yqciNOO=>ion>6N5s3@34Gt>5qC0Ew=unwc1=#Y$fzi*5((bBasl#u z*RFd-vLclVECoO2(zl6-k)F1NYT_SsM6s~KyNzFRIVCsGskg`OC+AdnSyS)F_B}?N zBz2tdKA0N3={2PWC%irY<#$@drBvlF2)c>3t^xl9urd|60wCN4d3gA8eSs9@I(KQK zI;D1jlT_UP4x8&~Q5;)wjXiwIU158G(4k{y z79MP<)76q1TODahi^9vjdN5w^t&)jJ@lN9>dTR2>FbKx**52Oo zjb)R(3jYRxY#bg9M>@v`kFpw`*Ip`h^QQLW2Ejlx-Qmzd1zc%gEEJ#-KwmU+82p5$ z!qJGmD>NCNm{Pdq9nVW%{$5A(K6N(gc`gOA<|f{RcB6S5Yd{QJFGGy&<(+|QTQ6y% zrvi{{q2y B=U4y$ diff --git a/Content/Maps/BlasterMap.umap b/Content/Maps/BlasterMap.umap index fe90ccdf07514656414e98b2db847d68bbec2f0d..bee711448e53a65b87881534e416c65415d20b1c 100644 GIT binary patch delta 254 zcmZ3wAaLn|zzy#h1wwj1N@Z=`=edDB;IQ~jMXk;M7!S5GGBh7(-+rK-(chfS#K2I` z&|fm_`-m?z!a z>!f?9ef|kXAZ7w$W*}w(Vpbq#17da{<^W<&Am##MZXo8_KK}%7UCQ+Lvl%%U&9e?&q l>5YCY64M)W`Hb4n8S()!KM)H5u^XWZupH7!S5Gax@=k-+rK-(chfS(#TZL z&|tdgenuxY19MY76Z7e@`x)iA4a{{7fjmQ?!1nh2j2xT-f~Mt(=_SX!wr%re^jq`z zRr~xCj6lo;#LPg<0>rF9%m&2lK+FNeoIuP4#N0s4vwi*v-ntY{GX@3*2OxIbuBOWu z!X)UirQTq1de(tME_IpD+BzL3PiOqZD7Ag5KHqspfekTC*?#pF4r~4Hl{uS6rcZD5 jW09ENpvz~}e$J2&i1~q70Eh*FSO|!Px1Tc<36}!^07ql{ diff --git a/Plugins/MultiplayerSessions/Content/WBP_Menu.uasset b/Plugins/MultiplayerSessions/Content/WBP_Menu.uasset index 22c4fa63cf0ef302df6aa75d9085dd7afe43025e..f5888d9824f72de3df2909fb0b980330c8e1d1f1 100644 GIT binary patch literal 43905 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 Q16GQOZ|1n|tWnqhFQ_p*#Q*>R delta 10464 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 diff --git a/Plugins/MultiplayerSessions/MultiplayerSessions.uplugin b/Plugins/MultiplayerSessions/MultiplayerSessions.uplugin index 6c4eb6f..a2ea13f 100644 --- a/Plugins/MultiplayerSessions/MultiplayerSessions.uplugin +++ b/Plugins/MultiplayerSessions/MultiplayerSessions.uplugin @@ -29,6 +29,10 @@ { "Name": "OnlineSubsystemSteam", "Enabled": true + }, + { + "Name": "OnlineSubsystemEOS", + "Enabled": true } ] } \ No newline at end of file diff --git a/Plugins/MultiplayerSessions/Source/MultiplayerSessions/MultiplayerSessions.Build.cs b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/MultiplayerSessions.Build.cs index 2a4fa9f..a8c1dc3 100644 --- a/Plugins/MultiplayerSessions/Source/MultiplayerSessions/MultiplayerSessions.Build.cs +++ b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/MultiplayerSessions.Build.cs @@ -28,6 +28,7 @@ public class MultiplayerSessions : ModuleRules "Core", "OnlineSubsystem", "OnlineSubsystemSteam", + "OnlineSubsystemEOS", "UMG", "Slate", "SlateCore" diff --git a/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Private/Menu.cpp b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Private/Menu.cpp index bef43c3..e24016f 100644 --- a/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Private/Menu.cpp +++ b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Private/Menu.cpp @@ -32,7 +32,7 @@ void UMenu::MenuSetup(int32 NumberOfPublicConnections, FString TypeOfMatch, FStr } UGameInstance* GameInstance = GetGameInstance(); - if (GetGameInstance()) + if (GameInstance) { MultiplayerSessionsSubsystem = GameInstance->GetSubsystem(); } @@ -44,6 +44,20 @@ void UMenu::MenuSetup(int32 NumberOfPublicConnections, FString TypeOfMatch, FStr MultiplayerSessionsSubsystem->MultiplayerOnJoinSessionComplete.AddUObject(this, &ThisClass::OnJoinSession); MultiplayerSessionsSubsystem->MultiplayerOnDestroySessionComplete.AddDynamic(this, &ThisClass::OnDestroySession); MultiplayerSessionsSubsystem->MultiplayerOnStartSessionComplete.AddDynamic(this, &ThisClass::OnStartSession); + MultiplayerSessionsSubsystem->MultiplayerOnLoginComplete.AddDynamic(this, &ThisClass::OnLoginComplete); + + if (!MultiplayerSessionsSubsystem->IsLoggedIn()) + { + LoginButton->SetIsEnabled(true); + HostButton->SetIsEnabled(false); + JoinButton->SetIsEnabled(false); + } + else + { + LoginButton->SetIsEnabled(false); + HostButton->SetIsEnabled(true); + JoinButton->SetIsEnabled(true); + } } } @@ -64,6 +78,11 @@ bool UMenu::Initialize() JoinButton->OnClicked.AddDynamic(this, &UMenu::JoinButtonClicked); } + if (LoginButton) + { + LoginButton->OnClicked.AddDynamic(this, &UMenu::LoginButtonClicked); + } + return true; } @@ -164,6 +183,13 @@ void UMenu::OnStartSession(bool bWasSuccessful) { } +void UMenu::OnLoginComplete(bool bWasSuccessful) +{ + JoinButton->SetIsEnabled(!bWasSuccessful); + HostButton->SetIsEnabled(bWasSuccessful); + JoinButton->SetIsEnabled(bWasSuccessful); +} + void UMenu::HostButtonClicked() { HostButton->SetIsEnabled(false); @@ -184,6 +210,16 @@ void UMenu::JoinButtonClicked() } } +void UMenu::LoginButtonClicked() +{ + LoginButton->SetIsEnabled(false); + + if (MultiplayerSessionsSubsystem) + { + MultiplayerSessionsSubsystem->Login(); + } +} + void UMenu::MenuTearDown() { RemoveFromParent(); diff --git a/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Private/MultiplayerSessionsSubsystem.cpp b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Private/MultiplayerSessionsSubsystem.cpp index 0dfd851..66cf9fd 100644 --- a/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Private/MultiplayerSessionsSubsystem.cpp +++ b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Private/MultiplayerSessionsSubsystem.cpp @@ -13,15 +13,74 @@ UMultiplayerSessionsSubsystem::UMultiplayerSessionsSubsystem(): DestroySessionCompleteDelegate(FOnDestroySessionCompleteDelegate::CreateUObject(this, &ThisClass::OnDestroySessionComplete)), StartSessionCompleteDelegate(FOnStartSessionCompleteDelegate::CreateUObject(this, &ThisClass::OnStartSessionComplete)) { - IOnlineSubsystem* Subsystem = IOnlineSubsystem::Get(); + Subsystem = IOnlineSubsystem::Get(); if (Subsystem) { + Identity = Subsystem->GetIdentityInterface(); SessionInterface = Subsystem->GetSessionInterface(); + if (GetSubsystemName() != EOS_SUBSYSTEM) // Non EOS OSS don't need to login + { + bIsLoggedIn = true; + } } } +FName UMultiplayerSessionsSubsystem::GetSubsystemName() +{ + return Subsystem ? Subsystem->GetSubsystemName() : FName("NULL"); +} + +void UMultiplayerSessionsSubsystem::Login() +{ + if (IsLoggedIn()) + { + MultiplayerOnLoginComplete.Broadcast(true); + return; + } + + EOSLogin(); +} + +void UMultiplayerSessionsSubsystem::EOSLogin() +{ + if (!Identity.IsValid()) return; + + LoginDelegateHandle = Identity->OnLoginCompleteDelegates->AddUObject(this, &UMultiplayerSessionsSubsystem::HandleLoginComplete); + + FOnlineAccountCredentials Credentials; + Credentials.Id = FString(); + Credentials.Token = FString(); + Credentials.Type = FString("accountportal"); + + if (!Identity->Login(0, Credentials)) + { + UE_LOG(LogTemp, Error, TEXT("Unable to perform EOS Login")); + } + else + { + UE_LOG(LogTemp, Display, TEXT("Performed EOS Login successful")); + } +} + +void UMultiplayerSessionsSubsystem::HandleLoginComplete(int32 LocalUserNum, bool bWasSuccessful, const FUniqueNetId& UserId, const FString& Error) +{ + bIsLoggedIn = bWasSuccessful; + + if (Identity) + { + // Deregister the event handler. + Identity->ClearOnLoginCompleteDelegate_Handle(LocalUserNum, LoginDelegateHandle); + LoginDelegateHandle.Reset(); + } + + // Broadcast our own custom delegate + MultiplayerOnLoginComplete.Broadcast(bWasSuccessful); +} + void UMultiplayerSessionsSubsystem::CreateSession(int32 NumPublicConnections, FString MatchType) { + if (!IsLoggedIn()) return; + DesiredNumPublicConnections = NumPublicConnections; DesiredMatchType = MatchType; if (!SessionInterface.IsValid()) @@ -43,12 +102,14 @@ void UMultiplayerSessionsSubsystem::CreateSession(int32 NumPublicConnections, FS CreateSessionCompleteDelegateHandle = SessionInterface->AddOnCreateSessionCompleteDelegate_Handle(CreateSessionCompleteDelegate); LastSessionSettings = MakeShareable(new FOnlineSessionSettings()); - LastSessionSettings->bIsLANMatch = IOnlineSubsystem::Get()->GetSubsystemName() == "NULL" ? true : false; + LastSessionSettings->bIsDedicated = false; + LastSessionSettings->bIsLANMatch = GetSubsystemName() == "NULL" || GetSubsystemName() == "LAN" ? true : false; LastSessionSettings->NumPublicConnections = NumPublicConnections; LastSessionSettings->bAllowJoinInProgress = true; LastSessionSettings->bAllowJoinViaPresence = true; LastSessionSettings->bShouldAdvertise = true; LastSessionSettings->bUsesPresence = true; + LastSessionSettings->Set(SEARCH_KEYWORDS, FString("BlasterLobby"), EOnlineDataAdvertisementType::ViaOnlineService); LastSessionSettings->Set(FName("MatchType"), MatchType, EOnlineDataAdvertisementType::ViaOnlineServiceAndPing); LastSessionSettings->BuildUniqueId = 1; LastSessionSettings->bUseLobbiesIfAvailable = true; @@ -65,6 +126,11 @@ void UMultiplayerSessionsSubsystem::CreateSession(int32 NumPublicConnections, FS void UMultiplayerSessionsSubsystem::FindSessions(int32 MaxSearchResults) { + if (!IsLoggedIn()) + { + return; + } + if (!SessionInterface.IsValid()) { return; @@ -75,6 +141,8 @@ void UMultiplayerSessionsSubsystem::FindSessions(int32 MaxSearchResults) LastSessionSearch = MakeShareable(new FOnlineSessionSearch()); LastSessionSearch->MaxSearchResults = MaxSearchResults; LastSessionSearch->bIsLanQuery = IOnlineSubsystem::Get()->GetSubsystemName() == "NULL" ? true : false; + LastSessionSearch->QuerySettings.Set(SEARCH_KEYWORDS, FString("BlasterLobby"), EOnlineComparisonOp::Equals); + LastSessionSearch->QuerySettings.Set(SEARCH_LOBBIES, true, EOnlineComparisonOp::Equals); LastSessionSearch->QuerySettings.Set(SEARCH_PRESENCE, true, EOnlineComparisonOp::Equals); const ULocalPlayer* LocalPlayer = GetWorld()->GetFirstLocalPlayerFromController(); @@ -88,6 +156,8 @@ void UMultiplayerSessionsSubsystem::FindSessions(int32 MaxSearchResults) void UMultiplayerSessionsSubsystem::JoinSession(const FOnlineSessionSearchResult& SessionResult) { + if (!IsLoggedIn()) return; + if (!SessionInterface.IsValid()) { MultiplayerOnJoinSessionComplete.Broadcast(EOnJoinSessionCompleteResult::UnknownError); @@ -124,19 +194,19 @@ void UMultiplayerSessionsSubsystem::DestroySession() void UMultiplayerSessionsSubsystem::StartSession() { - // if (!SessionInterface.IsValid()) - // { - // return; - // } - // - // StartSessionCompleteDelegateHandle = SessionInterface->AddOnStartSessionCompleteDelegate_Handle(StartSessionCompleteDelegate); - // - // if (!SessionInterface->StartSession(NAME_GameSession)) - // { - // SessionInterface->ClearOnStartSessionCompleteDelegate_Handle(StartSessionCompleteDelegateHandle); - // - // MultiplayerOnStartSessionComplete.Broadcast(false); - // } + if (!SessionInterface.IsValid()) + { + return; + } + + StartSessionCompleteDelegateHandle = SessionInterface->AddOnStartSessionCompleteDelegate_Handle(StartSessionCompleteDelegate); + + if (!SessionInterface->StartSession(NAME_GameSession)) + { + SessionInterface->ClearOnStartSessionCompleteDelegate_Handle(StartSessionCompleteDelegateHandle); + + MultiplayerOnStartSessionComplete.Broadcast(false); + } } void UMultiplayerSessionsSubsystem::OnCreateSessionComplete(FName SessionName, bool bWasSuccessful) @@ -191,10 +261,10 @@ void UMultiplayerSessionsSubsystem::OnDestroySessionComplete(FName SessionName, void UMultiplayerSessionsSubsystem::OnStartSessionComplete(FName SessionName, bool bWasSuccessful) { - // if (SessionInterface) - // { - // SessionInterface->ClearOnStartSessionCompleteDelegate_Handle(StartSessionCompleteDelegateHandle); - // } - // - // MultiplayerOnStartSessionComplete.Broadcast(bWasSuccessful); + if (SessionInterface) + { + SessionInterface->ClearOnStartSessionCompleteDelegate_Handle(StartSessionCompleteDelegateHandle); + } + + MultiplayerOnStartSessionComplete.Broadcast(bWasSuccessful); } diff --git a/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Public/Menu.h b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Public/Menu.h index 93359b7..2845556 100644 --- a/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Public/Menu.h +++ b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Public/Menu.h @@ -18,7 +18,7 @@ class MULTIPLAYERSESSIONS_API UMenu : public UUserWidget public: UFUNCTION(BlueprintCallable) - void MenuSetup(int32 NumberOfPublicConnections = 4, FString TypeOfMatch = FString(TEXT("FreeForAll")), FString LobbyPath = FString(TEXT("/Game/ThirdPerson/Maps/Lobby"))); + void MenuSetup(int32 NumberOfPublicConnections = 4, FString TypeOfMatch = FString(TEXT("FreeForAll")), FString LobbyPath = FString(TEXT("/Game/Maps/Lobby"))); protected: @@ -36,6 +36,8 @@ protected: void OnDestroySession(bool bWasSuccessful); UFUNCTION() void OnStartSession(bool bWasSuccessful); + UFUNCTION() + void OnLoginComplete(bool bWasSuccessful); private: @@ -44,6 +46,9 @@ private: UPROPERTY(meta=(BindWidget)) UButton* JoinButton; + + UPROPERTY(meta=(BindWidget)) + UButton* LoginButton; UFUNCTION() void HostButtonClicked(); @@ -51,9 +56,13 @@ private: UFUNCTION() void JoinButtonClicked(); + UFUNCTION() + void LoginButtonClicked(); + void MenuTearDown(); // The subsystem designed to handle all online session functionality + UPROPERTY() class UMultiplayerSessionsSubsystem* MultiplayerSessionsSubsystem; int32 NumPublicConnections {4}; diff --git a/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Public/MultiplayerSessionsSubsystem.h b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Public/MultiplayerSessionsSubsystem.h index 11deff0..28eddff 100644 --- a/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Public/MultiplayerSessionsSubsystem.h +++ b/Plugins/MultiplayerSessions/Source/MultiplayerSessions/Public/MultiplayerSessionsSubsystem.h @@ -4,18 +4,21 @@ #include "CoreMinimal.h" #include "OnlineSessionSettings.h" +#include "OnlineSubsystem.h" +#include "Interfaces/OnlineIdentityInterface.h" #include "Subsystems/GameInstanceSubsystem.h" #include "Interfaces/OnlineSessionInterface.h" #include "MultiplayerSessionsSubsystem.generated.h" // -// Delcaring our own custom delegates for the Menu class to bind callbacks to +// Declaring our own custom delegates for the Menu class to bind callbacks to // DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMultiplayerOnCreateSessionComplete, bool, bWasSuccessful); DECLARE_MULTICAST_DELEGATE_TwoParams(FMultiplayerOnFindSessionsComplete, const TArray& SessionResults, bool bWasSuccessful); DECLARE_MULTICAST_DELEGATE_OneParam(FMultiplayerOnJoinSessionComplete, EOnJoinSessionCompleteResult::Type Result) DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMultiplayerOnDestroySessionComplete, bool, bWasSuccessful); DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMultiplayerOnStartSessionComplete, bool, bWasSuccessful); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FMultiplayerOnLoginComplete, bool, bWasSuccessful); /** * @@ -28,7 +31,9 @@ class MULTIPLAYERSESSIONS_API UMultiplayerSessionsSubsystem : public UGameInstan public: UMultiplayerSessionsSubsystem(); - + void Login(); + FORCEINLINE bool IsLoggedIn() const { return bIsLoggedIn; } + /* * To handle session functionality. The Menu class will call these */ @@ -46,6 +51,7 @@ public: FMultiplayerOnJoinSessionComplete MultiplayerOnJoinSessionComplete; FMultiplayerOnDestroySessionComplete MultiplayerOnDestroySessionComplete; FMultiplayerOnStartSessionComplete MultiplayerOnStartSessionComplete; + FMultiplayerOnLoginComplete MultiplayerOnLoginComplete; int32 DesiredNumPublicConnections{}; FString DesiredMatchType{}; @@ -62,7 +68,9 @@ protected: void OnStartSessionComplete(FName SessionName, bool bWasSuccessful); private: - + IOnlineSubsystem* Subsystem; + IOnlineIdentityPtr Identity; + IOnlineSessionPtr SessionInterface; TSharedPtr LastSessionSettings; TSharedPtr LastSessionSearch; @@ -85,4 +93,12 @@ private: bool bCreateSessionOnDestroy { false }; int32 LastNumPublicConnections; FString LastMatchType; + + void EOSLogin(); + + FDelegateHandle LoginDelegateHandle; + void HandleLoginComplete(int32 LocalUserNum, bool bWasSuccessful, const FUniqueNetId& UserId, const FString& Error); + + FName GetSubsystemName(); + bool bIsLoggedIn = false; }; diff --git a/Source/Blaster/GameMode/BlasterGameMode.cpp b/Source/Blaster/GameMode/BlasterGameMode.cpp index 315b502..8660896 100644 --- a/Source/Blaster/GameMode/BlasterGameMode.cpp +++ b/Source/Blaster/GameMode/BlasterGameMode.cpp @@ -33,7 +33,7 @@ void ABlasterGameMode::Tick(float DeltaTime) if (MatchState == MatchState::WaitingToStart) { - CountdownTime = WarmupTime - GetWorld()->GetTimeSeconds() + LevelStartingTime; + CountdownTime = WarmupTime - GetWorld()->GetTimeSeconds(); // + LevelStartingTime; if (CountdownTime <= 0.f) { StartMatch(); @@ -41,7 +41,7 @@ void ABlasterGameMode::Tick(float DeltaTime) } else if (MatchState == MatchState::InProgress) { - CountdownTime = WarmupTime + MatchTime - GetWorld()->GetTimeSeconds() + LevelStartingTime; + CountdownTime = WarmupTime + MatchTime - GetWorld()->GetTimeSeconds(); // + LevelStartingTime; if (CountdownTime <= 0.f) { SetMatchState(MatchState::Cooldown); @@ -49,7 +49,7 @@ void ABlasterGameMode::Tick(float DeltaTime) } else if (MatchState == MatchState::Cooldown) { - CountdownTime = CooldownTime + WarmupTime + MatchTime - GetWorld()->GetTimeSeconds() + LevelStartingTime; + CountdownTime = WarmupTime + MatchTime + CooldownTime - GetWorld()->GetTimeSeconds(); // + LevelStartingTime; if (CountdownTime <= 0.f) { RestartGame(); diff --git a/Source/Blaster/PlayerController/BlasterPlayerController.cpp b/Source/Blaster/PlayerController/BlasterPlayerController.cpp index f222fd0..8e494ed 100644 --- a/Source/Blaster/PlayerController/BlasterPlayerController.cpp +++ b/Source/Blaster/PlayerController/BlasterPlayerController.cpp @@ -42,13 +42,11 @@ void ABlasterPlayerController::Tick(float DeltaTime) if (DebugWidget) { - SetDebugMsg1(TEXT("GetServerTime(): "), FString::Printf(TEXT("%02f"), GetServerTime())); - SetDebugMsg2(TEXT("ClientServerDelta: "), FString::Printf(TEXT("%f"), ClientServerDelta)); - SetDebugMsg3(TEXT("LevelStartingTime: "), FString::Printf(TEXT("%f"), LevelStartingTime)); - SetDebugMsg4(TEXT("WarmupTime: "), FString::Printf(TEXT("%f"), WarmupTime)); - SetDebugMsg5(TEXT("MatchTime: "), FString::Printf(TEXT("%f"), MatchTime)); - SetDebugMsg6(TEXT("CooldownTime: "), FString::Printf(TEXT("%f"), CooldownTime)); - SetDebugMsg7(TEXT("CountdownInt: "), FString::Printf(TEXT("%d"), CountdownInt)); + SetDebugMsg1(TEXT("GetWorld()->GetTimeSeconds(): "), FString::Printf(TEXT("%02f"), GetWorld()->GetTimeSeconds())); + SetDebugMsg2(TEXT("GetServerTime(): "), FString::Printf(TEXT("%02f"), GetServerTime())); + SetDebugMsg3(TEXT("ClientServerDelta: "), FString::Printf(TEXT("%f"), ClientServerDelta)); + SetDebugMsg4(TEXT("LevelStartingTime: "), FString::Printf(TEXT("%f"), LevelStartingTime)); + SetDebugMsg5(TEXT("CountdownInt: "), FString::Printf(TEXT("%d"), CountdownInt)); } } @@ -128,7 +126,6 @@ void ABlasterPlayerController::ClientJoinMidgame_Implementation(FName StateOfMat OnMatchStateSet(MatchState); if (BlasterHUD && MatchState == MatchState::WaitingToStart) { - BlasterHUD->AddDebugWidget(); BlasterHUD->AddAnnouncementOverlay(); } } @@ -275,9 +272,9 @@ void ABlasterPlayerController::SetHUDAnnouncementCountdown(float CountdownTime) void ABlasterPlayerController::SetHUDTime() { float TimeLeft = 0.f; - if (MatchState == MatchState::WaitingToStart) TimeLeft = WarmupTime - GetServerTime() + LevelStartingTime; - else if (MatchState == MatchState::InProgress) TimeLeft = WarmupTime + MatchTime - GetServerTime() + LevelStartingTime; - else if (MatchState == MatchState::Cooldown) TimeLeft = CooldownTime +WarmupTime + MatchTime - GetServerTime() + LevelStartingTime; + if (MatchState == MatchState::WaitingToStart) TimeLeft = WarmupTime - GetServerTime(); // + LevelStartingTime; + else if (MatchState == MatchState::InProgress) TimeLeft = WarmupTime + MatchTime - GetServerTime(); // + LevelStartingTime; + else if (MatchState == MatchState::Cooldown) TimeLeft = WarmupTime + MatchTime + CooldownTime - GetServerTime(); // + LevelStartingTime; uint32 SecondsLeft = FMath::CeilToInt(TimeLeft); @@ -286,7 +283,7 @@ void ABlasterPlayerController::SetHUDTime() BlasterGameMode = BlasterGameMode == nullptr ? Cast(UGameplayStatics::GetGameMode(this)) : BlasterGameMode; if (BlasterGameMode) { - SecondsLeft = FMath::CeilToInt(BlasterGameMode->GetCountdownTime() + LevelStartingTime); + SecondsLeft = FMath::CeilToInt(BlasterGameMode->GetCountdownTime()); } } @@ -307,14 +304,15 @@ void ABlasterPlayerController::SetHUDTime() void ABlasterPlayerController::PollInit() { - if (DebugWidget == nullptr) + if (BlasterHUD && BlasterHUD->DebugWidget == nullptr) { - if (BlasterHUD && BlasterHUD->DebugWidget) + BlasterHUD->AddDebugWidget(); + if (BlasterHUD->DebugWidget) { DebugWidget = BlasterHUD->DebugWidget; } } - + if (CharacterOverlay == nullptr) { if (BlasterHUD && BlasterHUD->CharacterOverlay) @@ -402,8 +400,12 @@ void ABlasterPlayerController::HandleCooldown() BlasterHUD = BlasterHUD == nullptr ? Cast(GetHUD()) : BlasterHUD; if (BlasterHUD) { - BlasterHUD->CharacterOverlay->RemoveFromParent(); - bool bHUDValid =BlasterHUD->Announcement && + if (BlasterHUD->CharacterOverlay) + { + BlasterHUD->CharacterOverlay->RemoveFromParent(); + } + + bool bHUDValid = BlasterHUD->Announcement && BlasterHUD->Announcement->AnnouncementText && BlasterHUD->Announcement->AnnouncementMessage;