(Feat) Add Main Menu + Music Manger

This commit is contained in:
2026-07-29 20:18:51 +02:00
parent 956f48816b
commit 9b5ad7c8a4
55 changed files with 3727 additions and 125 deletions
@@ -0,0 +1,125 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "InputCoreTypes.h"
#include "SettingsTabWidget.h"
#include "SettingsControlsWidget.generated.h"
class UEnhancedInputUserSettings;
class USettingKeyRowWidget;
/**
* L'onglet "Touches".
*
* Le stockage, la persistance et l'application des surcharges appartiennent a
* UEnhancedInputUserSettings, natif depuis 5.3 : on n'ecrit ni serialisation ni
* reconstruction d'IMC. Cet onglet n'est qu'une facade -- afficher les touches
* courantes, capturer la nouvelle, arbitrer les conflits.
*
* PREREQUIS EDITEUR : sans "Enable User Settings" dans Project Settings ->
* Enhanced Input, et sans Player Mappable Key Settings sur chaque mapping de
* IMC_Default, toutes les lignes afficheront "Non assignée".
*
* Classe Abstract : on cree un WBP_SettingsControls qui en herite.
*/
UCLASS(Abstract)
class SURVIVAL_PROJET_API USettingsControlsWidget : public USettingsTabWidget
{
GENERATED_BODY()
public:
USettingsControlsWidget(const FObjectInitializer& ObjectInitializer);
virtual void NativeConstruct() override;
virtual void RefreshFromSettings() override;
virtual void ResetToDefaults() override;
protected:
UPROPERTY(meta = (BindWidget))
TObjectPtr<USettingKeyRowWidget> MoveForwardRow;
UPROPERTY(meta = (BindWidget))
TObjectPtr<USettingKeyRowWidget> MoveBackwardRow;
UPROPERTY(meta = (BindWidget))
TObjectPtr<USettingKeyRowWidget> MoveLeftRow;
UPROPERTY(meta = (BindWidget))
TObjectPtr<USettingKeyRowWidget> MoveRightRow;
UPROPERTY(meta = (BindWidget))
TObjectPtr<USettingKeyRowWidget> JumpRow;
UPROPERTY(meta = (BindWidget))
TObjectPtr<USettingKeyRowWidget> SprintRow;
UPROPERTY(meta = (BindWidget))
TObjectPtr<USettingKeyRowWidget> CrouchRow;
UPROPERTY(meta = (BindWidget))
TObjectPtr<USettingKeyRowWidget> InteractRow;
UPROPERTY(meta = (BindWidget))
TObjectPtr<USettingKeyRowWidget> UseItemRow;
UPROPERTY(meta = (BindWidget))
TObjectPtr<USettingKeyRowWidget> ToggleInventoryRow;
UPROPERTY(meta = (BindWidget))
TObjectPtr<USettingKeyRowWidget> DropItemRow;
/**
* Question posee en cas de conflit. Trois emplacements :
* {0} la touche, {1} l'action qui la possede, {2} l'action qui la reclame.
*/
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Reglages")
FText ConflictMessage;
private:
UFUNCTION()
void HandleRebindRequested(FName MappingName);
UFUNCTION()
void HandleKeyCaptured(FKey CapturedKey);
UFUNCTION()
void HandleConflictAnswered(bool bConfirmed);
/** Ecrit la touche en attente sur le mapping en attente, puis rafraichit. */
void ApplyPendingRebind();
/** Le sous-systeme de reglages d'input du joueur local, ou nullptr. */
UEnhancedInputUserSettings* GetInputSettings() const;
/** Toutes les lignes, dans l'ordre d'affichage. Ignore les nulles. */
TArray<USettingKeyRowWidget*> GetAllRows() const;
/** La ligne portant ce nom de mapping, ou nullptr. */
USettingKeyRowWidget* FindRow(FName MappingName) const;
/**
* Donne son identite a une ligne et retient son libelle.
*
* Le libelle vient du C++ et non du "Display Name" des Player Mappable Key
* Settings : ca t'evite de le saisir onze fois dans l'editeur, et ca garde
* les textes traduisibles au meme endroit que le reste du menu.
*/
void SetupRow(USettingKeyRowWidget* Row, FName MappingName, const FText& Label);
/** Libelle lisible d'un mapping. Retombe sur l'identifiant si inconnu. */
FText GetMappingDisplayName(FName MappingName) const;
/** Libelles retenus a la construction, pour les messages de conflit. */
TMap<FName, FText> MappingLabels;
/** Mapping en cours de remappage, et touche capturee en attente d'arbitrage. */
FName PendingMappingName = NAME_None;
FKey PendingKey;
/** Mapping a qui l'on volerait la touche si le joueur confirme. */
FName ConflictingMappingName = NAME_None;
};