// Fill out your copyright notice in the Description page of Project Settings. #include "DDIHealth.h" // Sets default values for this component's properties UDDIHealth::UDDIHealth() { // Set this component to be initialized when the game starts, and to be ticked every frame. You can turn these features // off to improve performance if you don't need them. PrimaryComponentTick.bCanEverTick = true; MaxHealth = 0; CurrentHealth = 0; ClassName = ClassNames::Scout; HealTickTime = 0.2f; HealDelayTime = 1.5f; } // Called when the game starts void UDDIHealth::BeginPlay() { Super::BeginPlay(); FString classNameString = UEnum::GetValueAsName(ClassName).ToString(); TArray ParsedStrings; // Split the string by the comma delimiter classNameString.ParseIntoArray(ParsedStrings, TEXT("::"), true); if (FHealthSegment* Segment = HealthSegmentTable->FindRow(FName(ParsedStrings[1]), FString("HealthSegments"))) { HealthSegments = Segment->SegmentList; FString output = ""; for (int seg : Segment->SegmentList) output.Append(seg + ", "); GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, ""); } for (int seg : HealthSegments) MaxHealth += seg; CurrentHealth = MaxHealth; GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Cyan, FString::Printf(TEXT("CurrentHealth: %d"), CurrentHealth)); } // Called every frame void UDDIHealth::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) { Super::TickComponent(DeltaTime, TickType, ThisTickFunction); if (CurrentHealth < MaxHealth && !HealTimer.IsValid()) { GetWorld()->GetTimerManager().SetTimer(HealTimer, this, &UDDIHealth::Heal, HealTickTime, true, HealDelayTime); int tempHealthPool = 0; for (int seg : HealthSegments) { if (CurrentHealth >= tempHealthPool) tempHealthPool += seg; } MaxHealth = tempHealthPool; } } void UDDIHealth::Heal() { if (CurrentHealth >= MaxHealth) { CurrentHealth = MaxHealth; HealTimer.Invalidate(); return; } CurrentHealth += 1; } // Called to cause damage void UDDIHealth::TakeDamage(int DamageValue) { if (HealTimer.IsValid()) HealTimer.Invalidate(); CurrentHealth -= DamageValue; }