Neues Menüsystem implementiert
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.
This commit is contained in:
@@ -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<UMenuManagerSubsystem>() : nullptr;
|
||||
}
|
||||
|
||||
void UMenuScreenWidget::Close()
|
||||
{
|
||||
if (UMenuManagerSubsystem* MenuManager = GetMenuManager())
|
||||
{
|
||||
MenuManager->PopScreen();
|
||||
}
|
||||
}
|
||||
|
||||
UMenuScreenWidget* UMenuScreenWidget::OpenScreen(TSubclassOf<UMenuScreenWidget> ScreenClass)
|
||||
{
|
||||
UMenuManagerSubsystem* MenuManager = GetMenuManager();
|
||||
return MenuManager ? MenuManager->PushScreen(ScreenClass) : nullptr;
|
||||
}
|
||||
|
||||
void UMenuScreenWidget::HandleBackClicked()
|
||||
{
|
||||
Close();
|
||||
}
|
||||
Reference in New Issue
Block a user