76 lines
2.7 KiB
C++
76 lines
2.7 KiB
C++
// Fill out your copyright notice in the Description page of Project Settings.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "Engine/GameInstance.h"
|
|
#include "SurvivalGameInstance.generated.h"
|
|
|
|
class UInputMappingContext;
|
|
class ULocalPlayer;
|
|
|
|
/**
|
|
* Le seul objet qui survit aux changements de map.
|
|
*
|
|
* C'est l'equivalent le plus proche d'un singleton DontDestroyOnLoad d'Unity :
|
|
* il naît au lancement du jeu et meurt a sa fermeture. Tout le reste --
|
|
* GameMode, GameState, PlayerController, pawns, widgets -- est detruit et
|
|
* recree a chaque OpenLevel.
|
|
*
|
|
* Y mettre : les reglages, la sauvegarde en cours, et plus tard l'hebergement
|
|
* et le rejoindre-une-partie. Surtout pas d'etat de gameplay, qui appartient au
|
|
* monde et doit disparaitre avec lui.
|
|
*/
|
|
UCLASS()
|
|
class SURVIVAL_PROJET_API USurvivalGameInstance : public UGameInstance
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
virtual void Init() override;
|
|
|
|
/** Nom de la derniere camera de menu utilisee. NAME_None au premier lancement. */
|
|
UFUNCTION(BlueprintPure, Category = "Menu")
|
|
FName GetLastMenuCameraName() const { return LastMenuCameraName; }
|
|
|
|
UFUNCTION(BlueprintCallable, Category = "Menu")
|
|
void SetLastMenuCameraName(FName SpotName) { LastMenuCameraName = SpotName; }
|
|
|
|
/**
|
|
* Declare les IMC remappables aupres des reglages d'input du joueur.
|
|
*
|
|
* Appelee A LA DEMANDE, par l'ecran de reglages avant de lire les touches, et
|
|
* non depuis un evenement de demarrage. Raison : UserSettings n'est cree que
|
|
* dans UEnhancedInputLocalPlayerSubsystem::PlayerControllerChanged, et
|
|
* ULocalPlayer diffuse ses evenements AVANT de prevenir ses sous-systemes --
|
|
* tout hook precoce arrive donc trop tot, quel qu'il soit.
|
|
*
|
|
* Idempotente : le moteur ignore un contexte deja connu.
|
|
*/
|
|
UFUNCTION(BlueprintCallable, Category = "Input")
|
|
void RegisterMappableContexts();
|
|
|
|
protected:
|
|
/**
|
|
* Les mapping contexts dont les touches sont remappables. Mets-y IMC_Default.
|
|
*
|
|
* Ici et PAS sur le pawn : le menu principal n'a aucun pawn, et l'ecran de
|
|
* reglages doit pourtant afficher les touches. C'est le critere habituel --
|
|
* "est-ce que ca doit survivre au changement de map ?" -- qui envoie cette
|
|
* liste sur le GameInstance.
|
|
*/
|
|
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Input")
|
|
TArray<TObjectPtr<UInputMappingContext>> MappableContexts;
|
|
|
|
private:
|
|
/**
|
|
* Stocke un NOM et pas un index : les index changent des qu'on ajoute ou
|
|
* supprime une camera dans la map, et on retomberait sur autre chose.
|
|
*
|
|
* Ne sert qu'a eviter de retirer deux fois de suite le meme angle quand le
|
|
* joueur revient au menu -- d'ou le Transient, ca n'a pas a etre sauvegarde.
|
|
*/
|
|
UPROPERTY(Transient)
|
|
FName LastMenuCameraName = NAME_None;
|
|
};
|