From 37deb51b5fa06608b94b4850dacbac7e0679c9c9 Mon Sep 17 00:00:00 2001 From: PHILIP White Date: Thu, 23 Feb 2023 03:50:26 +0000 Subject: [PATCH] Added HealOverTime Status Effect for Testing --- .../TurnBasedCombatV2/StatusEffect.h | 2 +- .../StatusEffects/HealOverTime.cpp | 30 +++++++++++++++++++ .../StatusEffects/HealOverTime.h | 25 ++++++++++++++++ .../TurnBasedCombatV2/StatusSystem.cpp | 1 + 4 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/HealOverTime.cpp create mode 100644 Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/HealOverTime.h diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.h b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.h index 14a0b12..a11a1a7 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.h +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.h @@ -9,7 +9,7 @@ /** * */ -UCLASS(Abstract) +UCLASS(Abstract, Blueprintable) class THE_TWILIGHT_ABYSS_API UStatusEffect : public UObject { GENERATED_BODY() diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/HealOverTime.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/HealOverTime.cpp new file mode 100644 index 0000000..31bee82 --- /dev/null +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/HealOverTime.cpp @@ -0,0 +1,30 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "HealOverTime.h" + +#include "the_twilight_abyss/PlayerTemp/TempCharacter.h" + +void UHealOverTime::Heal(AActor* Character, const float Amount) const +{ + if (ATempCharacter* CastedCharacter = Cast(Character); CastedCharacter->Health < 100) + { + CastedCharacter->Health += Amount; + } + else + { + CastedCharacter->Health = 100; + } +} + +void UHealOverTime::Invoke(AActor* Character) +{ + Super::Invoke(Character); + GetWorld()->GetTimerManager().SetTimer(HealTimerHandle, [Character, this] { Heal(Character, 1); }, 1, true, 0); +} + +void UHealOverTime::OnExpiry(AActor* Character) +{ + Super::OnExpiry(Character); + HealTimerHandle.Invalidate(); +} diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/HealOverTime.h b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/HealOverTime.h new file mode 100644 index 0000000..32c2855 --- /dev/null +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/HealOverTime.h @@ -0,0 +1,25 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "../StatusEffect.h" +#include "HealOverTime.generated.h" + +/** + * + */ +UCLASS() +class THE_TWILIGHT_ABYSS_API UHealOverTime : public UStatusEffect +{ + GENERATED_BODY() + +protected: + UFUNCTION() + void Heal(AActor* Character, float Amount) const; + +public: + FTimerHandle HealTimerHandle; + virtual void Invoke(AActor* Character) override; + virtual void OnExpiry(AActor* Character) override; +}; diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.cpp index 7d19848..97a4cec 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.cpp @@ -61,6 +61,7 @@ void UStatusSystem::AddStatusEffect(UStatusEffect* StatusEffect, const float Dur UImage* StatusIconImage = Cast(NewStatusEffect.StatusIcon->GetWidgetFromName(TEXT("StatusIconImage"))); StatusIconImage->SetBrushFromTexture(StatusEffect->Icon); StatusIconsBox->AddChild(NewStatusEffect.StatusIcon); + NewStatusEffect.StatusEffect->Invoke(GetOwner()); ActiveStatusEffects.Add(NewStatusEffect); }