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.
42 lines
1018 B
C++
42 lines
1018 B
C++
#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();
|
|
}
|