204 - Return to Main Menu
This commit is contained in:
parent
2f3404195c
commit
30e976772f
Binary file not shown.
|
@ -8,7 +8,7 @@ public class Blaster : ModuleRules
|
|||
{
|
||||
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[] { });
|
||||
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
};
|
Loading…
Reference in New Issue