Files

71 lines
2.4 KiB
C++

// Fill out your copyright notice in the Description page of Project Settings.
#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
// passage dans le menu.
//
// C'est le bon endroit : le GameInstance est le seul objet qui naisse avant
// la premiere map et survive a tous les changements de niveau.
if (USurvivalUserSettings* Settings = USurvivalUserSettings::Get())
{
Settings->ApplySettings(/*bCheckForCommandLineOverrides=*/false);
}
else
{
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);
}
}
}