Space Plunder
Loading...
Searching...
No Matches
AHUDBase Class Reference

#include <HUDBase.h>

Inheritance diagram for AHUDBase:
IHUDInterface ACustomHUD AQuestHUD

Public Member Functions

 AHUDBase ()
 
virtual bool RegisterLayer (const FGameplayTag &LayerName, UUserWidget *LayerWidget) override
 
virtual UUserWidget * PushContentToLayer (const FGameplayTag &LayerName, const TSoftClassPtr< UUserWidget > &WidgetClass) override
 
virtual UUserWidget * GetContentFromLayer (const FGameplayTag &LayerName, const TSoftClassPtr< UUserWidget > &WidgetClass) override
 
virtual bool PopContentFromLayer (const FGameplayTag &LayerName) override
 
virtual bool ClearLayer (const FGameplayTag &LayerName) override
 
virtual bool ToggleWidget (const FGameplayTag &LayerName, UUserWidget *Widget) override
 
virtual UUserWidget * AddWidgetToLayer (const FGameplayTag &LayerName, const TSoftClassPtr< UUserWidget > &WidgetClass) override
 
virtual UUserWidget * AddWidgetToLayerWithSlot (const FGameplayTag &LayerName, const FGameplayTag &SlotTag, const TSoftClassPtr< UUserWidget > &WidgetClass) override
 
virtual void HUDSelectionVertical (const bool bMoveUp=true) override
 
virtual void HUDSelectionHorizontal (const bool bMoveRight=true) override
 
virtual void HUDConfirm () override
 
virtual void HUDCancel () override
 
virtual bool RegisterNotificationManager (const FGameplayTag Type, UUserWidget *ManagerWidget) override
 
virtual bool AddNotificationToQueue (const FGameplayTag Type, const FNotificationData &Data) override
 
virtual void OpenRadialMenu (const FRadialMenuData &Data) override
 
virtual int32 CloseRadialMenu () override
 
virtual bool GetIsRadialMenuOpen () const override
 
virtual void ToggleGameLog () override
 

Public Attributes

UUserWidget * RadialMenuWidget = nullptr
 

Protected Member Functions

virtual void BeginPlay () override
 
void OnOpenRadialMenu (const FRadialMenuData &Data)
 
void OnCloseRadialMenu ()
 

Protected Attributes

class UPrimaryLayoutWidgetPrimaryLayoutWidget = nullptr
 
TMap< FGameplayTag, TSoftClassPtr< UUserWidget > > InitialScreens
 
TMap< FGameplayTag, TSoftClassPtr< UUserWidget > > InitialNotificationManagers
 
bool bDebuggingMode = false
 

Private Member Functions

virtual bool CreateLayoutWidget ()
 
void PushInitialScreens ()
 
void PushInitialNotificationManagers ()
 
bool CreateRadialMenu ()
 

Private Attributes

TMap< FGameplayTag, IWidgetLayout * > LayersMap
 
TMap< FGameplayTag, INotificationManagerInterface * > NotificationManagersMap
 
TSubclassOf< UUserWidget > RadialMenuClass = nullptr
 
TSubclassOf< UUserWidget > PrimaryLayoutClass = nullptr
 
FTimerHandle NotificationTimerHandle
 
FTimerHandle InitialNotificationTimerHandle
 

Constructor & Destructor Documentation

◆ AHUDBase()

AHUDBase::AHUDBase ( )
15{
16 if(PrimaryLayoutClass == nullptr)
17 {
18 PrimaryLayoutClass = UBaseHelpersBPLib::GetDefaultWidgetBPClass("/BaseHelpers/Widgets/WBP_PrimaryLayout");
19 }
20 RadialMenuClass = UBaseHelpersBPLib::GetDefaultWidgetBPClass("/BaseHelpers/Widgets/WBP_WheelMenu");
21}
TSubclassOf< UUserWidget > PrimaryLayoutClass
Definition HUDBase.h:95
TSubclassOf< UUserWidget > RadialMenuClass
Definition HUDBase.h:93
static TSubclassOf< UUserWidget > GetDefaultWidgetBPClass(const FString &Location)
Definition BaseHelpersBPLib.cpp:227

Member Function Documentation

◆ AddNotificationToQueue()

bool AHUDBase::AddNotificationToQueue ( const FGameplayTag Type,
const FNotificationData & Data )
overridevirtual

Implements IHUDInterface.

199{
200 if(bDebuggingMode){UE_LOG(LogHUDBase, Warning, TEXT("HUD: Add Notification: %s to %s"), *Data.Title, *Type.GetTagName().ToString());}
201 INotificationManagerInterface** NotificationWidgetPtr = NotificationManagersMap.Find(Type);
202 if(NotificationWidgetPtr == nullptr){UE_LOG(LogHUDBase, Error, TEXT("NotificationWidgetPtr Null: Add Notification: %s to %s"), *Data.Title, *Type.GetTagName().ToString());return false;}
203 INotificationManagerInterface* NotificationWidget = *NotificationWidgetPtr;
204 if(NotificationWidget == nullptr){UE_LOG(LogHUDBase, Error, TEXT("NotificationWidget Null: Add Notification: %s to %s"), *Data.Title, *Type.GetTagName().ToString());return false;;}
205 NotificationWidget->AddNotificationToQueue(Data);
206 return true;
207}
bool bDebuggingMode
Definition HUDBase.h:80
TMap< FGameplayTag, INotificationManagerInterface * > NotificationManagersMap
Definition HUDBase.h:90
Definition NotificationManagerInterface.h:23
virtual void AddNotificationToQueue(const FNotificationData &Data)=0
FString Title
Definition RadialWheelData.h:27

◆ AddWidgetToLayer()

UUserWidget * AHUDBase::AddWidgetToLayer ( const FGameplayTag & LayerName,
const TSoftClassPtr< UUserWidget > & WidgetClass )
overridevirtual

Implements IHUDInterface.

138{
139 if (bDebuggingMode)
140 {
141 UE_LOG(LogHUDBase, Log, TEXT("AddWidgetToLayer: %s"), *LayerName.GetTagName().ToString());
142 }
143 IWidgetLayout** LayerWidgetPtr = LayersMap.Find(LayerName);
144 if(LayerWidgetPtr == nullptr){UE_LOG(LogHUDBase, Error, TEXT("LayersMap doesn't contain: %s"), *LayerName.GetTagName().ToString());return nullptr;}
145 IWidgetLayout* LayerWidget = *LayerWidgetPtr;
146 if(LayerWidget == nullptr){return nullptr;}
147 return LayerWidget->AddWidgetToLayer(WidgetClass);
148}
TMap< FGameplayTag, IWidgetLayout * > LayersMap
Definition HUDBase.h:89
Definition WidgetLayout.h:21
virtual UUserWidget * AddWidgetToLayer(const TSoftClassPtr< UUserWidget > &WidgetClass)=0

◆ AddWidgetToLayerWithSlot()

UUserWidget * AHUDBase::AddWidgetToLayerWithSlot ( const FGameplayTag & LayerName,
const FGameplayTag & SlotTag,
const TSoftClassPtr< UUserWidget > & WidgetClass )
overridevirtual

Implements IHUDInterface.

152{
153 if (bDebuggingMode)
154 {
155 UE_LOG(LogHUDBase, Log, TEXT("AddWidgetToLayerWithSlot: %s"), *LayerName.GetTagName().ToString());
156 }
157 IWidgetLayout** LayerWidgetPtr = LayersMap.Find(LayerName);
158 if(LayerWidgetPtr == nullptr){UE_LOG(LogHUDBase, Error, TEXT("LayersMap doesn't contain: %s"), *LayerName.GetTagName().ToString());return nullptr;}
159 IWidgetLayout* LayerWidget = *LayerWidgetPtr;
160 if(LayerWidget == nullptr){return nullptr;}
161 return LayerWidget->AddWidgetToLayerWithSlot(SlotTag, WidgetClass);
162}
virtual UUserWidget * AddWidgetToLayerWithSlot(const FGameplayTag &SlotTag, const TSoftClassPtr< UUserWidget > &WidgetClass)=0

◆ BeginPlay()

void AHUDBase::BeginPlay ( )
overrideprotectedvirtual
24{
25 Super::BeginPlay();
26 const bool bSuccess = CreateLayoutWidget();
27 if(bSuccess == false){UE_LOG(LogHUDBase, Error, TEXT(" AHUDBase::BeginPlay FAILED"));return;}
30}
void PushInitialNotificationManagers()
Definition HUDBase.cpp:164
virtual bool CreateLayoutWidget()
Definition HUDBase.cpp:32
void PushInitialScreens()
Definition HUDBase.cpp:44

◆ ClearLayer()

bool AHUDBase::ClearLayer ( const FGameplayTag & LayerName)
overridevirtual

Implements IHUDInterface.

111{
112 if (bDebuggingMode)
113 {
114 UE_LOG(LogHUDBase, Log, TEXT("PushContentToLayer: %s"), *LayerName.GetTagName().ToString());
115 }
116 IWidgetLayout** LayerWidgetPtr = LayersMap.Find(LayerName);
117 if(LayerWidgetPtr == nullptr){return false;}
118 IWidgetLayout* LayerWidget = *LayerWidgetPtr;
119 if(LayerWidget == nullptr){return false;}
120 LayerWidget->ClearStack();
121 return true;
122}
virtual void ClearStack()=0

◆ CloseRadialMenu()

int32 AHUDBase::CloseRadialMenu ( )
overridevirtual
Returns
the selected Menu Item

Implements IHUDInterface.

238{
239 int32 Index = -1;
240 if(RadialMenuWidget == nullptr){return Index;}
241 IRadialMenu* RadialMenu = Cast<IRadialMenu>(RadialMenuWidget);
242 if(RadialMenu != nullptr)
243 {
244 //- Set Mouse back to center so it's not already highlighted next time //
245 RadialMenu->CenterMousePosition();
246 }
247 RadialMenu->GetCurrentIndex(Index);
248 RadialMenuWidget->SetVisibility(ESlateVisibility::Collapsed);
249 const FInputModeGameOnly GameOnly;
250 GetOwningPlayerController()->SetInputMode(GameOnly);
252 return Index;
253}
void OnCloseRadialMenu()
UUserWidget * RadialMenuWidget
Definition HUDBase.h:59
Definition RadialMenu.h:21
virtual void CenterMousePosition()=0
virtual bool GetCurrentIndex(int32 &Value) const =0

◆ CreateLayoutWidget()

bool AHUDBase::CreateLayoutWidget ( )
privatevirtual
33{
34 if(PrimaryLayoutClass == nullptr){UE_LOG(LogHUDBase, Error, TEXT("PrimaryLayoutClass in AHUDBASE"));return false;}
35 PrimaryLayoutWidget = CreateWidget<UPrimaryLayoutWidget>(GetOwningPlayerController(), PrimaryLayoutClass);
36 if(PrimaryLayoutWidget == nullptr){UE_LOG(LogHUDBase, Error, TEXT("Primary Layout Failed in AHUDBASE"));return false;}
37 PrimaryLayoutWidget->AddToViewport();
38 const bool bRegistered = PrimaryLayoutWidget->RegisterLayers();
39 if(bRegistered == false){UE_LOG(LogHUDBase, Error, TEXT("bRegistered Failed in CreateLayoutWidget::AHUDBASE"));return false;}
40 UE_LOG(LogHUDBase, Log, TEXT("bRegistered Passed in CreateLayoutWidget::AHUDBASE"));
41 return true;
42}
class UPrimaryLayoutWidget * PrimaryLayoutWidget
Definition HUDBase.h:71
bool RegisterLayers()
Definition PrimaryLayoutWidget.cpp:33

◆ CreateRadialMenu()

bool AHUDBase::CreateRadialMenu ( )
private
267{
268 if(RadialMenuClass == nullptr){return false;}
269 RadialMenuWidget = CreateWidget(GetOwningPlayerController(), RadialMenuClass);
270 if(RadialMenuWidget == nullptr){return false;}
271 return true;
272}

◆ GetContentFromLayer()

UUserWidget * AHUDBase::GetContentFromLayer ( const FGameplayTag & LayerName,
const TSoftClassPtr< UUserWidget > & WidgetClass )
overridevirtual

Implements IHUDInterface.

84{
86 {
87 UE_LOG(LogHUDBase, Log, TEXT("Get Content From Layer: %s"), *LayerName.GetTagName().ToString());
88 }
89 IWidgetLayout** LayerWidgetPtr = LayersMap.Find(LayerName);
90 if(LayerWidgetPtr == nullptr){UE_LOG(LogHUDBase, Error, TEXT("LayersMap doesn't contain: %s"), *LayerName.GetTagName().ToString());return nullptr;}
91 IWidgetLayout* LayerWidget = *LayerWidgetPtr;
92 if(LayerWidget == nullptr){return nullptr;}
93 return LayerWidget->GetContentFromLayer(WidgetClass);
94}
virtual UUserWidget * GetContentFromLayer(const TSoftClassPtr< UUserWidget > &WidgetClass)=0

◆ GetIsRadialMenuOpen()

bool AHUDBase::GetIsRadialMenuOpen ( ) const
overridevirtual

Implements IHUDInterface.

256{
257 if(RadialMenuWidget == nullptr){return false;}
258 return RadialMenuWidget->IsVisible();
259}

◆ HUDCancel()

void AHUDBase::HUDCancel ( )
overridevirtual

Implements IHUDInterface.

290{
291 if(bDebuggingMode){UE_LOG(LogHUDBase, Warning, TEXT("Hud Cancel"));}
292}

◆ HUDConfirm()

void AHUDBase::HUDConfirm ( )
overridevirtual

Implements IHUDInterface.

285{
286 if(bDebuggingMode){UE_LOG(LogHUDBase, Warning, TEXT("Hud Confirm"));}
287}

◆ HUDSelectionHorizontal()

void AHUDBase::HUDSelectionHorizontal ( const bool bMoveRight = true)
overridevirtual

Implements IHUDInterface.

280{
281 if(bDebuggingMode){UE_LOG(LogHUDBase, Warning, TEXT("Hud Selection Vertical %s"), bMoveRight ? *FString("Right"): *FString("Left"));}
282}

◆ HUDSelectionVertical()

void AHUDBase::HUDSelectionVertical ( const bool bMoveUp = true)
overridevirtual

Implements IHUDInterface.

275{
276 if(bDebuggingMode){UE_LOG(LogHUDBase, Warning, TEXT("Hud Selection Vertical %s"), bMoveUp ? *FString("Up"): *FString("Down"));}
277}

◆ OnCloseRadialMenu()

void AHUDBase::OnCloseRadialMenu ( )
protected

◆ OnOpenRadialMenu()

void AHUDBase::OnOpenRadialMenu ( const FRadialMenuData & Data)
protected

◆ OpenRadialMenu()

void AHUDBase::OpenRadialMenu ( const FRadialMenuData & Data)
overridevirtual

Implements IHUDInterface.

210{
211 if(RadialMenuWidget == nullptr)
212 {
213 const bool bCreated = CreateRadialMenu();
214 if(bCreated == false){return;}
215 }
216 RadialMenuWidget->SetVisibility(ESlateVisibility::Hidden);
217 if(GetOwningPlayerController() != nullptr)
218 {
219 FInputModeGameAndUI GameAndUI;
220 GameAndUI.SetLockMouseToViewportBehavior(EMouseLockMode::LockAlways);
221 GameAndUI.SetWidgetToFocus(RadialMenuWidget->TakeWidget());
222 GetOwningPlayerController()->SetInputMode(GameAndUI);
223 }
224 IRadialMenu* RadialMenu = Cast<IRadialMenu>(RadialMenuWidget);
225 if(RadialMenu == nullptr){CloseRadialMenu();return;}
226 RadialMenu->StartUpdateInput();
227 RadialMenu->SetWheelData(Data);
228 RadialMenu->CenterMousePosition();
229 RadialMenuWidget->SetVisibility(ESlateVisibility::Visible);
230 if(RadialMenuWidget->IsInViewport() == false)
231 {
232 RadialMenuWidget->AddToPlayerScreen();
233 }
234 OnOpenRadialMenu(Data);
235}
void OnOpenRadialMenu(const FRadialMenuData &Data)
virtual int32 CloseRadialMenu() override
Definition HUDBase.cpp:237
bool CreateRadialMenu()
Definition HUDBase.cpp:266
virtual void SetWheelData(const FRadialMenuData &Data)=0
virtual void StartUpdateInput()=0

◆ PopContentFromLayer()

bool AHUDBase::PopContentFromLayer ( const FGameplayTag & LayerName)
overridevirtual

Implements IHUDInterface.

97{
99 {
100 UE_LOG(LogHUDBase, Log, TEXT("PushContentToLayer: %s"), *LayerName.GetTagName().ToString());
101 }
102 IWidgetLayout** LayerWidgetPtr = LayersMap.Find(LayerName);
103 if(LayerWidgetPtr == nullptr){return false;}
104 IWidgetLayout* LayerWidget = *LayerWidgetPtr;
105 if(LayerWidget == nullptr){return false;}
106 LayerWidget->PopWidget();
107 return true;
108}
virtual void PopWidget()=0

◆ PushContentToLayer()

UUserWidget * AHUDBase::PushContentToLayer ( const FGameplayTag & LayerName,
const TSoftClassPtr< UUserWidget > & WidgetClass )
overridevirtual

Implements IHUDInterface.

71{
73 {
74 UE_LOG(LogHUDBase, Log, TEXT("PushContentToLayer: %s"), *LayerName.GetTagName().ToString());
75 }
76 IWidgetLayout** LayerWidgetPtr = LayersMap.Find(LayerName);
77 if(LayerWidgetPtr == nullptr){UE_LOG(LogHUDBase, Error, TEXT("LayersMap doesn't contain: %s"), *LayerName.GetTagName().ToString());return nullptr;}
78 IWidgetLayout* LayerWidget = *LayerWidgetPtr;
79 if(LayerWidget == nullptr){return nullptr;}
80 return LayerWidget->PushWidget(WidgetClass);
81}
virtual UUserWidget * PushWidget(const TSoftClassPtr< UUserWidget > &WidgetClass)=0

◆ PushInitialNotificationManagers()

void AHUDBase::PushInitialNotificationManagers ( )
private
165{
166 // @TEST this seems like it would also always fail, when pushing content?
167 TArray<FGameplayTag> GameplayTags;
168 InitialNotificationManagers.GetKeys(GameplayTags);
169 for(auto GameplayTag : GameplayTags)
170 {
171 if (bDebuggingMode)
172 {
173 UE_LOG(LogHUDBase, Log, TEXT("PushInitialNotificationManagers: %s"), *GameplayTag.GetTagName().ToString());
174
175 }
176 const TSoftClassPtr<UUserWidget>* WidgetPtr = InitialNotificationManagers.Find(GameplayTag);
177 if(WidgetPtr == nullptr){continue;}
178 TSoftClassPtr<UUserWidget> Widget = *WidgetPtr;
179 if(Widget == nullptr){continue;}
180 PushContentToLayer(HUDLayerTags::Notifications, Widget);
181 }
182}
TMap< FGameplayTag, TSoftClassPtr< UUserWidget > > InitialNotificationManagers
Definition HUDBase.h:77
virtual UUserWidget * PushContentToLayer(const FGameplayTag &LayerName, const TSoftClassPtr< UUserWidget > &WidgetClass) override
Definition HUDBase.cpp:70

◆ PushInitialScreens()

void AHUDBase::PushInitialScreens ( )
private
45{
46 TArray<FGameplayTag> GameplayTags;
47 InitialScreens.GetKeys(GameplayTags);
48 for(auto GameplayTag : GameplayTags)
49 {
50 UE_LOG(LogHUDBase, Warning, TEXT("PushInitialScreens: %s"), *GameplayTag.GetTagName().ToString());
51 const TSoftClassPtr<UUserWidget>* WidgetPtr = InitialScreens.Find(GameplayTag);
52 if(WidgetPtr->Get() == nullptr){continue;}
53 TSoftClassPtr<UUserWidget> Widget = *WidgetPtr;
54 if(Widget == nullptr){continue;}
55 PushContentToLayer(GameplayTag, Widget);
56 }
57}
TMap< FGameplayTag, TSoftClassPtr< UUserWidget > > InitialScreens
Definition HUDBase.h:75

◆ RegisterLayer()

bool AHUDBase::RegisterLayer ( const FGameplayTag & LayerName,
UUserWidget * LayerWidget )
overridevirtual

Implements IHUDInterface.

60{
61 if(LayerWidget == nullptr){UE_LOG(LogHUDBase, Error, TEXT("LayerWidget NULL: %s"), *LayerName.GetTagName().ToString());return false;}
62 if(LayersMap.Contains(LayerName)){UE_LOG(LogHUDBase, Error, TEXT("LayersMap.Contains: %s"), *LayerName.GetTagName().ToString());return false;}
63 IWidgetLayout* WidgetLayout = Cast<IWidgetLayout>(LayerWidget);
64 if(WidgetLayout == nullptr){UE_LOG(LogHUDBase, Error, TEXT("%s doesn't implement IWidgetLayout"), *LayerWidget->GetName());return false;}
65 LayersMap.Add(LayerName, WidgetLayout);
66 UE_LOG(LogHUDBase, Warning, TEXT("Layer Registered: %s"), *LayerName.GetTagName().ToString());
67 return true;
68}

◆ RegisterNotificationManager()

bool AHUDBase::RegisterNotificationManager ( const FGameplayTag Type,
UUserWidget * ManagerWidget )
overridevirtual

Implements IHUDInterface.

185{
186 if (bDebuggingMode)
187 {
188 UE_LOG(LogHUDBase, Log, TEXT("RegisterNotificationManager: %s"), *Type.GetTagName().ToString());
189 }
190 if(ManagerWidget == nullptr){return false;}
191 if(NotificationManagersMap.Contains(Type)){return false;}
192 INotificationManagerInterface* NotificationManager = Cast<INotificationManagerInterface>(ManagerWidget);
193 if(NotificationManager == nullptr){UE_LOG(LogHUDBase,Error, TEXT("%s doesn't implement INotificationInterface"), *ManagerWidget->GetName());return false;}
194 NotificationManagersMap.Add(Type, NotificationManager);
195 return true;
196}

◆ ToggleGameLog()

void AHUDBase::ToggleGameLog ( )
overridevirtual

Implements IHUDInterface.

Reimplemented in ACustomHUD.

262{
263
264}

◆ ToggleWidget()

bool AHUDBase::ToggleWidget ( const FGameplayTag & LayerName,
UUserWidget * Widget )
overridevirtual

Implements IHUDInterface.

125{
126 if (bDebuggingMode)
127 {
128 UE_LOG(LogHUDBase, Log, TEXT("%s ToggleWidget: %s"), *LayerName.GetTagName().ToString(), *Widget->GetName());
129 }
130 IWidgetLayout** LayerWidgetPtr = LayersMap.Find(LayerName);
131 if(LayerWidgetPtr == nullptr){UE_LOG(LogHUDBase, Warning, TEXT("AHUDBase::ToggleWidget LayerWidgetPtr Failed: %s"), *LayerName.GetTagName().ToString());return false;}
132 IWidgetLayout* LayerWidget = *LayerWidgetPtr;
133 if(LayerWidget == nullptr){return false;}
134 return LayerWidget->ToggleWidget(Widget);
135}
virtual bool ToggleWidget(UUserWidget *Widget)=0

Member Data Documentation

◆ bDebuggingMode

bool AHUDBase::bDebuggingMode = false
protected

◆ InitialNotificationManagers

TMap<FGameplayTag, TSoftClassPtr<UUserWidget> > AHUDBase::InitialNotificationManagers
protected

◆ InitialNotificationTimerHandle

FTimerHandle AHUDBase::InitialNotificationTimerHandle
private

◆ InitialScreens

TMap<FGameplayTag, TSoftClassPtr<UUserWidget> > AHUDBase::InitialScreens
protected

◆ LayersMap

TMap<FGameplayTag, IWidgetLayout*> AHUDBase::LayersMap
private

◆ NotificationManagersMap

TMap<FGameplayTag, INotificationManagerInterface*> AHUDBase::NotificationManagersMap
private

◆ NotificationTimerHandle

FTimerHandle AHUDBase::NotificationTimerHandle
private

◆ PrimaryLayoutClass

TSubclassOf<UUserWidget> AHUDBase::PrimaryLayoutClass = nullptr
private

◆ PrimaryLayoutWidget

class UPrimaryLayoutWidget* AHUDBase::PrimaryLayoutWidget = nullptr
protected

◆ RadialMenuClass

TSubclassOf<UUserWidget> AHUDBase::RadialMenuClass = nullptr
private

◆ RadialMenuWidget

UUserWidget* AHUDBase::RadialMenuWidget = nullptr

The documentation for this class was generated from the following files: