74 lines
3.1 KiB
C++
74 lines
3.1 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "CommonUserTypes.h"
|
|
#include "CoreTypes.h"
|
|
#include "Engine/GameInstance.h"
|
|
#include "GameplayTagContainer.h"
|
|
#include "UObject/UObjectGlobals.h"
|
|
#include "UObject/WeakObjectPtrTemplates.h"
|
|
|
|
#include "CommonGameInstance.generated.h"
|
|
|
|
class FText;
|
|
class UCommonUserInfo;
|
|
class UCommonSession_SearchResult;
|
|
struct FOnlineResultInformation;
|
|
class ULocalPlayer;
|
|
class USocialManager;
|
|
class UObject;
|
|
struct FFrame;
|
|
struct FGameplayTag;
|
|
|
|
UCLASS(Abstract, Config = Game)
|
|
class COMMONGAME_API UCommonGameInstance : public UGameInstance
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
UCommonGameInstance(const FObjectInitializer& ObjectInitializer);
|
|
|
|
/** Handles errors/warnings from CommonUser, can be overridden per game */
|
|
UFUNCTION()
|
|
virtual void HandleSystemMessage(FGameplayTag MessageType, FText Title, FText Message);
|
|
|
|
UFUNCTION()
|
|
virtual void HandlePrivilegeChanged(const UCommonUserInfo* UserInfo, ECommonUserPrivilege Privilege, ECommonUserAvailability OldAvailability, ECommonUserAvailability NewAvailability);
|
|
|
|
/** Call to reset user and session state, usually because a player has been disconnected */
|
|
virtual void ResetUserAndSessionState();
|
|
|
|
/**
|
|
* Requested Session Flow
|
|
* Something requests the user to join a specific session (for example, a platform overlay via OnUserRequestedSession).
|
|
* This request is handled in SetRequestedSession.
|
|
* Check if we can join the requested session immediately (CanJoinRequestedSession). If we can, join the requested session (JoinRequestedSession)
|
|
* If not, cache the requested session and instruct the game to get into a state where the session can be joined (ResetGameAndJoinRequestedSession)
|
|
*/
|
|
/** Handles user accepting a session invite from an external source (for example, a platform overlay). Intended to be overridden per game. */
|
|
virtual void OnUserRequestedSession(const FPlatformUserId& PlatformUserId, UCommonSession_SearchResult* InRequestedSession, const FOnlineResultInformation& RequestedSessionResult);
|
|
|
|
/** Get the requested session */
|
|
UCommonSession_SearchResult* GetRequestedSession() const { return RequestedSession; }
|
|
/** Set (or clear) the requested session. When this is set, the requested session flow begins. */
|
|
virtual void SetRequestedSession(UCommonSession_SearchResult* InRequestedSession);
|
|
/** Checks if the requested session can be joined. Can be overridden per game. */
|
|
virtual bool CanJoinRequestedSession() const;
|
|
/** Join the requested session */
|
|
virtual void JoinRequestedSession();
|
|
/** Get the game into a state to join the requested session */
|
|
virtual void ResetGameAndJoinRequestedSession();
|
|
|
|
virtual int32 AddLocalPlayer(ULocalPlayer* NewPlayer, FPlatformUserId UserId) override;
|
|
virtual bool RemoveLocalPlayer(ULocalPlayer* ExistingPlayer) override;
|
|
virtual void Init() override;
|
|
virtual void ReturnToMainMenu() override;
|
|
|
|
private:
|
|
/** This is the primary player*/
|
|
TWeakObjectPtr<ULocalPlayer> PrimaryPlayer;
|
|
/** Session the player has requested to join */
|
|
UPROPERTY()
|
|
TObjectPtr<UCommonSession_SearchResult> RequestedSession;
|
|
}; |