// 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(); 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& Context : MappableContexts) { if (Context) { // Idempotent : le moteur ignore un contexte deja connu, on peut donc // rappeler cette fonction sans precaution. InputSettings->RegisterInputMappingContext(Context); } } }