// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "ModularGameMode.h" #include "LyraGameMode.generated.h" #define UE_API LYRAGAME_API class AActor; class AController; class AGameModeBase; class APawn; class APlayerController; class UClass; class ULyraExperienceDefinition; class ULyraPawnData; class UObject; struct FFrame; struct FPrimaryAssetId; enum class ECommonSessionOnlineMode : uint8; /** * Post login event, triggered when a player or bot joins the game as well as after seamless and non seamless travel * * This is called after the player has finished initialization */ DECLARE_MULTICAST_DELEGATE_TwoParams(FOnLyraGameModePlayerInitialized, AGameModeBase* /*GameMode*/, AController* /*NewPlayer*/); /** * ALyraGameMode * * The base game mode class used by this project. */ UCLASS(MinimalAPI, Config = Game, Meta = (ShortTooltip = "The base game mode class used by this project.")) class ALyraGameMode : public AModularGameModeBase { GENERATED_BODY() public: UE_API ALyraGameMode(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get()); UFUNCTION(BlueprintCallable, Category = "Lyra|Pawn") UE_API const ULyraPawnData* GetPawnDataForController(const AController* InController) const; //~AGameModeBase interface UE_API virtual void InitGame(const FString& MapName, const FString& Options, FString& ErrorMessage) override; UE_API virtual UClass* GetDefaultPawnClassForController_Implementation(AController* InController) override; UE_API virtual APawn* SpawnDefaultPawnAtTransform_Implementation(AController* NewPlayer, const FTransform& SpawnTransform) override; UE_API virtual bool ShouldSpawnAtStartSpot(AController* Player) override; UE_API virtual void HandleStartingNewPlayer_Implementation(APlayerController* NewPlayer) override; UE_API virtual AActor* ChoosePlayerStart_Implementation(AController* Player) override; UE_API virtual void FinishRestartPlayer(AController* NewPlayer, const FRotator& StartRotation) override; UE_API virtual bool PlayerCanRestart_Implementation(APlayerController* Player) override; UE_API virtual void InitGameState() override; UE_API virtual bool UpdatePlayerStartSpot(AController* Player, const FString& Portal, FString& OutErrorMessage) override; UE_API virtual void GenericPlayerInitialization(AController* NewPlayer) override; UE_API virtual void FailedToRestartPlayer(AController* NewPlayer) override; //~End of AGameModeBase interface // Restart (respawn) the specified player or bot next frame // - If bForceReset is true, the controller will be reset this frame (abandoning the currently possessed pawn, if any) UFUNCTION(BlueprintCallable) UE_API void RequestPlayerRestartNextFrame(AController* Controller, bool bForceReset = false); // Agnostic version of PlayerCanRestart that can be used for both player bots and players UE_API virtual bool ControllerCanRestart(AController* Controller); // Delegate called on player initialization, described above FOnLyraGameModePlayerInitialized OnGameModePlayerInitialized; protected: UE_API void OnExperienceLoaded(const ULyraExperienceDefinition* CurrentExperience); UE_API bool IsExperienceLoaded() const; UE_API void OnMatchAssignmentGiven(FPrimaryAssetId ExperienceId, const FString& ExperienceIdSource); UE_API void HandleMatchAssignmentIfNotExpectingOne(); UE_API bool TryDedicatedServerLogin(); UE_API void HostDedicatedServerMatch(ECommonSessionOnlineMode OnlineMode); UFUNCTION() UE_API void OnUserInitializedForDedicatedServer(const UCommonUserInfo* UserInfo, bool bSuccess, FText Error, ECommonUserPrivilege RequestedPrivilege, ECommonUserOnlineContext OnlineContext); }; #undef UE_API