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

#include <WeaponSystemWidget.h>

Inheritance diagram for UWeaponSystemWidget:
IWeaponHUDInterface

Public Member Functions

 UWeaponSystemWidget (const FObjectInitializer &ObjectInitializer)
 
virtual void SetPlayerWeaponState (const FPlayerWeaponState &WeaponState) override
 
virtual void SetAmmo (const int32 CurrentAmmo, const int32 TotalAmmo) override
 
virtual void UpdateWeapons (const TArray< FWeaponData_T > &Weapons, const int32 CurrentWeaponIndex) override
 
virtual void SetMaxNumberOfWeaponsDisplayed (const int32 Number) override
 
int32 GetLastWeaponIndex () const
 
void OnWeaponsChanged (const TArray< FWeaponData_T > &OutWeaponsInventory, const int32 CurrentWeapon)
 
void OnPlayerWeaponStateChanged (const FPlayerWeaponState &PlayerWeaponState)
 
void OnAmmoChanged (const int32 CurrentAmmo, const int32 TotalAmmo)
 

Public Attributes

int32 SpacerSize = 4
 

Protected Member Functions

virtual bool Initialize () override
 

Protected Attributes

class UTextBlock * CurrentAmmoTextBlock
 
class UTextBlock * CurrentTotalAmmoTextBlock
 
class UHorizontalBox * WeaponSlotsBox
 
TArray< class UWeaponSlotWidget * > WeaponSlots
 

Private Attributes

TSubclassOf< class UWeaponSlotWidgetWeaponSlotClass
 
int32 MaxNumberOfWeaponsDisplayed
 
int32 LastWeaponIndex = 99
 

Constructor & Destructor Documentation

◆ UWeaponSystemWidget()

UWeaponSystemWidget::UWeaponSystemWidget ( const FObjectInitializer & ObjectInitializer)
explicit
14 : Super(ObjectInitializer)
15{
16 const ConstructorHelpers::FClassFinder<UWeaponSlotWidget> WeaponSlotWidgetBP(TEXT("/WeaponSystem/Widgets/WBP_WeaponSlot"));
17 if (!ensure(WeaponSlotWidgetBP.Class != nullptr)) return;
18 WeaponSlotClass = WeaponSlotWidgetBP.Class;
19
20}
TSubclassOf< class UWeaponSlotWidget > WeaponSlotClass
Definition WeaponSystemWidget.h:58

Member Function Documentation

◆ GetLastWeaponIndex()

int32 UWeaponSystemWidget::GetLastWeaponIndex ( ) const
inline
28{return LastWeaponIndex;};
int32 LastWeaponIndex
Definition WeaponSystemWidget.h:61

◆ Initialize()

bool UWeaponSystemWidget::Initialize ( )
overrideprotectedvirtual
23{
24 const bool Success = Super::Initialize();
25 if (!ensure(WeaponSlotsBox != nullptr)) return false;
26 if (!ensure(CurrentAmmoTextBlock != nullptr)) return false;
27 if (!ensure(CurrentTotalAmmoTextBlock != nullptr)) return false;
28 if(!Success) return false;
29 return true;
30}
class UTextBlock * CurrentTotalAmmoTextBlock
Definition WeaponSystemWidget.h:49
class UTextBlock * CurrentAmmoTextBlock
Definition WeaponSystemWidget.h:47
class UHorizontalBox * WeaponSlotsBox
Definition WeaponSystemWidget.h:51

◆ OnAmmoChanged()

void UWeaponSystemWidget::OnAmmoChanged ( const int32 CurrentAmmo,
const int32 TotalAmmo )

◆ OnPlayerWeaponStateChanged()

void UWeaponSystemWidget::OnPlayerWeaponStateChanged ( const FPlayerWeaponState & PlayerWeaponState)

◆ OnWeaponsChanged()

void UWeaponSystemWidget::OnWeaponsChanged ( const TArray< FWeaponData_T > & OutWeaponsInventory,
const int32 CurrentWeapon )

◆ SetAmmo()

void UWeaponSystemWidget::SetAmmo ( const int32 CurrentAmmo,
const int32 TotalAmmo )
overridevirtual

Implements IWeaponHUDInterface.

56{
57 for(UWidget* Widget: WeaponSlotsBox->GetAllChildren())
58 {
59 UWeaponSlotWidget* WeaponSlotWidget = Cast<UWeaponSlotWidget>(Widget);
60 if(WeaponSlotWidget != nullptr)
61 {
62 if(WeaponSlotWidget->GetIsWeaponSelected())
63 {
64 WeaponSlotWidget->SetWeaponAmmo(CurrentAmmo, TotalAmmo);
65 }
66 }
67 }
68 CurrentAmmoTextBlock->SetText(FText::FromString(FString::FromInt(CurrentAmmo)));
69 CurrentTotalAmmoTextBlock->SetText(FText::FromString(FString::FromInt(TotalAmmo)));
70 OnAmmoChanged(CurrentAmmo, TotalAmmo);
71}
Definition WeaponSlotWidget.h:12
void SetWeaponAmmo(int32 CurrentAmmo, int32 TotalAmmo)
Definition WeaponSlotWidget.cpp:66
bool GetIsWeaponSelected() const
Definition WeaponSlotWidget.h:23
void OnAmmoChanged(const int32 CurrentAmmo, const int32 TotalAmmo)

◆ SetMaxNumberOfWeaponsDisplayed()

virtual void UWeaponSystemWidget::SetMaxNumberOfWeaponsDisplayed ( const int32 Number)
inlineoverridevirtual

Implements IWeaponHUDInterface.

int32 MaxNumberOfWeaponsDisplayed
Definition WeaponSystemWidget.h:60

◆ SetPlayerWeaponState()

void UWeaponSystemWidget::SetPlayerWeaponState ( const FPlayerWeaponState & WeaponState)
overridevirtual

Implements IWeaponHUDInterface.

51{
52 OnPlayerWeaponStateChanged(WeaponState);
53}
void OnPlayerWeaponStateChanged(const FPlayerWeaponState &PlayerWeaponState)

◆ UpdateWeapons()

void UWeaponSystemWidget::UpdateWeapons ( const TArray< FWeaponData_T > & Weapons,
const int32 CurrentWeaponIndex )
overridevirtual

Implements IWeaponHUDInterface.

75{
76 WeaponSlots.Empty();
77 WeaponSlotsBox->ClearChildren();
78 if(Weapons.Num() == 0)
79 {
80 //- Create empty slot
81 UWeaponSlotWidget* WeaponSlot = CreateWidget<UWeaponSlotWidget>(GetOwningPlayer(), WeaponSlotClass);
82 if(WeaponSlot != nullptr)
83 {
84 SetAmmo(0,0);
85 WeaponSlot->SetWeaponAmmo(0,0);
86 //- if current weapon is the same as the slot array, set selected
87 WeaponSlot->SetWeaponSelected();
88 WeaponSlotsBox->AddChild(WeaponSlot);
89 }
90 return;
91 }
92 if(Weapons.IsValidIndex(CurrentWeaponIndex))
93 {
94 CurrentAmmoTextBlock->SetText(FText::FromString(FString::FromInt(Weapons[CurrentWeaponIndex].CurrentAmmo)));
95 CurrentTotalAmmoTextBlock->SetText(FText::FromString(FString::FromInt(Weapons[CurrentWeaponIndex].TotalAmmoCount)));
96 }
97 // if(Weapons.Num() > MaxNumberOfWeaponsDisplayed)
98 // {
99 //
100 // }
101 for(int i = 0; i < Weapons.Num(); i++)
102 {
103 // if(i > MaxNumberOfWeaponsDisplayed - 1){return;}
104 UWeaponSlotWidget* WeaponSlot = CreateWidget<UWeaponSlotWidget>(GetOwningPlayer(), WeaponSlotClass);
105 if(WeaponSlot != nullptr)
106 {
107 if(!Weapons.IsValidIndex(i)){UE_LOG(LogWeaponSystem, Error, TEXT("Weapons array Invalid Index , Weapon System Widget"));return;}
108 WeaponSlot->SetWeapon(Weapons[i].WeaponID);
109 WeaponSlot->SetWeaponAmmo(Weapons[i].CurrentAmmo, Weapons[i].TotalAmmoCount);
110 bool bSuccess = false;
111 UTexture2D* WeaponThumbnail = UWeaponBPLib::GetWeaponThumbnail(this, Weapons[i].WeaponID, bSuccess);
112 if(bSuccess)
113 {
114 WeaponSlot->SetWeaponThumbnail(WeaponThumbnail);
115 }
116 WeaponSlot->SetWeaponFireMode(Weapons[i].FireMode);
117 //- if current weapon is the same as the slot array, set selected
118 //- if the current weapon hasn't changed, don't play an animation
119 WeaponSlot->SetWeaponSelected(CurrentWeaponIndex == i, (LastWeaponIndex != CurrentWeaponIndex));
120
121 WeaponSlots.Add(WeaponSlot);
122 WeaponSlotsBox->AddChild(WeaponSlot);
123
124
125 //- Add a spacer after each item, (Except first and last )
126 if(Weapons.Num() > 1 && (i != Weapons.Num() -1))
127 {
128 USpacer* Spacer = WidgetTree->ConstructWidget<USpacer>(USpacer::StaticClass());
129 if(Spacer != nullptr)
130 {
131 Spacer->SetSize(FVector2D(SpacerSize,1));
132 WeaponSlotsBox->AddChild(Spacer);
133 }
134 }
135 }
136 }
137
138 LastWeaponIndex = CurrentWeaponIndex;
139 OnWeaponsChanged(Weapons, CurrentWeaponIndex);
140}
static UTexture2D * GetWeaponThumbnail(const UObject *WorldContextObject, const FString &WeaponID, bool &bSuccess, UDataTable *DataTable=nullptr)
Definition WeaponBPLib.cpp:287
void SetWeaponFireMode(const EWeaponFireMode FireMode)
Definition WeaponSlotWidget.cpp:50
void SetWeapon(const FString &WeaponID)
Definition WeaponSlotWidget.cpp:56
void SetWeaponThumbnail(UTexture2D *WeaponThumbnail)
Definition WeaponSlotWidget.cpp:37
void SetWeaponSelected(bool bSelected=true, bool bPlayAnim=true)
Definition WeaponSlotWidget.cpp:31
TArray< class UWeaponSlotWidget * > WeaponSlots
Definition WeaponSystemWidget.h:54
int32 SpacerSize
Definition WeaponSystemWidget.h:41
virtual void SetAmmo(const int32 CurrentAmmo, const int32 TotalAmmo) override
Definition WeaponSystemWidget.cpp:55
void OnWeaponsChanged(const TArray< FWeaponData_T > &OutWeaponsInventory, const int32 CurrentWeapon)

Member Data Documentation

◆ CurrentAmmoTextBlock

class UTextBlock* UWeaponSystemWidget::CurrentAmmoTextBlock
protected

◆ CurrentTotalAmmoTextBlock

class UTextBlock* UWeaponSystemWidget::CurrentTotalAmmoTextBlock
protected

◆ LastWeaponIndex

int32 UWeaponSystemWidget::LastWeaponIndex = 99
private

◆ MaxNumberOfWeaponsDisplayed

int32 UWeaponSystemWidget::MaxNumberOfWeaponsDisplayed
private

◆ SpacerSize

int32 UWeaponSystemWidget::SpacerSize = 4

◆ WeaponSlotClass

TSubclassOf<class UWeaponSlotWidget> UWeaponSystemWidget::WeaponSlotClass
private

◆ WeaponSlots

TArray<class UWeaponSlotWidget*> UWeaponSystemWidget::WeaponSlots
protected

◆ WeaponSlotsBox

class UHorizontalBox* UWeaponSystemWidget::WeaponSlotsBox
protected

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