90 lines
3.6 KiB
C++
90 lines
3.6 KiB
C++
// 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
|