blaster/Source/Blaster/HUD/ReturnToMainMenu.cpp

99 lines
2.3 KiB
C++
Raw Normal View History

2022-05-28 12:46:58 +00:00
// 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());
}
}
}
}