(Feat) Add MainMenu
This commit is contained in:
@@ -6,12 +6,15 @@
|
||||
#include "GameFramework/PlayerController.h"
|
||||
#include "FpsPlayerController.generated.h"
|
||||
|
||||
class UConfirmDialogWidget;
|
||||
class UHotbarWidget;
|
||||
class UInputAction;
|
||||
class UInventoryComponent;
|
||||
class UInteractionPromptWidget;
|
||||
class UInventoryWidget;
|
||||
class UPauseMenuWidget;
|
||||
class UScreenFadeComponent;
|
||||
class USettingsMenuWidget;
|
||||
class USurvivalStatsWidget;
|
||||
class UUserWidget;
|
||||
struct FInputActionValue;
|
||||
@@ -36,6 +39,21 @@ public:
|
||||
UFUNCTION(BlueprintPure, Category = "UI")
|
||||
bool IsInventoryOpen() const { return bInventoryOpen; }
|
||||
|
||||
/** Ferme le menu de pause et relance le monde. */
|
||||
UFUNCTION(BlueprintCallable, Category = "UI|Pause")
|
||||
void ResumeGame();
|
||||
|
||||
/** Ouvre la demande de confirmation. Ne quitte rien par elle-meme. */
|
||||
UFUNCTION(BlueprintCallable, Category = "UI|Pause")
|
||||
void RequestQuitToMainMenu();
|
||||
|
||||
UFUNCTION(BlueprintPure, Category = "UI|Pause")
|
||||
bool IsPauseMenuOpen() const { return bPauseMenuOpen; }
|
||||
|
||||
/** Ouvre l'ecran de reglages par-dessus le menu de pause. */
|
||||
UFUNCTION(BlueprintCallable, Category = "UI|Reglages")
|
||||
void OpenSettings();
|
||||
|
||||
protected:
|
||||
virtual void BeginPlay() override;
|
||||
virtual void OnPossess(APawn* InPawn) override;
|
||||
@@ -105,6 +123,17 @@ protected:
|
||||
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Input")
|
||||
TObjectPtr<UInputAction> HotbarScrollAction;
|
||||
|
||||
/**
|
||||
* Echap : ferme l'inventaire s'il est ouvert, sinon bascule la pause.
|
||||
*
|
||||
* ATTENTION : coche "Trigger When Paused" sur l'asset IA_Pause. Un jeu en
|
||||
* pause ne fait plus qu'un tick reduit ou seules les actions portant ce
|
||||
* drapeau sont evaluees -- sans lui, on peut mettre en pause mais plus
|
||||
* jamais en sortir au clavier.
|
||||
*/
|
||||
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Input")
|
||||
TObjectPtr<UInputAction> PauseAction;
|
||||
|
||||
/**
|
||||
* Viseur, affiche en permanence. Widget separe du prompt : ce dernier se
|
||||
* met en Collapsed des qu'on ne vise plus rien, et emporterait le viseur
|
||||
@@ -129,6 +158,42 @@ protected:
|
||||
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "UI")
|
||||
TSubclassOf<USurvivalStatsWidget> SurvivalStatsClass;
|
||||
|
||||
/** Ton WBP_PauseMenu. */
|
||||
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "UI|Pause")
|
||||
TSubclassOf<UPauseMenuWidget> PauseMenuClass;
|
||||
|
||||
/**
|
||||
* Ton WBP_ConfirmDialog, le meme que celui du menu principal. Laisse-le
|
||||
* assigne : sans lui on retourne au menu sans rien demander, et la partie
|
||||
* est perdue sur un clic.
|
||||
*/
|
||||
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "UI|Pause")
|
||||
TSubclassOf<UConfirmDialogWidget> QuitToMenuDialogClass;
|
||||
|
||||
/** La question posee avant d'abandonner la partie. */
|
||||
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "UI|Pause")
|
||||
FText QuitToMenuMessage;
|
||||
|
||||
/**
|
||||
* Ton WBP_Settings, le meme que celui du menu principal. C'est tout
|
||||
* l'interet de son delegue OnCloseRequested : l'ecran ignore qui l'ouvre.
|
||||
*/
|
||||
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "UI|Reglages")
|
||||
TSubclassOf<USettingsMenuWidget> SettingsMenuClass;
|
||||
|
||||
/**
|
||||
* Ta map de menu principal.
|
||||
*
|
||||
* TSoftObjectPtr comme dans AMainMenuPlayerController : une reference dure
|
||||
* ferait charger la map du menu en meme temps que celle du jeu.
|
||||
*/
|
||||
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "UI|Pause")
|
||||
TSoftObjectPtr<UWorld> MainMenuLevel;
|
||||
|
||||
/** Fondu au noir avant de rendre la main au menu principal. */
|
||||
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "UI|Fondu", meta = (ClampMin = "0.1"))
|
||||
float QuitToMenuFadeDuration = 1.f;
|
||||
|
||||
UPROPERTY(Transient, BlueprintReadOnly, Category = "UI")
|
||||
TObjectPtr<UUserWidget> Crosshair;
|
||||
|
||||
@@ -144,9 +209,43 @@ protected:
|
||||
UPROPERTY(Transient, BlueprintReadOnly, Category = "UI")
|
||||
TObjectPtr<USurvivalStatsWidget> SurvivalStatsWidget;
|
||||
|
||||
UPROPERTY(Transient, BlueprintReadOnly, Category = "UI|Pause")
|
||||
TObjectPtr<UPauseMenuWidget> PauseMenu;
|
||||
|
||||
UPROPERTY(Transient, BlueprintReadOnly, Category = "UI|Pause")
|
||||
TObjectPtr<UConfirmDialogWidget> QuitToMenuDialog;
|
||||
|
||||
UPROPERTY(Transient, BlueprintReadOnly, Category = "UI|Reglages")
|
||||
TObjectPtr<USettingsMenuWidget> SettingsMenu;
|
||||
|
||||
private:
|
||||
void CreateHudWidgets();
|
||||
|
||||
/**
|
||||
* Echap. Une seule touche pour trois usages, d'ou une priorite explicite :
|
||||
* boite de confirmation, puis inventaire, puis pause. Sans cet ordre on se
|
||||
* retrouve avec l'inventaire et la pause ouverts en meme temps.
|
||||
*/
|
||||
void HandlePauseInput();
|
||||
|
||||
void OpenPauseMenu();
|
||||
|
||||
/** Oui : fondu au noir, puis retour au menu principal. */
|
||||
UFUNCTION()
|
||||
void HandleQuitToMenuConfirmed();
|
||||
|
||||
/** Non : on referme la boite et on rend la main au menu de pause. */
|
||||
UFUNCTION()
|
||||
void HandleQuitToMenuCancelled();
|
||||
|
||||
/** Le fondu est termine : on charge la map du menu, si c'est ce qu'on attendait. */
|
||||
UFUNCTION()
|
||||
void HandleFadeFinished();
|
||||
|
||||
/** L'ecran de reglages demande a se fermer : on rend la main au menu de pause. */
|
||||
UFUNCTION()
|
||||
void HandleSettingsCloseRequested();
|
||||
|
||||
/** Jette la pile survolee dans la grille, si l'inventaire est ouvert. */
|
||||
void DropHoveredItem();
|
||||
|
||||
@@ -166,4 +265,18 @@ private:
|
||||
FTimerHandle RespawnTimerHandle;
|
||||
|
||||
bool bInventoryOpen = false;
|
||||
|
||||
bool bPauseMenuOpen = false;
|
||||
|
||||
/**
|
||||
* La boite de confirmation avale Echap elle-meme quand elle a le focus,
|
||||
* mais un clic ailleurs le lui retire : sans ce booleen, Echap refermerait
|
||||
* alors le menu de pause en laissant la question affichee dans le vide.
|
||||
*/
|
||||
bool bQuitToMenuDialogOpen = false;
|
||||
|
||||
bool bSettingsOpen = false;
|
||||
|
||||
/** Distingue le fondu de sortie de tous les autres dans HandleFadeFinished. */
|
||||
bool bQuittingToMainMenu = false;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user