(Feat) Add MainMenu
This commit is contained in:
@@ -0,0 +1,135 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Blueprint/UserWidget.h"
|
||||
#include "SettingsMenuWidget.generated.h"
|
||||
|
||||
class UButton;
|
||||
class UConfirmDialogWidget;
|
||||
class USettingsTabWidget;
|
||||
class UWidgetSwitcher;
|
||||
|
||||
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnSettingsCloseRequested);
|
||||
|
||||
/**
|
||||
* L'ecran de reglages : une barre d'onglets, un WidgetSwitcher, Retour et
|
||||
* Reinitialiser.
|
||||
*
|
||||
* Il ne sait PAS qui l'a ouvert. Il demande a se fermer via OnCloseRequested et
|
||||
* c'est l'appelant -- menu principal ou menu de pause -- qui decide de ce que
|
||||
* "Retour" veut dire. Sans ca il faudrait un ecran par contexte.
|
||||
*
|
||||
* Il ne connait pas davantage le contenu de ses onglets : il appelle
|
||||
* RefreshFromSettings et ResetToDefaults sur USettingsTabWidget. Ajouter
|
||||
* l'onglet Graphismes ne demandera aucune ligne ici.
|
||||
*
|
||||
* Classe Abstract : on cree un WBP_Settings qui en herite.
|
||||
*/
|
||||
UCLASS(Abstract)
|
||||
class SURVIVAL_PROJET_API USettingsMenuWidget : public UUserWidget
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
USettingsMenuWidget(const FObjectInitializer& ObjectInitializer);
|
||||
|
||||
virtual void NativeConstruct() override;
|
||||
virtual void NativeDestruct() override;
|
||||
virtual FReply NativeOnKeyDown(const FGeometry& InGeometry, const FKeyEvent& InKeyEvent) override;
|
||||
|
||||
UPROPERTY(BlueprintAssignable, Category = "Reglages")
|
||||
FOnSettingsCloseRequested OnCloseRequested;
|
||||
|
||||
/**
|
||||
* Affiche l'ecran, rafraichit l'onglet visible et prend le focus clavier.
|
||||
*
|
||||
* Passe par ici et jamais par SetVisibility : sans le focus, Echap ne
|
||||
* refermerait pas l'ecran.
|
||||
*/
|
||||
UFUNCTION(BlueprintCallable, Category = "Reglages")
|
||||
void Open();
|
||||
|
||||
/** Masque l'ecran et ecrit le fichier de reglages. */
|
||||
UFUNCTION(BlueprintCallable, Category = "Reglages")
|
||||
void Close();
|
||||
|
||||
protected:
|
||||
UPROPERTY(meta = (BindWidget))
|
||||
TObjectPtr<UWidgetSwitcher> TabSwitcher;
|
||||
|
||||
UPROPERTY(meta = (BindWidget))
|
||||
TObjectPtr<UButton> BackButton;
|
||||
|
||||
UPROPERTY(meta = (BindWidgetOptional))
|
||||
TObjectPtr<UButton> ResetButton;
|
||||
|
||||
/**
|
||||
* Les onglets a venir. Grises automatiquement tant que le WidgetSwitcher ne
|
||||
* contient pas la page correspondante -- meme principe que les boutons de
|
||||
* coop du menu principal : ils annoncent la couleur sans mener nulle part.
|
||||
*/
|
||||
UPROPERTY(meta = (BindWidgetOptional))
|
||||
TObjectPtr<UButton> GameplayTabButton;
|
||||
|
||||
UPROPERTY(meta = (BindWidgetOptional))
|
||||
TObjectPtr<UButton> DisplayTabButton;
|
||||
|
||||
UPROPERTY(meta = (BindWidgetOptional))
|
||||
TObjectPtr<UButton> GraphicsTabButton;
|
||||
|
||||
UPROPERTY(meta = (BindWidgetOptional))
|
||||
TObjectPtr<UButton> AudioTabButton;
|
||||
|
||||
/**
|
||||
* Boite de confirmation POSEE DANS le WBP_Settings, et non ajoutee au
|
||||
* viewport : elle se retrouve ainsi naturellement au-dessus de l'ecran de
|
||||
* reglages, sans avoir a lui trouver un ZOrder qui n'entre en conflit ni
|
||||
* avec le menu de pause ni avec la boite d'abandon de partie.
|
||||
*
|
||||
* Absente, "Reinitialiser" agit sans rien demander.
|
||||
*/
|
||||
UPROPERTY(meta = (BindWidgetOptional))
|
||||
TObjectPtr<UConfirmDialogWidget> ResetDialog;
|
||||
|
||||
/** La question posee avant de reinitialiser l'onglet visible. */
|
||||
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Reglages")
|
||||
FText ResetDialogMessage;
|
||||
|
||||
private:
|
||||
UFUNCTION()
|
||||
void HandleBackClicked();
|
||||
|
||||
UFUNCTION()
|
||||
void HandleResetClicked();
|
||||
|
||||
UFUNCTION()
|
||||
void HandleResetConfirmed();
|
||||
|
||||
UFUNCTION()
|
||||
void HandleResetCancelled();
|
||||
|
||||
UFUNCTION()
|
||||
void HandleGameplayTabClicked();
|
||||
|
||||
UFUNCTION()
|
||||
void HandleDisplayTabClicked();
|
||||
|
||||
UFUNCTION()
|
||||
void HandleGraphicsTabClicked();
|
||||
|
||||
UFUNCTION()
|
||||
void HandleAudioTabClicked();
|
||||
|
||||
/** Change de page et rafraichit la nouvelle. Ignore un index inexistant. */
|
||||
void ShowTab(int32 Index);
|
||||
|
||||
/** La page actuellement affichee, ou nullptr si le switcher est vide. */
|
||||
USettingsTabWidget* GetActiveTab() const;
|
||||
|
||||
/** Grise les boutons dont la page n'existe pas encore. */
|
||||
void UpdateTabButtonStates();
|
||||
|
||||
bool bResetDialogOpen = false;
|
||||
};
|
||||
Reference in New Issue
Block a user