(Feat) Add MainMenu
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
#include "MainMenuWidget.h"
|
||||
#include "MenuCameraSpot.h"
|
||||
#include "ScreenFadeComponent.h"
|
||||
#include "SettingsMenuWidget.h"
|
||||
#include "SurvivalGameInstance.h"
|
||||
|
||||
#define LOCTEXT_NAMESPACE "MainMenu"
|
||||
@@ -19,7 +20,9 @@ namespace
|
||||
// Le menu reste sous le voile de fondu, qui est en 1000.
|
||||
constexpr int32 ZOrderMainMenu = 0;
|
||||
|
||||
// La boite de confirmation passe devant le menu, mais sous le fondu.
|
||||
// L'ecran de reglages recouvre le menu, la boite de confirmation passe
|
||||
// devant les deux, et le fondu reste au-dessus de tout a 1000.
|
||||
constexpr int32 ZOrderSettingsMenu = 50;
|
||||
constexpr int32 ZOrderQuitDialog = 100;
|
||||
}
|
||||
|
||||
@@ -201,6 +204,56 @@ void AMainMenuPlayerController::QuitGame()
|
||||
}
|
||||
}
|
||||
|
||||
void AMainMenuPlayerController::OpenSettings()
|
||||
{
|
||||
// Une partie se charge deja : ouvrir un ecran maintenant serait un piege.
|
||||
if (PendingAction != EMenuPendingAction::None)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!SettingsMenuClass)
|
||||
{
|
||||
UE_LOG(LogTemp, Warning, TEXT("AMainMenuPlayerController : SettingsMenuClass n'est pas assignee, les reglages ne s'ouvriront pas."));
|
||||
return;
|
||||
}
|
||||
|
||||
// Creee a la premiere ouverture seulement, puis reutilisee.
|
||||
if (!SettingsMenu)
|
||||
{
|
||||
SettingsMenu = CreateWidget<USettingsMenuWidget>(this, SettingsMenuClass);
|
||||
if (!SettingsMenu)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
SettingsMenu->OnCloseRequested.AddDynamic(this, &AMainMenuPlayerController::HandleSettingsCloseRequested);
|
||||
SettingsMenu->AddToViewport(ZOrderSettingsMenu);
|
||||
}
|
||||
|
||||
SettingsMenu->Open();
|
||||
|
||||
// Le menu reste lisible derriere mais cesse de repondre : sans ca on
|
||||
// pourrait lancer une partie a travers l'ecran de reglages.
|
||||
if (MainMenu)
|
||||
{
|
||||
MainMenu->SetVisibility(ESlateVisibility::HitTestInvisible);
|
||||
}
|
||||
}
|
||||
|
||||
void AMainMenuPlayerController::HandleSettingsCloseRequested()
|
||||
{
|
||||
if (SettingsMenu)
|
||||
{
|
||||
SettingsMenu->Close();
|
||||
}
|
||||
|
||||
if (MainMenu)
|
||||
{
|
||||
MainMenu->SetVisibility(ESlateVisibility::Visible);
|
||||
}
|
||||
}
|
||||
|
||||
void AMainMenuPlayerController::HandleQuitConfirmed()
|
||||
{
|
||||
// Pas de fondu : le joueur vient de confirmer, le faire patienter une
|
||||
@@ -238,6 +291,12 @@ void AMainMenuPlayerController::HandleFadeFinished()
|
||||
|
||||
void AMainMenuPlayerController::EndPlay(const EEndPlayReason::Type EndPlayReason)
|
||||
{
|
||||
if (SettingsMenu)
|
||||
{
|
||||
SettingsMenu->RemoveFromParent();
|
||||
SettingsMenu = nullptr;
|
||||
}
|
||||
|
||||
if (QuitDialog)
|
||||
{
|
||||
QuitDialog->RemoveFromParent();
|
||||
|
||||
Reference in New Issue
Block a user