From 226ab14576b4504e2edb156b72820e9e2d47d81d Mon Sep 17 00:00:00 2001 From: William Emfinger Date: Fri, 10 Jun 2022 07:53:47 -0500 Subject: [PATCH] WIP #31 added HUD class for menu and updated WotGameplayStatics to wrap showing/hiding the main menu --- unreal/Source/VoxelRPG/Private/UI/WotHUD.cpp | 19 ++++++++++++ .../VoxelRPG/Private/WotGameplayStatics.cpp | 16 ++++++++++ unreal/Source/VoxelRPG/Public/UI/WotHUD.h | 29 +++++++++++++++++++ .../VoxelRPG/Public/WotGameplayStatics.h | 7 +++++ 4 files changed, 71 insertions(+) create mode 100644 unreal/Source/VoxelRPG/Private/UI/WotHUD.cpp create mode 100644 unreal/Source/VoxelRPG/Public/UI/WotHUD.h diff --git a/unreal/Source/VoxelRPG/Private/UI/WotHUD.cpp b/unreal/Source/VoxelRPG/Private/UI/WotHUD.cpp new file mode 100644 index 00000000..639f166b --- /dev/null +++ b/unreal/Source/VoxelRPG/Private/UI/WotHUD.cpp @@ -0,0 +1,19 @@ +#include "UI/WotHUD.h" +#include "UI/WotUserWidget.h" +#include + +void AWotHUD::ShowMainMenu() +{ + APlayerController* PC = Cast(GetOwner()); + MainMenu = CreateWidget(PC, MainMenuClass); + + MainMenu->AddToViewport(); +} + +void AWotHUD::HideMainMenu() +{ + if (MainMenu) { + MainMenu->RemoveFromViewport(); + MainMenu = nullptr; + } +} diff --git a/unreal/Source/VoxelRPG/Private/WotGameplayStatics.cpp b/unreal/Source/VoxelRPG/Private/WotGameplayStatics.cpp index 0eb876e5..bed69be5 100644 --- a/unreal/Source/VoxelRPG/Private/WotGameplayStatics.cpp +++ b/unreal/Source/VoxelRPG/Private/WotGameplayStatics.cpp @@ -1,5 +1,21 @@ #include "WotGameplayStatics.h" #include "Engine/UserInterfaceSettings.h" +#include +#include "UI/WotHUD.h" + +void UWotGameplayStatics::ShowMainMenu(const UObject* WorldContextObject, const int PlayerIndex) +{ + APlayerController* PC = UGameplayStatics::GetPlayerController(WorldContextObject, PlayerIndex); + AWotHUD* HUD = PC->GetHUD(); + HUD->ShowMainMenu(); +} + +void UWotGameplayStatics::HideMainMenu(const UObject* WorldContextObject, const int PlayerIndex) +{ + APlayerController* PC = UGameplayStatics::GetPlayerController(WorldContextObject, PlayerIndex); + AWotHUD* HUD = PC->GetHUD(); + HUD->HideMainMenu(); +} void UWotGameplayStatics::SetUIScale( float CustomUIScale ) { diff --git a/unreal/Source/VoxelRPG/Public/UI/WotHUD.h b/unreal/Source/VoxelRPG/Public/UI/WotHUD.h new file mode 100644 index 00000000..1b71233a --- /dev/null +++ b/unreal/Source/VoxelRPG/Public/UI/WotHUD.h @@ -0,0 +1,29 @@ +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/HUD.h" +#include "WotHUD.generated.h" + +class UWotUserWidget; + +UCLASS() +class VOXELRPG_API AWotHUD : public AHUD +{ + GENERATED_BODY() + +public: + + UFUNCTION(BlueprintCallable) + void ShowMainMenu(); + + UFUNCTION(BlueprintCallable) + void HideMainMenu(); + +protected: + + UPROPERTY(EditDefaultsOnly) + TSubclassOf MainMenuClass; + + UPROPERTY() + UWotUserWidget* MainMenu; +}; diff --git a/unreal/Source/VoxelRPG/Public/WotGameplayStatics.h b/unreal/Source/VoxelRPG/Public/WotGameplayStatics.h index 62a41f81..69ec80a4 100644 --- a/unreal/Source/VoxelRPG/Public/WotGameplayStatics.h +++ b/unreal/Source/VoxelRPG/Public/WotGameplayStatics.h @@ -10,6 +10,13 @@ class UWotGameplayStatics : public UBlueprintFunctionLibrary GENERATED_BODY() public: + + UFUNCTION( BlueprintCallable, Category = "User Interface" ) + static void ShowMainMenu(const UObject* WorldContextObject, const int PlayerIndex=0); + + UFUNCTION( BlueprintCallable, Category = "User Interface" ) + static void HideMainMenu(const UObject* WorldContextObject, const int PlayerIndex=0); + // Custom UI scale 1.0f == 100%, 2.0f == 200%, 0.5f == 50% etc. UFUNCTION( BlueprintCallable, Category = "User Interface" ) static void SetUIScale( float CustomUIScale );