diff --git a/Content/Blueprints/HUD/BP_BlasterHUD.uasset b/Content/Blueprints/HUD/BP_BlasterHUD.uasset index 4e6c0da..36daa96 100644 Binary files a/Content/Blueprints/HUD/BP_BlasterHUD.uasset and b/Content/Blueprints/HUD/BP_BlasterHUD.uasset differ diff --git a/Content/Blueprints/HUD/WBP_CharacterOverlay.uasset b/Content/Blueprints/HUD/WBP_CharacterOverlay.uasset new file mode 100644 index 0000000..89c2c16 Binary files /dev/null and b/Content/Blueprints/HUD/WBP_CharacterOverlay.uasset differ diff --git a/Source/Blaster/Character/BlasterCharacter.cpp b/Source/Blaster/Character/BlasterCharacter.cpp index fa53bc3..2f4d4a3 100644 --- a/Source/Blaster/Character/BlasterCharacter.cpp +++ b/Source/Blaster/Character/BlasterCharacter.cpp @@ -53,6 +53,7 @@ void ABlasterCharacter::GetLifetimeReplicatedProps(TArray& Ou Super::GetLifetimeReplicatedProps(OutLifetimeProps); DOREPLIFETIME_CONDITION(ABlasterCharacter, OverlappingWeapon, COND_OwnerOnly); + DOREPLIFETIME(ABlasterCharacter, Health); } void ABlasterCharacter::OnRep_ReplicatedMovement() @@ -401,6 +402,11 @@ float ABlasterCharacter::CalculateSpeed() return Velocity.Size(); } +void ABlasterCharacter::OnRep_Health() +{ + +} + void ABlasterCharacter::SetOverlappingWeapon(AWeapon* Weapon) { if (OverlappingWeapon) diff --git a/Source/Blaster/Character/BlasterCharacter.h b/Source/Blaster/Character/BlasterCharacter.h index df9fdc4..b1ef625 100644 --- a/Source/Blaster/Character/BlasterCharacter.h +++ b/Source/Blaster/Character/BlasterCharacter.h @@ -92,6 +92,17 @@ private: float ProxyYaw; float TimeSinceLastMovementReplication; float CalculateSpeed(); + + // Health + + UPROPERTY(EditAnywhere, Category= "Player Stats") + float MaxHealth = 100.f; + + UPROPERTY(ReplicatedUsing = OnRep_Health, VisibleAnywhere, Category= "Player Stats") + float Health = 100.f; + + UFUNCTION() + void OnRep_Health(); public: void SetOverlappingWeapon(AWeapon* Weapon); diff --git a/Source/Blaster/HUD/BlasterHUD.cpp b/Source/Blaster/HUD/BlasterHUD.cpp index 5e0731a..055d3ad 100644 --- a/Source/Blaster/HUD/BlasterHUD.cpp +++ b/Source/Blaster/HUD/BlasterHUD.cpp @@ -3,6 +3,26 @@ #include "BlasterHUD.h" +#include "CharacterOverlay.h" +#include "Blueprint/UserWidget.h" + +void ABlasterHUD::BeginPlay() +{ + Super::BeginPlay(); + + AddCharacterOverlay(); +} + +void ABlasterHUD::AddCharacterOverlay() +{ + APlayerController* PlayerController = GetOwningPlayerController(); + if (PlayerController && CharacterOverlayClass) + { + CharacterOverlay = CreateWidget(PlayerController, CharacterOverlayClass); + CharacterOverlay->AddToViewport(); + } +} + void ABlasterHUD::DrawHUD() { Super::DrawHUD(); diff --git a/Source/Blaster/HUD/BlasterHUD.h b/Source/Blaster/HUD/BlasterHUD.h index ab0f45f..7ef0b77 100644 --- a/Source/Blaster/HUD/BlasterHUD.h +++ b/Source/Blaster/HUD/BlasterHUD.h @@ -32,6 +32,16 @@ class BLASTER_API ABlasterHUD : public AHUD public: virtual void DrawHUD() override; + UPROPERTY(EditAnywhere, Category = "Player Stats") + TSubclassOf CharacterOverlayClass; + + class UCharacterOverlay* CharacterOverlay; + +protected: + + virtual void BeginPlay() override; + void AddCharacterOverlay(); + private: FHUDPackage HUDPackage; diff --git a/Source/Blaster/HUD/CharacterOverlay.cpp b/Source/Blaster/HUD/CharacterOverlay.cpp new file mode 100644 index 0000000..8a09925 --- /dev/null +++ b/Source/Blaster/HUD/CharacterOverlay.cpp @@ -0,0 +1,5 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "CharacterOverlay.h" + diff --git a/Source/Blaster/HUD/CharacterOverlay.h b/Source/Blaster/HUD/CharacterOverlay.h new file mode 100644 index 0000000..f7f517f --- /dev/null +++ b/Source/Blaster/HUD/CharacterOverlay.h @@ -0,0 +1,25 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "Blueprint/UserWidget.h" +#include "CharacterOverlay.generated.h" + +/** + * + */ +UCLASS() +class BLASTER_API UCharacterOverlay : public UUserWidget +{ + GENERATED_BODY() + +public: + + UPROPERTY(meta = (BindWidget)) + class UProgressBar* HealthBar; + + UPROPERTY(meta = (BindWidget)) + class UTextBlock* HealthText; + +};