haxis/Source/UnrealProject/GUI/Menu/MenuScreen.h

135 lines
3.5 KiB
C++

// Project Lab - NHTV Igad
#pragma once
#include "GUI/Menu/MenuScreenBase.h"
#include "SubMenu.h"
#include "MenuScreen.generated.h"
UCLASS()
class UMenuScreenSubMenu : public USubMenu
{
GENERATED_BODY()
public:
UMenuScreenSubMenu(const FObjectInitializer& init);
virtual void NativeConstruct() override;
virtual void NativeTick(const FGeometry& MyGeometry, float InDeltaTime) override;
virtual void OnSuspend(USubMenu* newSubMenu, bool loseFocus);
virtual void OnRestore(USubMenu* removedMenu);
void FadeIn();
void FadeOut();
UFUNCTION(BlueprintCallable, Category = "Menu Screen")
UMenuPanel* OpenScreenMenu(TSubclassOf<class UMenuPanel> cls);
UFUNCTION(BlueprintCallable, Category = "Menu Screen")
USideView* OpenSideView(TSubclassOf<class USideView> cls);
class UMenuButton* AddButton(FString label);
virtual void RescanItems() override;
virtual void NativeOnMenuAction(EMenuActionBinding binding) override;
// Assigns a button to be the back button, this button will receive a pressed event when the player presses the circle button
void SetBackButton(UMenuButton* button) { m_backButton = button; }
DECLARE_MULTICAST_DELEGATE_TwoParams(FOnAnimationEnded, UMenuScreenSubMenu*, int32)
FOnAnimationEnded onAnimationEnded;
UPROPERTY(EditDefaultsOnly, Category = "SubMenu")
FString menuName;
private:
UPROPERTY()
UMenuButton* m_backButton;
int32 m_animationType;
float m_animationTime;
bool m_isBeingClosed;
friend class UMenuScreen;
};
UCLASS()
class USideView : public UMenuScreenSubMenu
{
GENERATED_BODY()
public:
virtual ~USideView() = default;
};
UCLASS()
class UPersistentSideView : public USideView
{
GENERATED_BODY()
public:
virtual ~UPersistentSideView() = default;
};
UCLASS()
class UMenuPanel : public UMenuScreenSubMenu
{
GENERATED_BODY()
public:
};
/**
*
*/
UCLASS()
class UNREALPROJECT_API UMenuScreen : public UMenuScreenBase
{
GENERATED_BODY()
public:
void NativeConstruct() override;
UFUNCTION(BlueprintCallable, Category = "Menu Screen")
UMenuPanel* OpenScreenMenu(TSubclassOf<class UMenuPanel> cls);
UFUNCTION(BlueprintCallable, Category = "Menu Screen")
USideView* OpenSideView(TSubclassOf<class USideView> cls);
UFUNCTION(BlueprintCallable, Category = "Menu Screen")
void CloseAllSideViews();
UFUNCTION(BlueprintImplementableEvent, Category="Menu Screen")
void SwitchSideViewVisible(bool visible);
UFUNCTION(BlueprintCallable, Category = "Menu Screen")
void OpenPersistentSideView(UPersistentSideView* sideView);
UFUNCTION(BlueprintCallable, Category = "Menu Screen")
void ClosePersistentSideView(UPersistentSideView* sideView);
// When this menu needs to be hidden
UFUNCTION(BlueprintImplementableEvent)
void OnShow();
// When this menu needs to be shown
UFUNCTION(BlueprintImplementableEvent)
void OnHide();
virtual void OpenSubMenu(class USubMenu* submenu) override;
virtual void CloseSubMenu(class USubMenu* submenu) override;
private:
void m_OpenSubMenu(class USubMenu* submenu, bool transferFocus = true);
void m_CloseSubMenu(class USubMenu* submenu, bool persist = false);
void m_OnFadeOutComplete(UMenuScreenSubMenu* panel, int32 type);
bool m_sideViewActive;
UButtonHintBar* m_buttonHintBar;
UOverlay* m_menuContainer;
UOverlay* m_sideViewContainer;
UTextBlock* m_menuTitle;
UTextBlock* m_sideViewTitle;
UPROPERTY()
TArray<USideView*> m_currentSideViews;
friend class UMenuScreenSubMenu;
};
UCLASS()
class UMainMenuScreen : public UMenuScreen
{
GENERATED_BODY()
public:
};