(Feat) Add MainMenu

This commit is contained in:
2026-07-28 14:10:17 +02:00
parent ed7c7fd991
commit 175bef228c
33 changed files with 2331 additions and 12 deletions
@@ -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();