(Feat) Add Main Menu + Music Manger

This commit is contained in:
2026-07-29 20:18:51 +02:00
parent 956f48816b
commit 9b5ad7c8a4
55 changed files with 3727 additions and 125 deletions
@@ -3,12 +3,20 @@
#include "SurvivalGameInstance.h"
#include "EnhancedInputSubsystems.h"
#include "Engine/LocalPlayer.h"
#include "InputMappingContext.h"
#include "SurvivalUserSettings.h"
#include "UserSettings/EnhancedInputUserSettings.h"
void USurvivalGameInstance::Init()
{
Super::Init();
// Pas d'enregistrement des IMC ici : a ce stade il n'y a ni joueur local ni
// PlayerController, donc pas encore de UserSettings a qui parler.
// RegisterMappableContexts() est appelee par l'ecran de reglages.
// Les reglages sont deja LUS depuis le .ini par le moteur, mais rien ne les
// a encore APPLIQUES : sans cet appel, la resolution et la qualite
// choisies au dernier lancement resteraient lettre morte jusqu'au premier
@@ -25,3 +33,38 @@ void USurvivalGameInstance::Init()
UE_LOG(LogTemp, Error, TEXT("USurvivalGameInstance : GameUserSettingsClassName n'est pas configure dans DefaultEngine.ini, aucun reglage ne sera pris en compte."));
}
}
void USurvivalGameInstance::RegisterMappableContexts()
{
ULocalPlayer* LocalPlayer = GetFirstGamePlayer();
if (!LocalPlayer)
{
UE_LOG(LogTemp, Warning, TEXT("USurvivalGameInstance : aucun joueur local, enregistrement des touches remis a plus tard."));
return;
}
if (MappableContexts.IsEmpty())
{
UE_LOG(LogTemp, Warning, TEXT("USurvivalGameInstance : MappableContexts est vide, l'onglet Touches affichera 'Non assignee' partout. Ajoute IMC_Default dans le Blueprint de GameInstance."));
return;
}
UEnhancedInputLocalPlayerSubsystem* Subsystem = LocalPlayer->GetSubsystem<UEnhancedInputLocalPlayerSubsystem>();
UEnhancedInputUserSettings* InputSettings = Subsystem ? Subsystem->GetUserSettings() : nullptr;
if (!InputSettings)
{
UE_LOG(LogTemp, Error, TEXT("USurvivalGameInstance : reglages d'input introuvables. Coche 'Enable User Settings' dans Project Settings > Enhanced Input."));
return;
}
for (const TObjectPtr<UInputMappingContext>& Context : MappableContexts)
{
if (Context)
{
// Idempotent : le moteur ignore un contexte deja connu, on peut donc
// rappeler cette fonction sans precaution.
InputSettings->RegisterInputMappingContext(Context);
}
}
}