feat: UI ammo, UI debuf

This commit is contained in:
BambiTheLama 2025-05-22 17:21:59 +02:00
parent 1845537987
commit 848f500933
12 changed files with 140 additions and 52 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -48,7 +48,10 @@ void AExoPlayerCharacter::BeginPlay()
if (PlayerHud)
{
PlayerHud->SetHp(CurrentHealth,MaxHealth);
PlayerHud->SetAmmo(10);
PlayerHud->SetAmmoNumber(10);
PlayerHud->SetAmmoType(EAmmoType::Revolver);
for (int i=0;i<4;i++)
PlayerHud->AddDebuf(NULL,0.25f*i);
}
}
}

View File

@ -0,0 +1,25 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "Widget/UWBP_Debuf.h"
#include "Components/Image.h"
#include "Widget/UWBP_RoundProgressBar.h"
void UUWBP_Debuf::SetTexture(UTexture2D* texture)
{
if (!DebufImage)
return;
FSlateBrush NewBrush;
if (!texture)
return;
NewBrush.SetResourceObject(texture);
NewBrush.ImageSize = FVector2D(64, 64);
DebufImage->SetBrush(NewBrush);
}
void UUWBP_Debuf::SetPrecent(float precent)
{
if (ProgressBar)
ProgressBar->SetPercent(precent);
}

View File

@ -4,27 +4,23 @@
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "WBP_PlayerUI.generated.h"
#include "UWBP_Debuf.generated.h"
/**
*
*/
UCLASS()
class UWBP_PlayerUI : public UUserWidget
class UUWBP_Debuf : public UUserWidget
{
GENERATED_BODY()
public:
void SetHp(float hp,float hpMax);
void SetAmmo(int ammo);
UPROPERTY(EditAnywhere, meta = (BindWidget))
class UUWBP_RoundProgressBar* ProgressBar;
UPROPERTY(EditAnywhere, meta = (BindWidget))
class UWBP_HpBar* HPBar;
class UImage* DebufImage;
UPROPERTY(EditAnywhere, meta = (BindWidget))
class UImage* AmmoImage;
void SetTexture(UTexture2D* texture);
UPROPERTY(EditAnywhere, meta = (BindWidget))
class UTextBlock* AmmoText;
void SetPrecent(float precent);
};

View File

@ -1,14 +0,0 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "Widget/UWBP_HpBar.h"
#include "Components/ProgressBar.h"
#include "Widget/UWBP_RoundProgressBar.h"
void UWBP_HpBar::SetHp(float hp, float hpMax)
{
if (!HPBar)
return;
HPBar->SetPercent(hp/hpMax);
}

View File

@ -3,18 +3,66 @@
#include "Widget/WBP_PlayerUI.h"
#include "UWBP_Debuf.h"
#include "Blueprint/WidgetTree.h"
#include "Components/CanvasPanel.h"
#include "Components/CanvasPanelSlot.h"
#include "Components/Image.h"
#include "Components/TextBlock.h"
#include "Widget/UWBP_HpBar.h"
#include "Widget/UWBP_RoundProgressBar.h"
void UWBP_PlayerUI::SetHp(float hp, float hpMax)
{
if (HPBar)
HPBar->SetHp(hp, hpMax);
if (!HPBar)
return;
HPBar->SetPercent(hp/hpMax);
}
void UWBP_PlayerUI::SetAmmo(int ammo)
void UWBP_PlayerUI::SetAmmoType(EAmmoType ammoType)
{
if (!AmmoImage)
return;
FSlateBrush NewBrush;
if (!AmmoIconMap.Contains(ammoType))
return;
UTexture2D* IconTexture = AmmoIconMap[ammoType];
if (!IconTexture)
return;
NewBrush.SetResourceObject(IconTexture);
NewBrush.ImageSize = FVector2D(64, 64);
AmmoImage->SetBrush(NewBrush);
}
void UWBP_PlayerUI::SetAmmoNumber(int ammo)
{
if (AmmoText)
AmmoText->SetText(FText::AsNumber(ammo));
}
void UWBP_PlayerUI::AddDebuf(UTexture2D* texture, float procent)
{
if (!DebufClass)
return;
if (!DebufPanel)
return;
UUWBP_Debuf* NewDebuf = WidgetTree->ConstructWidget<UUWBP_Debuf>(DebufClass, FName(FString::Printf(TEXT("Debuff %d"), debufs.Num())));
if (!NewDebuf)
return;
float angle=debufs.Num()*DebufAngleDiff;
float radians= FMath::DegreesToRadians(angle);
debufs.Add(NewDebuf);
NewDebuf->SetTexture(texture);
NewDebuf->SetPrecent(procent);
UCanvasPanelSlot* CanvasSlot = Cast<UCanvasPanelSlot>(DebufPanel->AddChild(NewDebuf));
if (!CanvasSlot)
return;
CanvasSlot->SetAnchors(FAnchors(0.5f, 0.5f));
CanvasSlot->SetAlignment(FVector2D(0.5f, 0.5f));
CanvasSlot->SetPosition(FVector2D(sin(radians)*DebufRange,-cos(radians)*DebufRange));
CanvasSlot->SetAutoSize(true);
}

View File

@ -1,22 +0,0 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "UWBP_HpBar.generated.h"
/**
*
*/
UCLASS()
class UWBP_HpBar : public UUserWidget
{
GENERATED_BODY()
public:
void SetHp(float hp,float hpMax);
UPROPERTY(EditAnywhere, meta = (BindWidget))
class UUWBP_RoundProgressBar* HPBar;
};

View File

@ -0,0 +1,52 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "WBP_PlayerUI.generated.h"
/**
*
*/
enum class EAmmoType: uint8;
class UUWBP_Debuf;
UCLASS()
class UWBP_PlayerUI : public UUserWidget
{
GENERATED_BODY()
public:
void SetHp(float hp,float hpMax);
void SetAmmoType(EAmmoType ammoType);
void SetAmmoNumber(int ammo);
void AddDebuf(UTexture2D* texture,float procent);
UPROPERTY(EditAnywhere, meta = (BindWidget))
class UUWBP_RoundProgressBar* HPBar;
UPROPERTY(EditAnywhere, meta = (BindWidget))
class UTextBlock* AmmoText;
UPROPERTY(EditAnywhere, meta = (BindWidget))
class UImage* AmmoImage;
UPROPERTY(EditAnywhere, meta = (BindWidget))
class UCanvasPanel* DebufPanel;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Debuf")
float DebufRange;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Debuf")
float DebufAngleDiff;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Debuf")
TSubclassOf<UUserWidget> DebufClass;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Ammo")
TMap<EAmmoType, UTexture2D*> AmmoIconMap;
private:
TArray<UUWBP_Debuf*> debufs;
};