VocationLife/Source/VocationLife/Public/VocationMainMenuWidget.h
pixachux 3c7fa78912 Restyle the start menu as a vertical Minecraft-like title screen.
Main buttons stack under each other with Singleplayer, Multiplayer, Options, and Quit subpages.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-22 19:12:51 +02:00

90 lines
2.7 KiB
C++

// Copyright VocationLife Project. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "VocationSessionSubsystem.h"
#include "VocationMainMenuWidget.generated.h"
class UEditableTextBox;
class UComboBoxString;
class UButton;
class UTextBlock;
class UVerticalBox;
class UWidgetSwitcher;
class UBorder;
class USizeBox;
/**
* Minecraft-style start menu: vertical button stack with submenus.
*/
UCLASS()
class VOCATIONLIFE_API UVocationMainMenuWidget : public UUserWidget
{
GENERATED_BODY()
public:
virtual void NativeConstruct() override;
virtual void NativeDestruct() override;
protected:
enum class EMenuPage : uint8
{
Main = 0,
Singleplayer = 1,
Multiplayer = 2,
Options = 3
};
void BuildUI();
void RefreshMaps();
void SetStatus(const FString& Message);
void ShowPage(EMenuPage Page);
UButton* MakeMenuButton(const FName& Name, const FString& Label, void (UVocationMainMenuWidget::*Callback)());
UTextBlock* MakeLabel(const FName& Name, const FString& Text, float Size = 18.f) const;
void StyleMenuButton(UButton* Button) const;
void LeaveStartMenu();
UFUNCTION() void OnSingleplayerClicked();
UFUNCTION() void OnMultiplayerClicked();
UFUNCTION() void OnOptionsClicked();
UFUNCTION() void OnQuitClicked();
UFUNCTION() void OnBackClicked();
UFUNCTION() void OnPlaySoloClicked();
UFUNCTION() void OnHostClicked();
UFUNCTION() void OnFindSteamClicked();
UFUNCTION() void OnFindLanClicked();
UFUNCTION() void OnJoinSelectedClicked();
UFUNCTION() void OnConnectIpClicked();
UFUNCTION() void OnGraphicsLow();
UFUNCTION() void OnGraphicsMedium();
UFUNCTION() void OnGraphicsHigh();
UFUNCTION() void OnGraphicsUltra();
UFUNCTION() void OnGraphicsRayTracing();
UFUNCTION() void OnSessionSearchDetailed(const TArray<FVocationSessionSearchEntry>& Sessions);
UFUNCTION() void OnSessionJoined(bool bSuccess);
UPROPERTY() TObjectPtr<UWidgetSwitcher> PageSwitcher;
UPROPERTY() TObjectPtr<UTextBlock> TitleText;
UPROPERTY() TObjectPtr<UTextBlock> SplashText;
UPROPERTY() TObjectPtr<UTextBlock> StatusText;
UPROPERTY() TObjectPtr<UTextBlock> VersionText;
UPROPERTY() TObjectPtr<UComboBoxString> MapCombo;
UPROPERTY() TObjectPtr<UComboBoxString> MpMapCombo;
UPROPERTY() TObjectPtr<UComboBoxString> BackendCombo;
UPROPERTY() TObjectPtr<UComboBoxString> SessionCombo;
UPROPERTY() TObjectPtr<UEditableTextBox> ServerNameBox;
UPROPERTY() TObjectPtr<UEditableTextBox> PortBox;
UPROPERTY() TObjectPtr<UEditableTextBox> IpBox;
UPROPERTY() TObjectPtr<UEditableTextBox> JoinPortBox;
UPROPERTY() TObjectPtr<UEditableTextBox> MaxPlayersBox;
TArray<FVocationMapOption> CachedMaps;
TArray<FVocationSessionSearchEntry> CachedSessions;
};