71 lines
2.4 KiB
C++
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);
|
|
}
|
|
}
|
|
}
|