feat: UI ammo, UI debuf
This commit is contained in:
parent
1845537987
commit
848f500933
Binary file not shown.
Binary file not shown.
BIN
Content/Widget/WBP_Debuf.uasset
Normal file
BIN
Content/Widget/WBP_Debuf.uasset
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
25
Source/Exo/Private/Widget/UWBP_Debuf.cpp
Normal file
25
Source/Exo/Private/Widget/UWBP_Debuf.cpp
Normal 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);
|
||||
}
|
||||
|
|
@ -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);
|
||||
};
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
52
Source/Exo/Public/Widget/WBP_PlayerUI.h
Normal file
52
Source/Exo/Public/Widget/WBP_PlayerUI.h
Normal 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;
|
||||
};
|
||||
Loading…
Reference in New Issue
Block a user