(Feat) Add footsteps

This commit is contained in:
2026-08-11 15:23:10 +02:00
parent e8e128457a
commit 176beab9fc
4776 changed files with 18806 additions and 121 deletions
@@ -6,6 +6,15 @@
#include "Components/Button.h"
#include "FpsPlayerController.h"
UPauseMenuWidget::UPauseMenuWidget(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
// Sans ce drapeau le widget ne peut pas prendre le focus clavier, et
// NativeOnKeyDown ne serait jamais appele. Il ne se change qu'a la
// construction, d'ou sa presence ici et pas dans Open().
SetIsFocusable(true);
}
void UPauseMenuWidget::NativeConstruct()
{
Super::NativeConstruct();
@@ -62,6 +71,56 @@ void UPauseMenuWidget::NativeDestruct()
Super::NativeDestruct();
}
void UPauseMenuWidget::Open()
{
SetInteractive(true);
}
void UPauseMenuWidget::Close()
{
SetVisibility(ESlateVisibility::Collapsed);
}
void UPauseMenuWidget::SetInteractive(bool bInteractive)
{
// HitTestInvisible et non Collapsed : le menu reste lisible derriere l'ecran
// qui passe devant, mais on ne peut plus cliquer Reprendre a travers.
SetVisibility(bInteractive ? ESlateVisibility::Visible : ESlateVisibility::HitTestInvisible);
if (bInteractive)
{
// Le focus doit etre repris a CHAQUE fois que le menu redevient la couche
// active, pas seulement a sa premiere ouverture : l'ecran de reglages et
// la boite de confirmation le prennent pour eux et ne le rendent pas.
SetKeyboardFocus();
}
}
FReply UPauseMenuWidget::NativeOnKeyDown(const FGeometry& InGeometry, const FKeyEvent& InKeyEvent)
{
const FKey Key = InKeyEvent.GetKey();
// GetVirtualKey() et non la constante, depreciee en 5.8 : la resolution se
// fait a l'appel, donc selon la manette reellement branchee.
if (Key == EKeys::Escape || Key == EKeys::Virtual_Gamepad_Back.GetVirtualKey())
{
if (AFpsPlayerController* Controller = GetOwningPlayer<AFpsPlayerController>())
{
// HandleEscapeInput et non ResumeGame : c'est le controller qui tient
// la priorite entre boite, reglages, coffre, inventaire et pause. Un
// second chemin qui refermerait directement le menu laisserait
// l'ecran pose par-dessus affiche dans le vide.
Controller->HandleEscapeInput();
// Handled : sans ca la touche continue de remonter et serait
// consommee une seconde fois par ce qui se trouve derriere.
return FReply::Handled();
}
}
return Super::NativeOnKeyDown(InGeometry, InKeyEvent);
}
void UPauseMenuWidget::HandleSettingsClicked()
{
if (AFpsPlayerController* Controller = GetOwningPlayer<AFpsPlayerController>())