32. Overlay Widget Controller

This commit is contained in:
2024-04-21 18:56:57 -04:00
parent adfb17b7df
commit 811dc33f4a
40 changed files with 326 additions and 157 deletions

View File

@ -1,11 +1,21 @@
#include "GasaHUD.h"
#include "GasaHUD_Inlines.h"
#include "GasaDevOptions.h"
#include "UI_HostWidget.h"
#include "HUDHostWidget.h"
#include "Blueprint/UserWidget.h"
using namespace Gasa;
void AGasaHUD::InitOverlay(FWidgetControllerData const* WidgetControllerData)
{
HostWidget = CreateWidget<UHUDHostWidget>( GetWorld()
, GetDevOptions()->Template_HUD_HostUI.LoadSynchronous() );
HostWidgetController = NewObject<UHostWidgetController>(this, GetDevOptions()->Template_HostWidgetController.Get());
HostWidget->SetWidgetController(HostWidgetController);
HostWidget->AddToViewport();
}
#pragma region HUD
void AGasaHUD::ShowHUD()
@ -15,17 +25,8 @@ void AGasaHUD::ShowHUD()
#pragma endregion HUD
#pragma region Actor
UE_DISABLE_OPTIMIZATION
void AGasaHUD::BeginPlay()
{
Super::BeginPlay();
HostWidget = CreateWidget<UUI_HostWidget>( GetWorld()
, GetDevOptions()->Template_HUD_HostUI.LoadSynchronous() );
HostWidget->AddToViewport();
bool bHostVis = HostWidget->IsVisible();
Log(FString::Printf(TEXT("HostVIs: %s"), *FString::FromInt(bHostVis)));
}
UE_ENABLE_OPTIMIZATION
#pragma endregion Actor

View File

@ -12,14 +12,20 @@ class GASA_API AGasaHUD : public AHUD
GENERATED_BODY()
public:
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
TObjectPtr<UUI_HostWidget> HostWidget;
TObjectPtr<UHUDHostWidget> HostWidget;
// This should only be accessed AFTER InitOverlay is called. Otherwise, it will be null
// See references to InitOverlay or docs for lifetime.
UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
TObjectPtr<UHostWidgetController> HostWidgetController;
void InitOverlay(FWidgetControllerData const* WidgetControllerData);
#pragma region HUD
void ShowHUD() override;
#pragma endregion HUD
#pragma region Actor
void BeginPlay() override;
#pragma endregion Actor
};

View File

@ -0,0 +1,5 @@
#pragma once
#include "GasaHUD.h"
#include "GasaDevOptions.h"
#include "HostWidgetController.h"
#include "HUDHostWidget.h"

View File

@ -1,8 +1,10 @@
#pragma once
#include "Blueprint/UserWidget.h"
#include "GasaCommon.h"
#include "GasaUserWidget.generated.h"
UCLASS(Blueprintable)
class GASA_API UGasaUserWidget : public UUserWidget
{
@ -23,12 +25,15 @@ public:
TSubclassOf<UGasaUserWidget> LooseParent;
UPROPERTY(BlueprintReadOnly)
TObjectPtr<UObject> WidgetController;
TObjectPtr<UWidgetController> WidgetController;
UGasaUserWidget(FObjectInitializer const& ObjectInitializer);
template<typename WidgetControllerType>
FORCEINLINE WidgetControllerType* GetWidgetController() { return Cast<WidgetControllerType>(WidgetController); }
UFUNCTION(BlueprintCallable)
void SetWidgetController(UObject* Controller)
void SetWidgetController(UWidgetController* Controller)
{
WidgetController = Controller;
OnWidgetControllerSet();

View File

@ -0,0 +1 @@
#include "HUDHostWidget.h"

View File

@ -2,10 +2,10 @@
#include "GasaUserWidget.h"
#include "UI_HostWidget.generated.h"
#include "HUDHostWidget.generated.h"
UCLASS()
class GASA_API UUI_HostWidget : public UGasaUserWidget
class GASA_API UHUDHostWidget : public UGasaUserWidget
{
GENERATED_BODY()
public:

View File

@ -0,0 +1 @@
#include "HostWidgetController.h"

View File

@ -0,0 +1,12 @@
#pragma once
#include "WidgetController.h"
#include "HostWidgetController.generated.h"
UCLASS()
class GASA_API UHostWidgetController : public UWidgetController
{
GENERATED_BODY()
public:
};

View File

@ -1 +0,0 @@
#include "UI_HostWidget.h"

View File

@ -3,17 +3,37 @@
#include "GasaCommon.h"
#include "WidgetController.generated.h"
UCLASS(BlueprintType)
class GASA_API UWidgetController : public UObject
USTRUCT(BlueprintType)
struct GASA_API FWidgetControllerData
{
GENERATED_BODY()
public:
FWidgetControllerData() = default;
FWidgetControllerData(AGasaPlayerController* Controller
, AGasaPlayerState* PlayerState
, UAbilitySystemComponent* AbilitySystem
, UAttributeSet* Attributes )
#if 1
: Controller(Controller)
, PlayerState(PlayerState)
, AbilitySystem(AbilitySystem)
, Attributes(Attributes)
#endif
{
#if 0
this->Controller = Controller;
this->PlayerState = PlayerState;
this->AbilitySystem = AbilitySystem;
this->Attributes = Attributes;
#endif
}
UPROPERTY(BlueprintReadOnly, Category="Player")
TObjectPtr<AGasaPlayerController> Controller;
UPROPERTY(BlueprintReadOnly, Category="Player")
TObjectPtr<APlayerController> Controller;
UPROPERTY(BlueprintReadOnly, Category="Player")
TObjectPtr<APlayerState> PlayerState;
TObjectPtr<AGasaPlayerState> PlayerState;
UPROPERTY(BlueprintReadOnly, Category="Player")
TObjectPtr<UAbilitySystemComponent> AbilitySystem;
@ -21,3 +41,13 @@ public:
UPROPERTY(BlueprintReadOnly, Category="Player")
TObjectPtr<UAttributeSet> Attributes;
};
UCLASS(Blueprintable)
class GASA_API UWidgetController : public UObject
{
GENERATED_BODY()
public:
UPROPERTY(BlueprintReadOnly, Category="Player")
FWidgetControllerData Data;
};