From b55eda5e5132b8bdf4d85805aee1715929b9b8a1 Mon Sep 17 00:00:00 2001 From: Dolobarsch Date: Sat, 5 Sep 2026 00:33:04 +0200 Subject: [PATCH] =?UTF-8?q?Neues=20Men=C3=BCsystem=20implementiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ein flexibles Menüsystem wurde hinzugefügt, das ein Hauptmenü und ein In-Game-Menü umfasst. Das Hauptmenü bietet Optionen wie "Neues Spiel starten", "Optionen" und "Credits". Das In-Game-Menü ermöglicht Pausenfunktionen wie "Fortsetzen", "Optionen" und "Zum Desktop beenden". Neue Klassen wurden eingeführt, darunter `MenuManagerSubsystem` zur Verwaltung von Menübildschirmen, `MenuScreenWidget` als Basisklasse für Menüs sowie spezifische Widgets wie `MainMenuWidget`, `InGameMenuWidget` und `OptionsMenuWidget`. Zusätzlich wurden stilisierte Schaltflächen (`MenuButtonWidget`) und ein neuer `MenuPlayerController` für menübasierte Levels implementiert. Änderungen an `KingshearthLegacyPlayerController` ermöglichen die Steuerung des In-Game-Menüs. Binäre Assets für Menüs und UI wurden hinzugefügt. --- Config/DefaultEngine.ini | 4 +- Content/FireSystem/FX/NS_CampFire.uasset | Bin 1632504 -> 1632533 bytes Content/FireSystem/Materials/M_Smoke.uasset | Bin 19214 -> 19642 bytes Content/Input/Actions/IA_Menu.uasset | Bin 0 -> 1154 bytes Content/Input/IMC_Default.uasset | Bin 8320 -> 9111 bytes Content/Levels/MainMenu.umap | Bin 0 -> 8852 bytes .../BP_ThirdPersonPlayerController.uasset | Bin 22025 -> 22420 bytes Content/UI/Menu/BP_MainMenuGameMode.uasset | Bin 0 -> 21412 bytes .../UI/Menu/BP_MenuPlayerController.uasset | Bin 0 -> 20985 bytes Content/UI/Menu/WBP_Button.uasset | Bin 0 -> 31239 bytes Content/UI/Menu/WBP_CreditsMenu.uasset | Bin 0 -> 31737 bytes Content/UI/Menu/WBP_InGameMenu.uasset | Bin 0 -> 39194 bytes Content/UI/Menu/WBP_MainMenu.uasset | Bin 0 -> 41394 bytes Content/UI/Menu/WBP_OptionsMenu.uasset | Bin 0 -> 29398 bytes .../KingshearthLegacy.Build.cs | 1 + .../KingshearthLegacyPlayerController.cpp | 36 ++++++ .../KingshearthLegacyPlayerController.h | 14 +++ .../UI/Menu/CreditsMenuWidget.h | 15 +++ .../UI/Menu/InGameMenuWidget.cpp | 64 ++++++++++ .../UI/Menu/InGameMenuWidget.h | 57 +++++++++ .../UI/Menu/MainMenuWidget.cpp | 68 ++++++++++ .../UI/Menu/MainMenuWidget.h | 69 ++++++++++ .../UI/Menu/MenuButtonWidget.cpp | 68 ++++++++++ .../UI/Menu/MenuButtonWidget.h | 70 +++++++++++ .../UI/Menu/MenuManagerSubsystem.cpp | 118 ++++++++++++++++++ .../UI/Menu/MenuManagerSubsystem.h | 59 +++++++++ .../UI/Menu/MenuPlayerController.cpp | 22 ++++ .../UI/Menu/MenuPlayerController.h | 24 ++++ .../UI/Menu/MenuScreenWidget.cpp | 41 ++++++ .../UI/Menu/MenuScreenWidget.h | 50 ++++++++ .../UI/Menu/OptionsMenuWidget.h | 16 +++ 31 files changed, 794 insertions(+), 2 deletions(-) create mode 100644 Content/Input/Actions/IA_Menu.uasset create mode 100644 Content/Levels/MainMenu.umap create mode 100644 Content/UI/Menu/BP_MainMenuGameMode.uasset create mode 100644 Content/UI/Menu/BP_MenuPlayerController.uasset create mode 100644 Content/UI/Menu/WBP_Button.uasset create mode 100644 Content/UI/Menu/WBP_CreditsMenu.uasset create mode 100644 Content/UI/Menu/WBP_InGameMenu.uasset create mode 100644 Content/UI/Menu/WBP_MainMenu.uasset create mode 100644 Content/UI/Menu/WBP_OptionsMenu.uasset create mode 100644 Source/KingshearthLegacy/UI/Menu/CreditsMenuWidget.h create mode 100644 Source/KingshearthLegacy/UI/Menu/InGameMenuWidget.cpp create mode 100644 Source/KingshearthLegacy/UI/Menu/InGameMenuWidget.h create mode 100644 Source/KingshearthLegacy/UI/Menu/MainMenuWidget.cpp create mode 100644 Source/KingshearthLegacy/UI/Menu/MainMenuWidget.h create mode 100644 Source/KingshearthLegacy/UI/Menu/MenuButtonWidget.cpp create mode 100644 Source/KingshearthLegacy/UI/Menu/MenuButtonWidget.h create mode 100644 Source/KingshearthLegacy/UI/Menu/MenuManagerSubsystem.cpp create mode 100644 Source/KingshearthLegacy/UI/Menu/MenuManagerSubsystem.h create mode 100644 Source/KingshearthLegacy/UI/Menu/MenuPlayerController.cpp create mode 100644 Source/KingshearthLegacy/UI/Menu/MenuPlayerController.h create mode 100644 Source/KingshearthLegacy/UI/Menu/MenuScreenWidget.cpp create mode 100644 Source/KingshearthLegacy/UI/Menu/MenuScreenWidget.h create mode 100644 Source/KingshearthLegacy/UI/Menu/OptionsMenuWidget.h diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini index 254dd40..631e962 100644 --- a/Config/DefaultEngine.ini +++ b/Config/DefaultEngine.ini @@ -1,6 +1,6 @@ [/Script/EngineSettings.GameMapsSettings] -GameDefaultMap=/Game/ThirdPerson/Lvl_ThirdPerson.Lvl_ThirdPerson -EditorStartupMap=/Game/ThirdPerson/Lvl_ThirdPerson.Lvl_ThirdPerson +GameDefaultMap=/Game/Levels/MainMenu.MainMenu +EditorStartupMap=/Game/Levels/MainMenu.MainMenu GlobalDefaultGameMode=/Game/ThirdPerson/Blueprints/BP_ThirdPersonGameMode.BP_ThirdPersonGameMode_C bOffsetPlayerGamepadIds=False diff --git a/Content/FireSystem/FX/NS_CampFire.uasset b/Content/FireSystem/FX/NS_CampFire.uasset index d5a7bca053cf9e0af920af0fa2951a9053d1dca9..6bbb3fe749858cbe8d9b271cab6bf1639d1a9029 100644 GIT binary patch delta 1407 zcmaJ>ZA_b06z1Oh7D`K@9qrzd%rc``;)u+w823Y=rfzBjxY>~THB`u$AVm`#&Sg56 zCe@fMU|~mHCd!9yS)dY%*BBzTkj$`dvD$=1X51=sjTsw*B9jU8+_(N9Xt~LAp8K40 z&->hSf4ny%H61_Jw3>~1pt@ROJ?``X*$P!wbOkb_j>A!sKAPk}^{7&Hr#_!K4L3(zAe zMWae7dIU+3NUGX&g6`nRz$Ar0hN9Zlijp#whGsz&rjq2+D9JHF6l_|BdIT{rW+}>( zq(qWxbt1{5I#T*HVcb|p78tQXRs(U8&9JM1Y-0HnvhS0bJm_p7F1F!9QslgXLLWQ~N)4@dF$pFc$z$x|@8)E_)QzX2akH@T`rU;4 z-BfEeJiF_mP;6}Dqy5KvJMPRLkGDhHlIdO;KT0h;_b9aygXgVm)3I~Mou3s{b)Efm zX0Z>x3(?JRXq4LZt7{M$rTh8L4{3+a&==g-6sXUs=>GZsaN_+3LM!`L*Ese?DK9@s z>$QdhWvA`_*pVkbe<@@4F9Tigu54UgOB#lT=s}&qS=VxEspT1a_uf~nHO}IXR`#u~ z3B$o+eXGxV>*dg%@~^fQ)(^LJaWI^bED*O!rToSm9n|V01+kCkU3HK9UyF2q(BFF+ zB9Aa5EN_v18#=`T75b%cthckU#BpN(Hu=GQ-U+Z5s-EL#D%r$6dT&+5+`}X1w)GUT zgIgW%IF(*Ly+QI5{`wotlKKDkTpf^P!p|ROlbSXB`8P*ccu$H8%+9ZQfwP(v);RfW zilI3UeWE;t-@3z6%7Jw!rIda+YDzy#P|Dr=A3u%{yv4fK+j_U}P$AM083;8Z6QMz9 z5m^WwA{&u|&?5|pb%vd&9;94j)Xaa delta 1395 zcmaJ-ZA?>F80MUN+go~D=xs0FcAMzjW?@@&iLflpq?C|g{6dtOnarSpOd<+D!~~-Y z3&NO~5!^*y1`0+=)J!F&bZ7Gm6c+_qG7#4($q;2*w@IvkgMqVqZ@V9at(@d}pZmNY z_c`x5+?PAqn_FX-HyqvIO$b!q_;%lCm#Y5wVV`^Xp{et4{!Hdy_uHdpo*+OmIX2Qvq2;Z18>od4r=qMQsW=pt*o# zbHRbIh~0r=Y$z;BHL>p3uz0MA&Hsv=ohY(K6d;b~HYex~JV` zhQUqm1X6yVIXAne8G4plPPv=Dcb+M6f9>=(|MbYmfpm+H2fvedu_t5HBU)bks)T#t zxBRqAiBGy7uU~i^deb-=o-gAcdcWk_)>=+9kZ-2_DXCS7cg}gLpLKydLH7Z>mC5-Q zTk=cErKsn66p$xHwKIQE=HhEuh z5LPsz1g0E!N4Lni_cx{nldWQM;@*zsX$@CCuP#pQ2KPE@gM)tif_d!~T|KECfnaH0 ePtW3x+kNkDYd4*{0$UG|I9QNLO)%uQC;bCUV>{#k diff --git a/Content/FireSystem/Materials/M_Smoke.uasset b/Content/FireSystem/Materials/M_Smoke.uasset index 202c839cdade64b0e18041469a0d242038c0c110..2e0ba9bfa3019612b33461c335d97176b460306c 100644 GIT binary patch delta 8936 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 E0};l9O#lD@ delta 8667 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 W%&2n48c*iWiT`SU8viR9@c#hq`)L9I literal 8320 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 delta 2806 zcmb`JTTGlq6o6+aDr>nc?EdSrEDJ?SfpRHAEfiXoMciGWdxKrTR!gnhf^D%_ZLx{g z)YL|e3OS80#22G!Vw=>4=!-8+)Cc3GX%m~&2h)c}tyl|+V$ugZGyfUj{Z&QMkhU z%C2JPcX1u4dI`&P7skVmtMQqh4DBA6xbMvwXVy{%w65Ma^VRCp9FFHy!-bp$_$K$_ z+Az6dR2EC_PL3W<`jUG`$0GZ8y`V-7L)2x1@AJlZ7=l(0*6-%6fmf`5!kE3Ex5Czf zDjtWM_J?>T)Z6?}XS=f8TW@cNiTp2?+am=p@kgLkYtoW5{I59Yr%CUCDb1Ebo-ri{ z(~?;n?b)>C7bH)blHI1{DN{0PN}e+%&zq8vksMR2a|35Rt_VpXc9K3uat`hGliop6 zh&%0Wq1}NrcEi+1v2vLRyjK~@Z8=0OA;bX_Mc*(Z*{*{$WQQqv+>|_FB>a$=2bVEX zj~0@y8RHKxdmvA$jhM%54l6=Zh+U+sv;G^}9icwsGTv!-6YVCH9n2TjXH0j&t*{5Y zu1Lng0F0M-;3HR?V-MN1pj;sR2Z1Xf;Bwc_QPvX2^BC_g6sGEBKjV6v!9 z8#K`Kq@M&{)CuKorzUQU7(@6bR_VAI#*ve3@!=k?`Cq}(ub`gk%9w-pe#163@QDKR}jlc%p3$CEMSPfRDBWB_*MoZ(K zuiWd&-3R{QMjnGpiAwk&XmuzqacZ_5a4p!5H>|X~++|!jIaLww4_v*?BDZ5{@$ZPm zSr^4YjD$Q!?3>Y9L!OE{?q9rEQ$-*+MJvSC92B z{JVNv$p3V&wJarmCB--HRx{K`-0hppW_BBA_Ao)?v69OjAkYD?M@pf8+Y!qa>WP9s zI%3&MEq!ATgsix4_~yY>sFHWWe5}wye=G1U&M&gVTqu)^r>7Bi_SHf>T*>>)DHur~8Zlv6#@ZD{adW+RbNZpjmxX1!OTF@IeS#Gce%CZ7luv@-IDEr{;M2lrex5T&QQlfcNBehl>v?2m2vv5we{tsTP B=Gy=O diff --git a/Content/UI/Menu/BP_MainMenuGameMode.uasset b/Content/UI/Menu/BP_MainMenuGameMode.uasset new file mode 100644 index 0000000000000000000000000000000000000000..633930a29785f7ab8e3822175a8070c465139609 GIT binary patch literal 21412 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 H1>pZ5;BQRT literal 0 HcmV?d00001 diff --git a/Content/UI/Menu/BP_MenuPlayerController.uasset b/Content/UI/Menu/BP_MenuPlayerController.uasset new file mode 100644 index 0000000000000000000000000000000000000000..322a3b5c8da2d79e005e9622b1f369dcb0be8847 GIT binary patch literal 20985 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 @JlkXWx{%86-sP?@zhM3@+j}w-u{Pf0nDN}5T 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 literal 0 HcmV?d00001 diff --git a/Content/UI/Menu/WBP_InGameMenu.uasset b/Content/UI/Menu/WBP_InGameMenu.uasset new file mode 100644 index 0000000000000000000000000000000000000000..93954f8d90698b39e9c418fd2be02dca9850eb00 GIT binary patch literal 39194 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 Ycufz{Q64HkOUMh_`C@-Lpwa&S0H?I%a{vGU literal 0 HcmV?d00001 diff --git a/Content/UI/Menu/WBP_MainMenu.uasset b/Content/UI/Menu/WBP_MainMenu.uasset new file mode 100644 index 0000000000000000000000000000000000000000..7831e8d4551d9b53d0db900b4abb9515c217864f GIT binary patch literal 41394 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 Xyw5?0yfnWvd3O9$52vJybKw6k_t&-_ literal 0 HcmV?d00001 diff --git a/Source/KingshearthLegacy/KingshearthLegacy.Build.cs b/Source/KingshearthLegacy/KingshearthLegacy.Build.cs index c82cf22..d5407f7 100644 --- a/Source/KingshearthLegacy/KingshearthLegacy.Build.cs +++ b/Source/KingshearthLegacy/KingshearthLegacy.Build.cs @@ -30,6 +30,7 @@ public class KingshearthLegacy : ModuleRules "KingshearthLegacy", "KingshearthLegacy/AttributeSets", "KingshearthLegacy/GameplayEffects", + "KingshearthLegacy/UI/Menu", "KingshearthLegacy/Variant_Platforming", "KingshearthLegacy/Variant_Platforming/Animation", "KingshearthLegacy/Variant_Combat", diff --git a/Source/KingshearthLegacy/KingshearthLegacyPlayerController.cpp b/Source/KingshearthLegacy/KingshearthLegacyPlayerController.cpp index 7ff2101..f72a280 100644 --- a/Source/KingshearthLegacy/KingshearthLegacyPlayerController.cpp +++ b/Source/KingshearthLegacy/KingshearthLegacyPlayerController.cpp @@ -2,13 +2,17 @@ #include "KingshearthLegacyPlayerController.h" +#include "EnhancedInputComponent.h" #include "EnhancedInputSubsystems.h" +#include "Engine/GameInstance.h" #include "Engine/LocalPlayer.h" #include "InputMappingContext.h" #include "Blueprint/UserWidget.h" #include "KingshearthLegacy.h" #include "Widgets/Input/SVirtualJoystick.h" #include "UI/PlayerHUDWidget.h" +#include "UI/Menu/InGameMenuWidget.h" +#include "UI/Menu/MenuManagerSubsystem.h" #include "KingshearthLegacyCharacter.h" void AKingshearthLegacyPlayerController::BeginPlay() @@ -59,6 +63,14 @@ void AKingshearthLegacyPlayerController::SetupInputComponent() } } } + + if (UEnhancedInputComponent* EnhancedInputComponent = Cast(InputComponent)) + { + if (MenuAction) + { + EnhancedInputComponent->BindAction(MenuAction, ETriggerEvent::Started, this, &AKingshearthLegacyPlayerController::ToggleInGameMenu); + } + } } } @@ -100,3 +112,27 @@ bool AKingshearthLegacyPlayerController::ShouldUseTouchControls() const // are we on a mobile platform? Should we force touch? return SVirtualJoystick::ShouldDisplayTouchInterface() || bForceTouchControls; } + +void AKingshearthLegacyPlayerController::ToggleInGameMenu() +{ + if (!IsLocalPlayerController() || !InGameMenuClass) + { + return; + } + + UGameInstance* GI = GetGameInstance(); + UMenuManagerSubsystem* MenuManager = GI ? GI->GetSubsystem() : nullptr; + if (!MenuManager) + { + return; + } + + if (MenuManager->IsAnyScreenOpen()) + { + MenuManager->PopScreen(); + } + else + { + MenuManager->PushScreen(InGameMenuClass); + } +} diff --git a/Source/KingshearthLegacy/KingshearthLegacyPlayerController.h b/Source/KingshearthLegacy/KingshearthLegacyPlayerController.h index cedc5b6..e35931c 100644 --- a/Source/KingshearthLegacy/KingshearthLegacyPlayerController.h +++ b/Source/KingshearthLegacy/KingshearthLegacyPlayerController.h @@ -7,8 +7,10 @@ #include "KingshearthLegacyPlayerController.generated.h" class UInputMappingContext; +class UInputAction; class UUserWidget; class UPlayerHUDWidget; +class UInGameMenuWidget; /** * Basic PlayerController class for a third person game @@ -49,6 +51,14 @@ protected: UPROPERTY(BlueprintReadOnly, Category = "UI") TObjectPtr PlayerHUD; + /** In-game pause menu widget, pushed/popped through the menu manager by ToggleInGameMenu */ + UPROPERTY(EditAnywhere, Category = "UI") + TSubclassOf InGameMenuClass; + + /** Input action that opens the in-game menu, or closes the top menu screen if one is already open */ + UPROPERTY(EditAnywhere, Category = "Input|Input Mappings") + TObjectPtr MenuAction; + /** Gameplay initialization */ virtual void BeginPlay() override; @@ -61,4 +71,8 @@ protected: /** Returns true if the player should use UMG touch controls */ bool ShouldUseTouchControls() const; + /** Opens InGameMenuClass, or closes the top menu screen if one is already open */ + UFUNCTION(BlueprintCallable, Category = "UI") + void ToggleInGameMenu(); + }; diff --git a/Source/KingshearthLegacy/UI/Menu/CreditsMenuWidget.h b/Source/KingshearthLegacy/UI/Menu/CreditsMenuWidget.h new file mode 100644 index 0000000..0bcffef --- /dev/null +++ b/Source/KingshearthLegacy/UI/Menu/CreditsMenuWidget.h @@ -0,0 +1,15 @@ +#pragma once + +#include "CoreMinimal.h" +#include "UI/Menu/MenuScreenWidget.h" +#include "CreditsMenuWidget.generated.h" + +/** + * Placeholder credits screen - the inherited BackButton is all it needs today. + * The actual credits text/scroll is a Blueprint (WBP_CreditsMenu) content concern. + */ +UCLASS(abstract) +class UCreditsMenuWidget : public UMenuScreenWidget +{ + GENERATED_BODY() +}; diff --git a/Source/KingshearthLegacy/UI/Menu/InGameMenuWidget.cpp b/Source/KingshearthLegacy/UI/Menu/InGameMenuWidget.cpp new file mode 100644 index 0000000..93e58df --- /dev/null +++ b/Source/KingshearthLegacy/UI/Menu/InGameMenuWidget.cpp @@ -0,0 +1,64 @@ +#include "InGameMenuWidget.h" +#include "MenuButtonWidget.h" +#include "GameFramework/PlayerController.h" +#include "Kismet/GameplayStatics.h" +#include "Kismet/KismetSystemLibrary.h" + +void UInGameMenuWidget::NativeConstruct() +{ + Super::NativeConstruct(); + + if (ContinueButton) + { + ContinueButton->OnClicked.AddUniqueDynamic(this, &UInGameMenuWidget::Continue); + } + + if (OptionsButton) + { + OptionsButton->OnClicked.AddUniqueDynamic(this, &UInGameMenuWidget::OpenOptions); + } + + if (QuitToMenuButton) + { + QuitToMenuButton->OnClicked.AddUniqueDynamic(this, &UInGameMenuWidget::QuitToMenu); + } + + if (QuitToDesktopButton) + { + QuitToDesktopButton->OnClicked.AddUniqueDynamic(this, &UInGameMenuWidget::QuitToDesktop); + } + + UGameplayStatics::SetGamePaused(this, true); +} + +void UInGameMenuWidget::NotifyScreenClosing() +{ + UGameplayStatics::SetGamePaused(this, false); +} + +void UInGameMenuWidget::Continue() +{ + Close(); +} + +void UInGameMenuWidget::OpenOptions() +{ + OpenScreen(OptionsScreenClass); +} + +void UInGameMenuWidget::QuitToMenu() +{ + if (!MainMenuLevel.IsNull()) + { + UGameplayStatics::SetGamePaused(this, false); + UGameplayStatics::OpenLevelBySoftObjectPtr(this, MainMenuLevel); + } +} + +void UInGameMenuWidget::QuitToDesktop() +{ + if (APlayerController* PC = GetOwningPlayer()) + { + UKismetSystemLibrary::QuitGame(this, PC, EQuitPreference::Quit, false); + } +} diff --git a/Source/KingshearthLegacy/UI/Menu/InGameMenuWidget.h b/Source/KingshearthLegacy/UI/Menu/InGameMenuWidget.h new file mode 100644 index 0000000..77f7e2d --- /dev/null +++ b/Source/KingshearthLegacy/UI/Menu/InGameMenuWidget.h @@ -0,0 +1,57 @@ +#pragma once + +#include "CoreMinimal.h" +#include "UI/Menu/MenuScreenWidget.h" +#include "InGameMenuWidget.generated.h" + +class UMenuButtonWidget; +class UWorld; + +/** + * Pause screen opened from gameplay (see AKingshearthLegacyPlayerController::ToggleInGameMenu). + * Pauses the game while open; NotifyScreenClosing unpauses however the screen ends up closed + * (Continue, an options sub-screen going back to it, or the toggle input closing it directly). + */ +UCLASS(abstract) +class UInGameMenuWidget : public UMenuScreenWidget +{ + GENERATED_BODY() + +public: + /** Screen pushed by the Options button. */ + UPROPERTY(EditDefaultsOnly, Category = "Menu|Screens") + TSubclassOf OptionsScreenClass; + + /** Level opened by Quit to Menu. */ + UPROPERTY(EditDefaultsOnly, Category = "Menu|Quit") + TSoftObjectPtr MainMenuLevel; + + virtual void NotifyScreenClosing() override; + +protected: + virtual void NativeConstruct() override; + + UFUNCTION(BlueprintCallable, Category = "Menu") + void Continue(); + + UFUNCTION(BlueprintCallable, Category = "Menu") + void OpenOptions(); + + UFUNCTION(BlueprintCallable, Category = "Menu") + void QuitToMenu(); + + UFUNCTION(BlueprintCallable, Category = "Menu") + void QuitToDesktop(); + + UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional = true)) + TObjectPtr ContinueButton; + + UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional = true)) + TObjectPtr OptionsButton; + + UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional = true)) + TObjectPtr QuitToMenuButton; + + UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional = true)) + TObjectPtr QuitToDesktopButton; +}; diff --git a/Source/KingshearthLegacy/UI/Menu/MainMenuWidget.cpp b/Source/KingshearthLegacy/UI/Menu/MainMenuWidget.cpp new file mode 100644 index 0000000..7f1522e --- /dev/null +++ b/Source/KingshearthLegacy/UI/Menu/MainMenuWidget.cpp @@ -0,0 +1,68 @@ +#include "MainMenuWidget.h" +#include "MenuButtonWidget.h" +#include "GameFramework/PlayerController.h" +#include "Kismet/GameplayStatics.h" +#include "Kismet/KismetSystemLibrary.h" + +void UMainMenuWidget::NativeConstruct() +{ + Super::NativeConstruct(); + + if (StartNewGameButton) + { + StartNewGameButton->OnClicked.AddUniqueDynamic(this, &UMainMenuWidget::StartNewGame); + } + + if (LoadGameButton) + { + LoadGameButton->OnClicked.AddUniqueDynamic(this, &UMainMenuWidget::LoadGame); + LoadGameButton->SetIsEnabled(bLoadGameAvailable); + } + + if (OptionsButton) + { + OptionsButton->OnClicked.AddUniqueDynamic(this, &UMainMenuWidget::OpenOptions); + } + + if (CreditsButton) + { + CreditsButton->OnClicked.AddUniqueDynamic(this, &UMainMenuWidget::OpenCredits); + } + + if (ExitButton) + { + ExitButton->OnClicked.AddUniqueDynamic(this, &UMainMenuWidget::ExitGame); + } +} + +void UMainMenuWidget::StartNewGame() +{ + if (!NewGameLevel.IsNull()) + { + UGameplayStatics::OpenLevelBySoftObjectPtr(this, NewGameLevel); + } +} + +void UMainMenuWidget::LoadGame() +{ + // No save system yet - intentionally left unimplemented. The button is disabled by + // default via bLoadGameAvailable until one exists. +} + +void UMainMenuWidget::OpenOptions() +{ + OpenScreen(OptionsScreenClass); +} + +void UMainMenuWidget::OpenCredits() +{ + OpenScreen(CreditsScreenClass); +} + +void UMainMenuWidget::ExitGame() +{ + if (APlayerController* PC = GetOwningPlayer()) + { + UKismetSystemLibrary::QuitGame(this, PC, EQuitPreference::Quit, false); + } +} diff --git a/Source/KingshearthLegacy/UI/Menu/MainMenuWidget.h b/Source/KingshearthLegacy/UI/Menu/MainMenuWidget.h new file mode 100644 index 0000000..99476c2 --- /dev/null +++ b/Source/KingshearthLegacy/UI/Menu/MainMenuWidget.h @@ -0,0 +1,69 @@ +#pragma once + +#include "CoreMinimal.h" +#include "UI/Menu/MenuScreenWidget.h" +#include "MainMenuWidget.generated.h" + +class UMenuButtonWidget; +class UWorld; + +/** + * Top-level main menu screen. Add a new entry the same way as the existing ones: a + * BindWidgetOptional UMenuButtonWidget pointer + an OnClicked binding in NativeConstruct. + */ +UCLASS(abstract) +class UMainMenuWidget : public UMenuScreenWidget +{ + GENERATED_BODY() + +public: + /** Level opened by Start New Game. */ + UPROPERTY(EditDefaultsOnly, Category = "Menu|New Game") + TSoftObjectPtr NewGameLevel; + + /** Screen pushed by the Options button. */ + UPROPERTY(EditDefaultsOnly, Category = "Menu|Screens") + TSubclassOf OptionsScreenClass; + + /** Screen pushed by the Credits button. */ + UPROPERTY(EditDefaultsOnly, Category = "Menu|Screens") + TSubclassOf CreditsScreenClass; + + /** No save system exists yet - keeps the Load Game button present but disabled until one does. */ + UPROPERTY(EditDefaultsOnly, Category = "Menu|New Game") + bool bLoadGameAvailable = false; + +protected: + virtual void NativeConstruct() override; + + UFUNCTION(BlueprintCallable, Category = "Menu") + void StartNewGame(); + + /** Intentionally unimplemented - no save system exists yet. */ + UFUNCTION(BlueprintCallable, Category = "Menu") + void LoadGame(); + + UFUNCTION(BlueprintCallable, Category = "Menu") + void OpenOptions(); + + UFUNCTION(BlueprintCallable, Category = "Menu") + void OpenCredits(); + + UFUNCTION(BlueprintCallable, Category = "Menu") + void ExitGame(); + + UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional = true)) + TObjectPtr StartNewGameButton; + + UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional = true)) + TObjectPtr LoadGameButton; + + UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional = true)) + TObjectPtr OptionsButton; + + UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional = true)) + TObjectPtr CreditsButton; + + UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional = true)) + TObjectPtr ExitButton; +}; diff --git a/Source/KingshearthLegacy/UI/Menu/MenuButtonWidget.cpp b/Source/KingshearthLegacy/UI/Menu/MenuButtonWidget.cpp new file mode 100644 index 0000000..9eb4d92 --- /dev/null +++ b/Source/KingshearthLegacy/UI/Menu/MenuButtonWidget.cpp @@ -0,0 +1,68 @@ +#include "MenuButtonWidget.h" +#include "Components/Button.h" +#include "Components/Border.h" +#include "Components/TextBlock.h" + +void UMenuButtonWidget::NativePreConstruct() +{ + Super::NativePreConstruct(); + RefreshStyle(); +} + +void UMenuButtonWidget::NativeConstruct() +{ + Super::NativeConstruct(); + + if (DefaultButton) + { + DefaultButton->OnClicked.AddUniqueDynamic(this, &UMenuButtonWidget::HandleClicked); + DefaultButton->OnHovered.AddUniqueDynamic(this, &UMenuButtonWidget::HandleHovered); + DefaultButton->OnUnhovered.AddUniqueDynamic(this, &UMenuButtonWidget::HandleUnhovered); + } + + if (Highlight) + { + Highlight->SetVisibility(ESlateVisibility::Collapsed); + } + + RefreshStyle(); +} + +void UMenuButtonWidget::RefreshStyle() +{ + if (ButtonText) + { + ButtonText->SetText(Label); + } + + if (ButtonBackground) + { + ButtonBackground->SetBrushColor(BackgroundColor); + } + + if (Highlight) + { + Highlight->SetBrushColor(HighlightColor); + } +} + +void UMenuButtonWidget::HandleClicked() +{ + OnClicked.Broadcast(); +} + +void UMenuButtonWidget::HandleHovered() +{ + if (Highlight) + { + Highlight->SetVisibility(ESlateVisibility::HitTestInvisible); + } +} + +void UMenuButtonWidget::HandleUnhovered() +{ + if (Highlight) + { + Highlight->SetVisibility(ESlateVisibility::Collapsed); + } +} diff --git a/Source/KingshearthLegacy/UI/Menu/MenuButtonWidget.h b/Source/KingshearthLegacy/UI/Menu/MenuButtonWidget.h new file mode 100644 index 0000000..1644bfc --- /dev/null +++ b/Source/KingshearthLegacy/UI/Menu/MenuButtonWidget.h @@ -0,0 +1,70 @@ +#pragma once + +#include "CoreMinimal.h" +#include "Blueprint/UserWidget.h" +#include "MenuButtonWidget.generated.h" + +class UButton; +class UBorder; +class UTextBlock; + +DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnMenuButtonClicked); + +/** + * Styled menu button (WBP_Button): DefaultButton wraps ButtonBackground/ButtonText/Highlight. + * Bind to OnClicked instead of reaching into DefaultButton - callers shouldn't need to know + * this is built out of a Button + two Borders + a TextBlock. Label/BackgroundColor/HighlightColor + * are instance-editable, so a widget that places a WBP_Button just configures it in its Details + * panel (no per-instance Blueprint graph needed). + */ +UCLASS(abstract) +class UMenuButtonWidget : public UUserWidget +{ + GENERATED_BODY() + +public: + /** Fired when the button is clicked. */ + UPROPERTY(BlueprintAssignable, Category = "Button") + FOnMenuButtonClicked OnClicked; + + /** Text shown on the button. */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Button") + FText Label; + + /** ButtonBackground tint while idle. */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Button|Style") + FLinearColor BackgroundColor = FLinearColor(0.03f, 0.03f, 0.03f, 0.75f); + + /** Highlight tint shown while hovered/focused. */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Button|Style") + FLinearColor HighlightColor = FLinearColor(1.0f, 0.85f, 0.3f, 1.0f); + + /** Pushes Label/BackgroundColor/HighlightColor onto the bound widgets. Runs in the Designer too, so edits preview live. */ + UFUNCTION(BlueprintCallable, Category = "Button") + void RefreshStyle(); + +protected: + virtual void NativePreConstruct() override; + virtual void NativeConstruct() override; + + UFUNCTION() + void HandleClicked(); + + UFUNCTION() + void HandleHovered(); + + UFUNCTION() + void HandleUnhovered(); + + UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional = true)) + TObjectPtr DefaultButton; + + UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional = true)) + TObjectPtr ButtonBackground; + + UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional = true)) + TObjectPtr ButtonText; + + UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional = true)) + TObjectPtr Highlight; +}; diff --git a/Source/KingshearthLegacy/UI/Menu/MenuManagerSubsystem.cpp b/Source/KingshearthLegacy/UI/Menu/MenuManagerSubsystem.cpp new file mode 100644 index 0000000..96a8a6e --- /dev/null +++ b/Source/KingshearthLegacy/UI/Menu/MenuManagerSubsystem.cpp @@ -0,0 +1,118 @@ +#include "MenuManagerSubsystem.h" +#include "MenuScreenWidget.h" +#include "Engine/GameInstance.h" +#include "GameFramework/PlayerController.h" +#include "UObject/UObjectGlobals.h" + +void UMenuManagerSubsystem::Initialize(FSubsystemCollectionBase& Collection) +{ + Super::Initialize(Collection); + FCoreUObjectDelegates::PreLoadMap.AddUObject(this, &UMenuManagerSubsystem::HandlePreLoadMap); +} + +void UMenuManagerSubsystem::Deinitialize() +{ + FCoreUObjectDelegates::PreLoadMap.RemoveAll(this); + Super::Deinitialize(); +} + +void UMenuManagerSubsystem::HandlePreLoadMap(const FString& MapName) +{ + ClearStack(); +} + +UMenuScreenWidget* UMenuManagerSubsystem::PushScreen(TSubclassOf ScreenClass) +{ + if (!ScreenClass) + { + return nullptr; + } + + APlayerController* OwningController = GetGameInstance() ? GetGameInstance()->GetFirstLocalPlayerController() : nullptr; + if (!OwningController) + { + return nullptr; + } + + UMenuScreenWidget* NewScreen = CreateWidget(OwningController, ScreenClass); + if (!NewScreen) + { + return nullptr; + } + + // Hide (not just cover) whatever screen was on top - it stops rendering and stops taking + // input, rather than sitting underneath the new screen doing both pointlessly. + if (UMenuScreenWidget* PreviousTop = GetActiveScreen()) + { + PreviousTop->SetVisibility(ESlateVisibility::Collapsed); + } + + NewScreen->AddToPlayerScreen(static_cast(BaseZOrder + ScreenStack.Num())); + ScreenStack.Add(NewScreen); + RefreshInputMode(); + return NewScreen; +} + +void UMenuManagerSubsystem::PopScreen() +{ + if (ScreenStack.Num() == 0) + { + return; + } + + UMenuScreenWidget* TopScreen = ScreenStack.Pop(); + if (TopScreen) + { + TopScreen->NotifyScreenClosing(); + TopScreen->RemoveFromParent(); + } + + if (UMenuScreenWidget* NewTop = GetActiveScreen()) + { + NewTop->SetVisibility(ESlateVisibility::Visible); + } + + RefreshInputMode(); +} + +void UMenuManagerSubsystem::ClearStack() +{ + for (UMenuScreenWidget* Screen : ScreenStack) + { + if (Screen) + { + Screen->NotifyScreenClosing(); + Screen->RemoveFromParent(); + } + } + ScreenStack.Reset(); + RefreshInputMode(); +} + +UMenuScreenWidget* UMenuManagerSubsystem::GetActiveScreen() const +{ + return ScreenStack.Num() > 0 ? ScreenStack.Last() : nullptr; +} + +void UMenuManagerSubsystem::RefreshInputMode() +{ + APlayerController* OwningController = GetGameInstance() ? GetGameInstance()->GetFirstLocalPlayerController() : nullptr; + if (!OwningController) + { + return; + } + + if (UMenuScreenWidget* Top = GetActiveScreen()) + { + FInputModeUIOnly InputMode; + InputMode.SetWidgetToFocus(Top->TakeWidget()); + InputMode.SetLockMouseToViewportBehavior(EMouseLockMode::DoNotLock); + OwningController->SetInputMode(InputMode); + OwningController->SetShowMouseCursor(true); + } + else + { + OwningController->SetInputMode(FInputModeGameOnly()); + OwningController->SetShowMouseCursor(false); + } +} diff --git a/Source/KingshearthLegacy/UI/Menu/MenuManagerSubsystem.h b/Source/KingshearthLegacy/UI/Menu/MenuManagerSubsystem.h new file mode 100644 index 0000000..4b549b2 --- /dev/null +++ b/Source/KingshearthLegacy/UI/Menu/MenuManagerSubsystem.h @@ -0,0 +1,59 @@ +#pragma once + +#include "CoreMinimal.h" +#include "Subsystems/GameInstanceSubsystem.h" +#include "MenuManagerSubsystem.generated.h" + +class UMenuScreenWidget; + +/** + * Owns the stack of currently open menu screens (Main Menu, In-Game Menu, Options, Credits, ...). + * Any UMenuScreenWidget subclass can be pushed without this subsystem knowing about it in + * advance - add a new menu by writing the widget and pushing its class, no changes needed here. + */ +UCLASS() +class UMenuManagerSubsystem : public UGameInstanceSubsystem +{ + GENERATED_BODY() + +public: + /** Creates ScreenClass, adds it above any currently open screens, and pushes it onto the stack. */ + UFUNCTION(BlueprintCallable, Category = "Menu") + UMenuScreenWidget* PushScreen(TSubclassOf ScreenClass); + + /** Notifies, then removes, the top screen. Restores game input once the stack is empty. */ + UFUNCTION(BlueprintCallable, Category = "Menu") + void PopScreen(); + + /** Notifies, then removes, every screen on the stack. */ + UFUNCTION(BlueprintCallable, Category = "Menu") + void ClearStack(); + + UFUNCTION(BlueprintPure, Category = "Menu") + UMenuScreenWidget* GetActiveScreen() const; + + UFUNCTION(BlueprintPure, Category = "Menu") + bool IsAnyScreenOpen() const { return ScreenStack.Num() > 0; } + + virtual void Initialize(FSubsystemCollectionBase& Collection) override; + virtual void Deinitialize() override; + +protected: + /** Applies UI-only input + shows the cursor while a screen is open, restores game input otherwise. */ + void RefreshInputMode(); + + /** + * Bound to FCoreUObjectDelegates::PreLoadMap so ANY level travel clears the stack first, + * regardless of which screen (or future screen) triggered it. Without this, a screen that + * opens a level without popping itself first leaves the game viewport stuck in the UI-only + * input mode it set (SetInputMode configures the GameInstance's GameViewportClient, which + * survives a level load, unlike the World/PlayerController) - the new level's pawn would be + * possessed but unable to receive movement input. + */ + void HandlePreLoadMap(const FString& MapName); + + UPROPERTY() + TArray> ScreenStack; + + static constexpr int32 BaseZOrder = 100; +}; diff --git a/Source/KingshearthLegacy/UI/Menu/MenuPlayerController.cpp b/Source/KingshearthLegacy/UI/Menu/MenuPlayerController.cpp new file mode 100644 index 0000000..d7f9943 --- /dev/null +++ b/Source/KingshearthLegacy/UI/Menu/MenuPlayerController.cpp @@ -0,0 +1,22 @@ +#include "MenuPlayerController.h" +#include "MainMenuWidget.h" +#include "MenuManagerSubsystem.h" +#include "Engine/GameInstance.h" + +void AMenuPlayerController::BeginPlay() +{ + Super::BeginPlay(); + + if (!IsLocalPlayerController() || !MainMenuClass) + { + return; + } + + if (UGameInstance* GI = GetGameInstance()) + { + if (UMenuManagerSubsystem* MenuManager = GI->GetSubsystem()) + { + MenuManager->PushScreen(MainMenuClass); + } + } +} diff --git a/Source/KingshearthLegacy/UI/Menu/MenuPlayerController.h b/Source/KingshearthLegacy/UI/Menu/MenuPlayerController.h new file mode 100644 index 0000000..c990b53 --- /dev/null +++ b/Source/KingshearthLegacy/UI/Menu/MenuPlayerController.h @@ -0,0 +1,24 @@ +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/PlayerController.h" +#include "MenuPlayerController.generated.h" + +class UMainMenuWidget; + +/** + * PlayerController for menu-only levels (no pawn, e.g. a dedicated main menu level). + * Pushes MainMenuClass through the menu manager on BeginPlay. + */ +UCLASS(abstract) +class AMenuPlayerController : public APlayerController +{ + GENERATED_BODY() + +public: + UPROPERTY(EditAnywhere, Category = "UI") + TSubclassOf MainMenuClass; + +protected: + virtual void BeginPlay() override; +}; diff --git a/Source/KingshearthLegacy/UI/Menu/MenuScreenWidget.cpp b/Source/KingshearthLegacy/UI/Menu/MenuScreenWidget.cpp new file mode 100644 index 0000000..57a4f46 --- /dev/null +++ b/Source/KingshearthLegacy/UI/Menu/MenuScreenWidget.cpp @@ -0,0 +1,41 @@ +#include "MenuScreenWidget.h" +#include "MenuManagerSubsystem.h" +#include "MenuButtonWidget.h" +#include "Engine/GameInstance.h" +#include "Engine/World.h" + +void UMenuScreenWidget::NativeConstruct() +{ + Super::NativeConstruct(); + + if (BackButton) + { + BackButton->OnClicked.AddUniqueDynamic(this, &UMenuScreenWidget::HandleBackClicked); + } +} + +UMenuManagerSubsystem* UMenuScreenWidget::GetMenuManager() const +{ + const UWorld* World = GetWorld(); + UGameInstance* GameInstance = World ? World->GetGameInstance() : nullptr; + return GameInstance ? GameInstance->GetSubsystem() : nullptr; +} + +void UMenuScreenWidget::Close() +{ + if (UMenuManagerSubsystem* MenuManager = GetMenuManager()) + { + MenuManager->PopScreen(); + } +} + +UMenuScreenWidget* UMenuScreenWidget::OpenScreen(TSubclassOf ScreenClass) +{ + UMenuManagerSubsystem* MenuManager = GetMenuManager(); + return MenuManager ? MenuManager->PushScreen(ScreenClass) : nullptr; +} + +void UMenuScreenWidget::HandleBackClicked() +{ + Close(); +} diff --git a/Source/KingshearthLegacy/UI/Menu/MenuScreenWidget.h b/Source/KingshearthLegacy/UI/Menu/MenuScreenWidget.h new file mode 100644 index 0000000..ed00af6 --- /dev/null +++ b/Source/KingshearthLegacy/UI/Menu/MenuScreenWidget.h @@ -0,0 +1,50 @@ +#pragma once + +#include "CoreMinimal.h" +#include "Blueprint/UserWidget.h" +#include "MenuScreenWidget.generated.h" + +class UMenuButtonWidget; +class UMenuManagerSubsystem; + +/** + * Base class for a full-screen menu (Main Menu, In-Game Menu, Options, Credits, ...). + * Subclass this for each new screen: add whatever BindWidgetOptional buttons/controls it + * needs, bind them to BlueprintCallable functions in NativeConstruct (see UMainMenuWidget), + * and push the screen via GetMenuManager()->PushScreen() or the OpenScreen() helper below. + * A BackButton is wired up automatically if the widget layout provides one. + */ +UCLASS(abstract) +class UMenuScreenWidget : public UUserWidget +{ + GENERATED_BODY() + +public: + /** Pops this screen off the menu stack. Bound automatically to BackButton if present. */ + UFUNCTION(BlueprintCallable, Category = "Menu") + void Close(); + + /** Pushes another screen on top of this one (e.g. Options, Credits). */ + UFUNCTION(BlueprintCallable, Category = "Menu") + UMenuScreenWidget* OpenScreen(TSubclassOf ScreenClass); + + /** + * Called by the menu manager right before this screen is removed from the stack, + * regardless of what triggered the pop (Close(), an input toggle, ClearStack(), ...). + * Override to clean up screen-specific state (e.g. UInGameMenuWidget unpausing). + */ + virtual void NotifyScreenClosing() {} + +protected: + virtual void NativeConstruct() override; + + UFUNCTION(BlueprintPure, Category = "Menu") + UMenuManagerSubsystem* GetMenuManager() const; + + UFUNCTION() + void HandleBackClicked(); + + /** Optional - present on any screen that just needs a simple "go back" button (Options, Credits, ...). */ + UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional = true)) + TObjectPtr BackButton; +}; diff --git a/Source/KingshearthLegacy/UI/Menu/OptionsMenuWidget.h b/Source/KingshearthLegacy/UI/Menu/OptionsMenuWidget.h new file mode 100644 index 0000000..f3ee267 --- /dev/null +++ b/Source/KingshearthLegacy/UI/Menu/OptionsMenuWidget.h @@ -0,0 +1,16 @@ +#pragma once + +#include "CoreMinimal.h" +#include "UI/Menu/MenuScreenWidget.h" +#include "OptionsMenuWidget.generated.h" + +/** + * Placeholder options screen - the inherited BackButton is all it needs today. + * Extend with real settings (volume sliders, graphics quality, key rebinding, ...) as they're + * built: add BindWidgetOptional controls and handlers here the same way UMainMenuWidget does. + */ +UCLASS(abstract) +class UOptionsMenuWidget : public UMenuScreenWidget +{ + GENERATED_BODY() +}; -- 2.54.0