Main buttons stack under each other with Singleplayer, Multiplayer, Options, and Quit subpages. Co-authored-by: Cursor <cursoragent@cursor.com>
90 lines
2.7 KiB
C++
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;
|
|
};
|