204 - Return to Main Menu

This commit is contained in:
Kingsmedia 2022-05-28 14:46:58 +02:00
parent 2f3404195c
commit 30e976772f
4 changed files with 138 additions and 1 deletions

Binary file not shown.

View File

@ -8,7 +8,7 @@ public class Blaster : ModuleRules
{ {
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "Niagara" }); PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "Niagara", "MultiplayerSessions", "OnlineSubsystem", "OnlineSubsystemSteam", "OnlineSubsystemEOS" });
PrivateDependencyModuleNames.AddRange(new string[] { }); PrivateDependencyModuleNames.AddRange(new string[] { });

View File

@ -0,0 +1,99 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "ReturnToMainMenu.h"
#include "MultiplayerSessionsSubsystem.h"
#include "Components/Button.h"
#include "GameFramework/GameModeBase.h"
void UReturnToMainMenu::MenuSetup()
{
AddToViewport();
SetVisibility(ESlateVisibility::Visible);
bIsFocusable = true;
if (const UWorld* World = GetWorld())
{
PlayerController = PlayerController == nullptr ? World->GetFirstPlayerController() : PlayerController;
if (PlayerController)
{
FInputModeGameAndUI InputModeData;
InputModeData.SetWidgetToFocus(TakeWidget());
PlayerController->SetInputMode(InputModeData);
PlayerController->SetShowMouseCursor(true);
}
}
if (ReturnButton)
{
ReturnButton->OnClicked.AddDynamic(this, &UReturnToMainMenu::ReturnButtonClicked);
}
if (const UGameInstance* GameInstance = GetGameInstance())
{
MultiplayerSessionsSubsystem = GameInstance->GetSubsystem<UMultiplayerSessionsSubsystem>();
if (MultiplayerSessionsSubsystem)
{
MultiplayerSessionsSubsystem->MultiplayerOnDestroySessionComplete.AddDynamic(this, &UReturnToMainMenu::OnDestroySessionComplete);
}
}
}
bool UReturnToMainMenu::Initialize()
{
if (!Super::Initialize())
{
return false;
}
return true;
}
void UReturnToMainMenu::MenuTearDown()
{
RemoveFromParent();
if (const UWorld* World = GetWorld())
{
PlayerController = PlayerController == nullptr ? World->GetFirstPlayerController() : PlayerController;
if (PlayerController)
{
const FInputModeGameOnly InputModeData;
PlayerController->SetInputMode(InputModeData);
PlayerController->SetShowMouseCursor(false);
}
}
}
void UReturnToMainMenu::ReturnButtonClicked()
{
if (MultiplayerSessionsSubsystem)
{
ReturnButton->SetIsEnabled(false);
MultiplayerSessionsSubsystem->DestroySession();
}
}
void UReturnToMainMenu::OnDestroySessionComplete(bool bWasSuccessful)
{
if (!bWasSuccessful)
{
ReturnButton->SetIsEnabled(true);
return;
}
if (const UWorld* World = GetWorld())
{
if (AGameModeBase* GameMode = World->GetAuthGameMode<AGameModeBase>())
{
GameMode->ReturnToMainMenuHost();
}
else
{
PlayerController = PlayerController == nullptr ? World->GetFirstPlayerController() : PlayerController;
if (PlayerController)
{
PlayerController->ClientReturnToMainMenuWithTextReason(FText());
}
}
}
}

View File

@ -0,0 +1,38 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "ReturnToMainMenu.generated.h"
/**
*
*/
UCLASS()
class BLASTER_API UReturnToMainMenu : public UUserWidget
{
GENERATED_BODY()
public:
void MenuSetup();
void MenuTearDown();
protected:
virtual bool Initialize() override;
UFUNCTION()
void OnDestroySessionComplete(bool bWasSuccessful);
private:
UPROPERTY(meta = (BindWidget))
class UButton* ReturnButton;
UFUNCTION()
void ReturnButtonClicked();
UPROPERTY()
class UMultiplayerSessionsSubsystem* MultiplayerSessionsSubsystem;
UPROPERTY()
class APlayerController* PlayerController;
};