#include "HealthSystem.h" #include "Net/UnrealNetwork.h" #include "Engine/Engine.h" #include "Components/ActorComponent.h" UHealthSystem::UHealthSystem() { PrimaryComponentTick.bCanEverTick = false; PrimaryComponentTick.bStartWithTickEnabled = false; SetIsReplicatedByDefault(true); MaxHealth = 100; } void UHealthSystem::BeginPlay() { Super::BeginPlay(); Health = MaxHealth; Shield = 0; } void UHealthSystem::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const { Super::GetLifetimeReplicatedProps(OutLifetimeProps); DOREPLIFETIME(UHealthSystem, Health); } float UHealthSystem::GetHealth() const { return Health; } float UHealthSystem::GetMaxHealth() const { return MaxHealth; } float UHealthSystem::GetShield() const { return Shield; } void UHealthSystem::TakeDamage(const float Amount) { if (Amount > 0) { Health -= Amount; OnDamageTakenEvent.Broadcast(Amount); } } void UHealthSystem::RecoverHealth(const float Amount) { if (Amount > 0) { Health += Amount; if (Health >= MaxHealth) { Health = MaxHealth; } OnDamageHealedEvent.Broadcast(Amount); } } void UHealthSystem::ReceiveShield(const float Amount) { if (Amount >= 0) { Shield += Amount; OnShieldReceiveEvent.Broadcast(Amount); } } void UHealthSystem::RemoveShield(const float Amount) { if (Amount >= 0) { Shield -= Amount; if (Shield < 0) { Shield = 0; } OnShieldReceiveEvent.Broadcast(Amount); } }