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

#include <LayerWidget.h>

Inheritance diagram for ULayerWidget:
IWidgetLayout

Public Member Functions

 ULayerWidget ()
 
virtual UUserWidget * PushWidget (const TSoftClassPtr< UUserWidget > &WidgetClass) override
 
virtual void PopWidget () override
 
virtual void ClearStack () override
 
virtual UUserWidget * AddWidgetToLayer (const TSoftClassPtr< UUserWidget > &WidgetClass) override
 
virtual UUserWidget * GetContentFromLayer (const TSoftClassPtr< UUserWidget > &WidgetClass) override
 
virtual bool ToggleWidget (UUserWidget *Widget) override
 
virtual UUserWidget * AddWidgetToLayerWithSlot (const FGameplayTag &SlotTag, const TSoftClassPtr< UUserWidget > &WidgetClass) override
 
void CollapseTopWidget ()
 
void ShowTopWidget ()
 
FText GetStackListNames () const
 
void GetSlots ()
 

Protected Member Functions

virtual bool Initialize () override
 
virtual void NativePreConstruct () override
 
virtual void NativeConstruct () override
 
UUserWidget * GetTopWidget () const
 
USlotWidgetFindSlotByTag (const FGameplayTag &SlotTag) const
 

Protected Attributes

TArray< UUserWidget * > Stack
 
TArray< UUserWidget * > BackStack
 
class UBorder * Border = nullptr
 
class UWidgetSwitcher * Switcher = nullptr
 
class UOverlay * EmptyOverlay = nullptr
 
class UOverlay * BackOverlay = nullptr
 
class UOverlay * SlotsOverlay = nullptr
 
TMap< FGameplayTag, USlotWidget * > HUDSlots
 

Constructor & Destructor Documentation

◆ ULayerWidget()

ULayerWidget::ULayerWidget ( )
17{
18
19}

Member Function Documentation

◆ AddWidgetToLayer()

UUserWidget * ULayerWidget::AddWidgetToLayer ( const TSoftClassPtr< UUserWidget > & WidgetClass)
overridevirtual

Implements IWidgetLayout.

72{
73 UClass* LoadedClass = UKismetSystemLibrary::LoadClassAsset_Blocking(WidgetClass);
74 if(LoadedClass == nullptr || !LoadedClass->IsChildOf(UUserWidget::StaticClass())){return nullptr;}
75 const TSubclassOf<UUserWidget> LoadedWidgetClass = LoadedClass;
76 if(LoadedWidgetClass == nullptr){return nullptr;}
77 UUserWidget* CreatedWidget = CreateWidget(GetOwningPlayer(), LoadedWidgetClass);
78 BackStack.Add(CreatedWidget);
79 BackOverlay->AddChild(CreatedWidget);
80 UOverlaySlot* OverlaySlot = Cast<UOverlaySlot>(CreatedWidget->Slot);
81 if(OverlaySlot != nullptr)
82 {
83 OverlaySlot->SetHorizontalAlignment(HAlign_Fill);
84 OverlaySlot->SetVerticalAlignment(VAlign_Fill);
85 }
86 else
87 {
88 UE_LOG(LogBaseWidgets, Warning, TEXT("Widget Slot Failed %s"), *WidgetClass->GetName());
89 }
90 return CreatedWidget;
91}
class UOverlay * BackOverlay
Definition LayerWidget.h:82
TArray< UUserWidget * > BackStack
Definition LayerWidget.h:70

◆ AddWidgetToLayerWithSlot()

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

Implements IWidgetLayout.

149{
150 UClass* LoadedClass = UKismetSystemLibrary::LoadClassAsset_Blocking(WidgetClass);
151 if(LoadedClass == nullptr || !LoadedClass->IsChildOf(UUserWidget::StaticClass())){return nullptr;}
152 const TSubclassOf<UUserWidget> LoadedWidgetClass = LoadedClass;
153 if(LoadedWidgetClass == nullptr){return nullptr;}
154 UUserWidget* CreatedWidget = CreateWidget(GetOwningPlayer(), LoadedWidgetClass);
155 if(CreatedWidget == nullptr){UE_LOG(LogTemp, Error, TEXT("ULayerWidget::AddWidgetToLayerWithSlot Created Widget FAILED "))return nullptr;}
156 BackStack.Add(CreatedWidget);
157 const USlotWidget* SlotWidget = FindSlotByTag(SlotTag);
158 if(SlotWidget == nullptr){UE_LOG(LogBaseWidgets, Error, TEXT("ULayerWidget::AddWidgetToLayerWithSlot Slot %s Doesn't Exist on %s"), *SlotTag.ToString(), *GetName())return nullptr;}
159 SlotWidget->AddWidgetToSlot(CreatedWidget, false);
160 // UE_LOG(LogTemp, Warning, TEXT("ULayerWidget::AddWidgetToLayerWithSlot WIDGET %s ADDED TO SLOT %s in ULayerWidget"), *CreatedWidget->GetName(), *SlotTag.GetTagName().ToString())
161 return CreatedWidget;
162}
USlotWidget * FindSlotByTag(const FGameplayTag &SlotTag) const
Definition LayerWidget.cpp:164
Definition SlotWidget.h:16

◆ ClearStack()

void ULayerWidget::ClearStack ( )
overridevirtual

Implements IWidgetLayout.

137{
138 for(const auto Widget : Stack)
139 {
140 if(Widget == nullptr){continue;}
141 Widget->RemoveFromParent();
142 }
143 Stack.Empty();
144 Border->ClearChildren();
145}
TArray< UUserWidget * > Stack
Definition LayerWidget.h:67
class UBorder * Border
Definition LayerWidget.h:76

◆ CollapseTopWidget()

void ULayerWidget::CollapseTopWidget ( )
125{
126 if(Stack.Num() == 0 || GetTopWidget() == nullptr){UE_LOG(LogBaseWidgets,Error, TEXT("Top Widget Invalid ULayerWidget::CollapseTopWidget"));return;}
127 GetTopWidget()->SetVisibility(ESlateVisibility::Collapsed);
128}
UUserWidget * GetTopWidget() const
Definition LayerWidget.cpp:225

◆ FindSlotByTag()

USlotWidget * ULayerWidget::FindSlotByTag ( const FGameplayTag & SlotTag) const
protected
165{
166 for(int32 i = 0; i < SlotsOverlay->GetChildrenCount(); ++i)
167 {
168 if(SlotsOverlay->GetChildAt(i) == nullptr){continue;}
169 USlotWidget* SlotWidget = Cast<USlotWidget>(SlotsOverlay->GetChildAt(i));
170 if(SlotWidget == nullptr){continue;}
171 if(SlotTag == SlotWidget->SlotTag)
172 {
173 return SlotWidget;
174 }
175 }
176 return nullptr;
177}
class UOverlay * SlotsOverlay
Definition LayerWidget.h:84
FGameplayTag SlotTag
Definition SlotWidget.h:22

◆ GetContentFromLayer()

UUserWidget * ULayerWidget::GetContentFromLayer ( const TSoftClassPtr< UUserWidget > & WidgetClass)
overridevirtual

Get the Widget that was already created by class

Implements IWidgetLayout.

94{
95 UClass* LoadedClass = UKismetSystemLibrary::LoadClassAsset_Blocking(WidgetClass);
96 if(LoadedClass == nullptr || !LoadedClass->IsChildOf(UUserWidget::StaticClass())){return nullptr;}
97 const TSubclassOf<UUserWidget> LoadedWidgetClass = LoadedClass;
98 if(LoadedWidgetClass == nullptr){return nullptr;}
99 for(const auto Widget : BackStack)
100 {
101 if(Widget == nullptr){continue;}
102 if(Widget->GetClass() == LoadedWidgetClass)
103 {
104 return Widget;
105 }
106 }
107 return nullptr;
108}

◆ GetSlots()

void ULayerWidget::GetSlots ( )
46{
47 if(SlotsOverlay == nullptr){return;}
48 for(const auto Widget : SlotsOverlay->GetAllChildren())
49 {
50 USlotWidget* SlotWidget = Cast<USlotWidget>(Widget);
51 if(SlotWidget == nullptr){continue;}
52 HUDSlots.Add(SlotWidget->SlotTag, SlotWidget);
53 }
54}
TMap< FGameplayTag, USlotWidget * > HUDSlots
Definition LayerWidget.h:88

◆ GetStackListNames()

FText ULayerWidget::GetStackListNames ( ) const
213{
214 TArray<FString> Names;
215 for (int32 i = Stack.Num() - 1; i >= 0; --i)
216 {
217 if(Stack[i] == nullptr){continue;}
218 Names.Add(UKismetSystemLibrary::GetDisplayName(Stack[i]));
219 }
220 return FText::FromString(UKismetStringLibrary::JoinStringArray(Names, "\n"));
221}

◆ GetTopWidget()

UUserWidget * ULayerWidget::GetTopWidget ( ) const
protected
226{
227 const int32 ArraySize = Stack.Num();
228 const int32 LastIndex = (ArraySize > 0) ? ArraySize-1 : 0;
229 if(Stack.IsValidIndex(LastIndex))
230 {
231 return Stack[LastIndex];
232 }
233 return nullptr;
234}

◆ Initialize()

bool ULayerWidget::Initialize ( )
overrideprotectedvirtual
22{
23 const bool Success = Super::Initialize();
24 if(!Success) return false;
25 if (!ensure(Border != nullptr)) return false;
26 if (!ensure(Switcher != nullptr)) return false;
27 if (!ensure(EmptyOverlay != nullptr)) return false;
28 if (!ensure(BackOverlay != nullptr)) return false;
29 if (!ensure(SlotsOverlay != nullptr)) return false;
30 return true;
31}
class UWidgetSwitcher * Switcher
Definition LayerWidget.h:78
class UOverlay * EmptyOverlay
Definition LayerWidget.h:80

◆ NativeConstruct()

void ULayerWidget::NativeConstruct ( )
overrideprotectedvirtual
40{
41 Super::NativeConstruct();
42 GetSlots();
43}
void GetSlots()
Definition LayerWidget.cpp:45

◆ NativePreConstruct()

void ULayerWidget::NativePreConstruct ( )
overrideprotectedvirtual
34{
35 Super::NativePreConstruct();
36 GetSlots();
37}

◆ PopWidget()

void ULayerWidget::PopWidget ( )
overridevirtual

Implements IWidgetLayout.

112{
113 UUserWidget* TopWidget = GetTopWidget();
114 if(TopWidget == nullptr){UE_LOG(LogBaseWidgets,Error, TEXT("Top Widget Invalid ULayerWidget::PopWidget"));return;}
115 TopWidget->RemoveFromParent();
116 Stack.Remove(TopWidget);
117 Border->ClearChildren();
118 TopWidget = GetTopWidget();
119 if(TopWidget == nullptr){UE_LOG(LogBaseWidgets,Error, TEXT("2nd Top Widget Invalid ULayerWidget::PopWidget"));return;}
120 TopWidget->SetVisibility(ESlateVisibility::HitTestInvisible);
121 Border->AddChild(TopWidget);
122}

◆ PushWidget()

UUserWidget * ULayerWidget::PushWidget ( const TSoftClassPtr< UUserWidget > & WidgetClass)
overridevirtual

Implements IWidgetLayout.

57{
58 UClass* LoadedClass = UKismetSystemLibrary::LoadClassAsset_Blocking(WidgetClass);
59 if(LoadedClass == nullptr || !LoadedClass->IsChildOf(UUserWidget::StaticClass())){return nullptr;}
60 const TSubclassOf<UUserWidget> LoadedWidgetClass = LoadedClass;
61 if(LoadedWidgetClass == nullptr){return nullptr;}
62 UUserWidget* CreatedWidget = CreateWidget(GetOwningPlayer(), LoadedWidgetClass);
64 Border->ClearChildren();
65 Stack.Add(CreatedWidget);
66 Border->AddChild(CreatedWidget);
68 return CreatedWidget;
69}
void ShowTopWidget()
Definition LayerWidget.cpp:130
void CollapseTopWidget()
Definition LayerWidget.cpp:124

◆ ShowTopWidget()

void ULayerWidget::ShowTopWidget ( )
131{
132 if(GetTopWidget() == nullptr){UE_LOG(LogBaseWidgets,Error, TEXT("Top Widget Invalid ULayerWidget::ShowTopWidget"));return;}
133 GetTopWidget()->SetVisibility(ESlateVisibility::HitTestInvisible);
134}

◆ ToggleWidget()

bool ULayerWidget::ToggleWidget ( UUserWidget * Widget)
overridevirtual

Implements IWidgetLayout.

183{
184 if(Widget == nullptr){UE_LOG(LogBaseWidgets, Error, TEXT("ULayerWidget::ToggleWidget Widget null"));return false;}
185 if (Widget->IsVisible())
186 {
187 Widget->SetVisibility(ESlateVisibility::Collapsed);
188 return false;
189 }
190 // else
191 // {
192 Widget->SetVisibility(ESlateVisibility::Visible);
193 return true;
194 // }
195 // if(Stack.Contains(Widget) == false)
196 // {
197 // UE_LOG(LogBaseWidgets, Error, TEXT("ULayerWidget::ToggleWidget %s Doesn't Exist On Layer"), *Widget->GetName())return false;
198 // }
199 // if(Switcher == nullptr || EmptyOverlay == nullptr){return false;}
200 // if(Switcher->GetActiveWidget() == Widget)
201 // {
202 // Switcher->SetActiveWidget(EmptyOverlay);
203 // }
204 // else
205 // {
206 // Switcher->SetActiveWidget(Widget);
207 // }
208 // return true;
209}

Member Data Documentation

◆ BackOverlay

class UOverlay* ULayerWidget::BackOverlay = nullptr
protected

◆ BackStack

TArray<UUserWidget*> ULayerWidget::BackStack
protected

◆ Border

class UBorder* ULayerWidget::Border = nullptr
protected

◆ EmptyOverlay

class UOverlay* ULayerWidget::EmptyOverlay = nullptr
protected

◆ HUDSlots

TMap<FGameplayTag, USlotWidget*> ULayerWidget::HUDSlots
protected

◆ SlotsOverlay

class UOverlay* ULayerWidget::SlotsOverlay = nullptr
protected

◆ Stack

TArray<UUserWidget*> ULayerWidget::Stack
protected

◆ Switcher

class UWidgetSwitcher* ULayerWidget::Switcher = nullptr
protected

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