diff --git a/BP_Pics/UI/HealthBar/WB_HealtbarDesign.jpg b/BP_Pics/UI/HealthBar/WB_HealtbarDesign.jpg new file mode 100644 index 0000000..8149a2c Binary files /dev/null and b/BP_Pics/UI/HealthBar/WB_HealtbarDesign.jpg differ diff --git a/GameJamPlus2024/Content/Characters/PaperCharacters/UI/WB_HealthBar.uasset b/GameJamPlus2024/Content/Characters/PaperCharacters/UI/WB_HealthBar.uasset index 9327156..21d7380 100644 Binary files a/GameJamPlus2024/Content/Characters/PaperCharacters/UI/WB_HealthBar.uasset and b/GameJamPlus2024/Content/Characters/PaperCharacters/UI/WB_HealthBar.uasset differ diff --git a/GameJamPlus2024/Source/GameJamPlus2024/Private/HealthBar.cpp b/GameJamPlus2024/Source/GameJamPlus2024/Private/HealthBar.cpp index 71486ee..0326489 100644 --- a/GameJamPlus2024/Source/GameJamPlus2024/Private/HealthBar.cpp +++ b/GameJamPlus2024/Source/GameJamPlus2024/Private/HealthBar.cpp @@ -2,4 +2,28 @@ #include "HealthBar.h" +#include "EventsManager.h" +void UHealthBar::OnDamageTaken(E_EventType Arg, int Damage) +{ + SetHealthBarPercent(-Damage); + UE_LOG(LogActor, Warning, TEXT("Damage Taken: %d"), Damage); +} + +void UHealthBar::NativeConstruct() +{ + EventsManager::AddListener(E_EventType::DamageTaken, this, &UHealthBar::OnDamageTaken); + EventsManager::AddListener(E_EventType::MaxHealthUpgrade, this, &UHealthBar::SetMaxHealth); +} + +void UHealthBar::SetHealthBarPercent(float Percent) +{ + float NewPercent = HealthBar->GetPercent() + Percent / MaxHealth; + HealthBar->SetPercent(NewPercent); +} + +void UHealthBar::SetMaxHealth(E_EventType Arg, int NewMaxHealth) +{ + MaxHealth = NewMaxHealth; + HealthBar->SetPercent(1.0f); +} \ No newline at end of file diff --git a/GameJamPlus2024/Source/GameJamPlus2024/Private/PaperCharacterBase.cpp b/GameJamPlus2024/Source/GameJamPlus2024/Private/PaperCharacterBase.cpp index 37d04fa..fdbd1a2 100644 --- a/GameJamPlus2024/Source/GameJamPlus2024/Private/PaperCharacterBase.cpp +++ b/GameJamPlus2024/Source/GameJamPlus2024/Private/PaperCharacterBase.cpp @@ -5,6 +5,7 @@ #include "EnhancedInputComponent.h" #include "EnhancedInputSubsystems.h" +#include "EventsManager.h" #include "PaperFlipbookComponent.h" #include "GameJamPlus2024/GameJamPlus2024Character.h" @@ -111,10 +112,15 @@ void APaperCharacterBase::RotateCamera(const FInputActionValue& Value) { TargetRotation.Yaw += CameraRotationAngle; // Rotate right } - + /// DEBUG ONLY: TakeDamage(10); GetController()->SetControlRotation(TargetRotation); } +void APaperCharacterBase::TakeDamage(UINT Damage) +{ + EventsManager::SendEvent(E_EventType::DamageTaken, Damage); +} + void APaperCharacterBase::BeginPlay() { diff --git a/GameJamPlus2024/Source/GameJamPlus2024/Public/EventsManager.h b/GameJamPlus2024/Source/GameJamPlus2024/Public/EventsManager.h index 7e946f9..a9ae477 100644 --- a/GameJamPlus2024/Source/GameJamPlus2024/Public/EventsManager.h +++ b/GameJamPlus2024/Source/GameJamPlus2024/Public/EventsManager.h @@ -7,7 +7,9 @@ UENUM(BlueprintType) enum class E_EventType : uint8 { + DamageTaken, EnemyDeath, + MaxHealthUpgrade, }; DECLARE_DELEGATE_TwoParams(FOnCallback, E_EventType, const int32); diff --git a/GameJamPlus2024/Source/GameJamPlus2024/Public/HealthBar.h b/GameJamPlus2024/Source/GameJamPlus2024/Public/HealthBar.h index e1500c3..f98412b 100644 --- a/GameJamPlus2024/Source/GameJamPlus2024/Public/HealthBar.h +++ b/GameJamPlus2024/Source/GameJamPlus2024/Public/HealthBar.h @@ -3,18 +3,33 @@ #pragma once #include "CoreMinimal.h" +#include "EventsManager.h" #include "Blueprint/UserWidget.h" +#include "Components/ProgressBar.h" #include "HealthBar.generated.h" -/** - * - */ UCLASS() class GAMEJAMPLUS2024_API UHealthBar : public UUserWidget { GENERATED_BODY() + void OnDamageTaken(E_EventType Arg, int Damage); + +public: + UPROPERTY(VisibleAnywhere, BlueprintReadWrite, meta = (BindWidget)) + UProgressBar* HealthBar; - virtual void BeginPlay() override; +protected: + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Health", meta = (AllowPrivateAccess = "true")) + int MaxHealth = 100; + +protected: + // This function is called when the widget is constructed + virtual void NativeConstruct() override; + UFUNCTION(BlueprintCallable) + void SetHealthBarPercent(float Percent); + + UFUNCTION(BlueprintCallable) + void SetMaxHealth(E_EventType Arg, int NewMaxHealth); }; diff --git a/GameJamPlus2024/Source/GameJamPlus2024/Public/PaperCharacterBase.h b/GameJamPlus2024/Source/GameJamPlus2024/Public/PaperCharacterBase.h index c13ff87..b321f13 100644 --- a/GameJamPlus2024/Source/GameJamPlus2024/Public/PaperCharacterBase.h +++ b/GameJamPlus2024/Source/GameJamPlus2024/Public/PaperCharacterBase.h @@ -50,6 +50,7 @@ class GAMEJAMPLUS2024_API APaperCharacterBase : public APaperCharacter void Move(const FInputActionValue& Value); void SwitchAnimation(const FVector2d& Value); void RotateCamera(const FInputActionValue& Value); + void TakeDamage(UINT Damage); // APawn interface virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;