Add Healthbar to EnemyCharacter
This commit is contained in:
parent
7396d50db9
commit
e30e644b58
|
@ -8,6 +8,7 @@
|
|||
#include "BehaviorTree/BehaviorTree.h"
|
||||
#include "BehaviorTree/BlackboardComponent.h"
|
||||
#include "BehaviorTree/BlackboardData.h"
|
||||
#include "UI/EnemyHealthbarUserWidget.h"
|
||||
|
||||
#define COLLISION_WEAPON ECC_GameTraceChannel1
|
||||
|
||||
|
@ -20,6 +21,12 @@ AEnemyCharacter::AEnemyCharacter(const FObjectInitializer& ObjectInitializer) :
|
|||
GetHealthComponent()->OnDamaged.BindUFunction(this, "OnDamaged");
|
||||
GetHealthComponent()->OnDeath.BindUFunction(this, "OnDeath");
|
||||
GetHealthComponent()->SetMaxHealth(100.0f);
|
||||
|
||||
HealthbarWidgetComponent = CreateDefaultSubobject<UWidgetComponent>(TEXT("Healthbar"));
|
||||
HealthbarWidgetComponent->SetupAttachment(RootComponent);
|
||||
HealthbarWidgetComponent->SetRelativeLocation(FVector(0,0,90));
|
||||
HealthbarWidgetComponent->SetTwoSided(true);
|
||||
HealthbarWidgetComponent->SetBackgroundColor(FLinearColor(1,1,1,0));
|
||||
|
||||
this->Tags.Add(FName("Enemy"));
|
||||
}
|
||||
|
@ -63,6 +70,12 @@ void AEnemyCharacter::BeginPlay()
|
|||
AEnemyAIController* controller = Cast<AEnemyAIController>(GetController());
|
||||
controller->GetBlackboardComponent()->SetValueAsFloat("CurrentHealth", GetHealthComponent()->GetCurrentHealth());
|
||||
GetHealthComponent()->OnDamaged.BindUFunction(this, "OnDamaged");
|
||||
|
||||
if (HealthbarWidgetComponent->GetWidget())
|
||||
{
|
||||
UEnemyHealthbarUserWidget* healthbar = Cast<UEnemyHealthbarUserWidget>(HealthbarWidgetComponent->GetWidget());
|
||||
healthbar->BindOwner(this);
|
||||
}
|
||||
}
|
||||
|
||||
void AEnemyCharacter::PlayOnFireAnimations()
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include "PatrolRoute.h"
|
||||
#include "BehaviorTree/BehaviorTreeComponent.h"
|
||||
#include "RandomWeaponParameters.h"
|
||||
#include "Components/WidgetComponent.h"
|
||||
#include "EnemyCharacter.generated.h"
|
||||
|
||||
|
||||
|
@ -27,6 +28,9 @@ public:
|
|||
|
||||
UPROPERTY(EditAnywhere)
|
||||
float DefendRadius = 500.0f;
|
||||
|
||||
UPROPERTY(EditAnywhere)
|
||||
UWidgetComponent* HealthbarWidgetComponent;
|
||||
|
||||
private:
|
||||
UPROPERTY(EditDefaultsOnly, Meta = (AllowPrivateAccess = "true"))
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
|
||||
#include "../UI/EnemyHealthbarUserWidget.h"
|
||||
|
||||
#include "Nakatomi/EnemyCharacter.h"
|
||||
|
||||
void UEnemyHealthbarUserWidget::BindOwner(AEnemyCharacter* NewOwner)
|
||||
{
|
||||
Owner = NewOwner;
|
||||
|
||||
if (Owner)
|
||||
{
|
||||
auto healthComponent = Owner->GetHealthComponent();
|
||||
healthComponent->OnDamaged.BindUFunction(this, "UpdateHealthbar");
|
||||
}
|
||||
}
|
||||
|
||||
void UEnemyHealthbarUserWidget::UpdateHealthbar()
|
||||
{
|
||||
if (Owner)
|
||||
{
|
||||
float percent = Owner->GetHealthComponent()->GetCurrentHealth() / Owner->GetHealthComponent()->GetMaxHealth();
|
||||
Healthbar->SetPercent(percent);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Blueprint/UserWidget.h"
|
||||
#include "Components/ProgressBar.h"
|
||||
#include "Nakatomi/EnemyCharacter.h"
|
||||
#include "EnemyHealthbarUserWidget.generated.h"
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
UCLASS()
|
||||
class NAKATOMI_API UEnemyHealthbarUserWidget : public UUserWidget
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
|
||||
UPROPERTY(BlueprintReadWrite, meta = (BindWidget))
|
||||
UProgressBar* Healthbar;
|
||||
|
||||
AEnemyCharacter* Owner;
|
||||
|
||||
public:
|
||||
|
||||
void BindOwner(AEnemyCharacter* NewOwner);
|
||||
|
||||
private:
|
||||
|
||||
UFUNCTION()
|
||||
void UpdateHealthbar();
|
||||
};
|
Loading…
Reference in New Issue