Goran Lazarevski 3bcab085f8 Initial commit
2025-03-20 11:06:26 +01:00

86 lines
3.4 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "ModularGameMode.h"
#include "LyraGameMode.generated.h"
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(Config = Game, Meta = (ShortTooltip = "The base game mode class used by this project."))
class LYRAGAME_API ALyraGameMode : public AModularGameModeBase
{
GENERATED_BODY()
public:
ALyraGameMode(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get());
UFUNCTION(BlueprintCallable, Category = "Lyra|Pawn")
const ULyraPawnData* GetPawnDataForController(const AController* InController) const;
//~AGameModeBase interface
virtual void InitGame(const FString& MapName, const FString& Options, FString& ErrorMessage) override;
virtual UClass* GetDefaultPawnClassForController_Implementation(AController* InController) override;
virtual APawn* SpawnDefaultPawnAtTransform_Implementation(AController* NewPlayer, const FTransform& SpawnTransform) override;
virtual bool ShouldSpawnAtStartSpot(AController* Player) override;
virtual void HandleStartingNewPlayer_Implementation(APlayerController* NewPlayer) override;
virtual AActor* ChoosePlayerStart_Implementation(AController* Player) override;
virtual void FinishRestartPlayer(AController* NewPlayer, const FRotator& StartRotation) override;
virtual bool PlayerCanRestart_Implementation(APlayerController* Player) override;
virtual void InitGameState() override;
virtual bool UpdatePlayerStartSpot(AController* Player, const FString& Portal, FString& OutErrorMessage) override;
virtual void GenericPlayerInitialization(AController* NewPlayer) override;
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)
void RequestPlayerRestartNextFrame(AController* Controller, bool bForceReset = false);
// Agnostic version of PlayerCanRestart that can be used for both player bots and players
virtual bool ControllerCanRestart(AController* Controller);
// Delegate called on player initialization, described above
FOnLyraGameModePlayerInitialized OnGameModePlayerInitialized;
protected:
void OnExperienceLoaded(const ULyraExperienceDefinition* CurrentExperience);
bool IsExperienceLoaded() const;
void OnMatchAssignmentGiven(FPrimaryAssetId ExperienceId, const FString& ExperienceIdSource);
void HandleMatchAssignmentIfNotExpectingOne();
bool TryDedicatedServerLogin();
void HostDedicatedServerMatch(ECommonSessionOnlineMode OnlineMode);
UFUNCTION()
void OnUserInitializedForDedicatedServer(const UCommonUserInfo* UserInfo, bool bSuccess, FText Error, ECommonUserPrivilege RequestedPrivilege, ECommonUserOnlineContext OnlineContext);
};