From 6227b4952cebc1bad3f31804bcf704ecf9cfbaff Mon Sep 17 00:00:00 2001 From: PHILIP White Date: Tue, 28 Feb 2023 16:48:30 +0000 Subject: [PATCH 1/4] Updated StatusSystem to Bind Player/Enemy Turn Events --- .../TurnBasedCombatV2/StatusEffect.cpp | 12 ++++++++++-- .../TurnBasedCombatV2/StatusEffect.h | 7 ++++--- .../TurnBasedCombatV2/StatusSystem.cpp | 1 + 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.cpp index 036547b..38c2399 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.cpp @@ -5,6 +5,7 @@ #include "StatusSystem.h" #include "Kismet/GameplayStatics.h" +#include "TurnBaseCombatV2.h" #include "Components/TextBlock.h" void UStatusEffect::Invoke(AActor* Character, float TimeOfInit) @@ -21,16 +22,23 @@ void UStatusEffect::OnExpiry(AActor* Character) StatusSystem->RemoveStatusEffect(this); } -void UStatusEffect::OnPlayerTurn(AActor* Character) +void UStatusEffect::OnPlayerTurn(AActor* Character, AActor* Enemy) { return; } -void UStatusEffect::OnEnemyTurn(AActor* Character) +void UStatusEffect::OnEnemyTurn(AActor* Enemy, AActor* Character) { return; } +void UStatusEffect::OnStatusEffectAdd() +{ + ATurnBaseCombatV2* CombatSystem = Cast(GetWorld()->GetGameState()); + CombatSystem->OnPlayerTurn.AddUObject(this, &UStatusEffect::OnPlayerTurn); + CombatSystem->OnEnemyTurn.AddUObject(this, &UStatusEffect::OnEnemyTurn); +} + void UStatusEffect::CheckForExpiry(const float TimeOfExpiry, AActor* Character) { if (TimeOfExpiry <= UGameplayStatics::GetRealTimeSeconds(GetWorld())) OnExpiry(Character); diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.h b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.h index 317bc56..4d57501 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.h +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.h @@ -26,15 +26,16 @@ public: UFUNCTION() virtual void Invoke(AActor* Character, float TimeOfExpiry); - UFUNCTION() virtual void OnExpiry(AActor* Character); UFUNCTION() - virtual void OnPlayerTurn(AActor* Character); + virtual void OnPlayerTurn(AActor* Character, AActor* Enemy); + UFUNCTION() + virtual void OnEnemyTurn(AActor* Enemy, AActor* Character); UFUNCTION() - virtual void OnEnemyTurn(AActor* Character); + virtual void OnStatusEffectAdd(); protected: UPROPERTY() diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.cpp index d3138dc..499df9d 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.cpp @@ -48,6 +48,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->OnStatusEffectAdd(); if (Invoke) NewStatusEffect.StatusEffect->Invoke(GetOwner(), NewStatusEffect.TimeTillExpiry); ActiveStatusEffects.Add(NewStatusEffect); From 0be235f6b16310732fa0026eca6c96990903fa93 Mon Sep 17 00:00:00 2001 From: PHILIP White Date: Thu, 2 Mar 2023 03:25:00 +0000 Subject: [PATCH 2/4] Updated Thorns Status Effect to Trigger OnPlayerDamage --- .../Blueprints/StatusEffects/BP_Thorns.uasset | 4 +-- .../TurnBasedCombatV2/StatusEffect.cpp | 7 +++-- .../TurnBasedCombatV2/StatusEffect.h | 5 ++++ .../StatusEffects/Thorns.cpp | 14 +++++++++ .../TurnBasedCombatV2/StatusEffects/Thorns.h | 4 +++ .../TurnBasedCombatV2/StatusSystem.cpp | 9 +++++- .../TurnBasedCombatV2/TurnBaseCombatV2.cpp | 29 ++++++++++--------- .../TurnBasedCombatV2/TurnBaseCombatV2.h | 13 +++++---- the_twilight_abyss.uproject.DotSettings | 3 +- 9 files changed, 63 insertions(+), 25 deletions(-) diff --git a/Content/Blueprints/StatusEffects/BP_Thorns.uasset b/Content/Blueprints/StatusEffects/BP_Thorns.uasset index bf52405..e8fe436 100644 --- a/Content/Blueprints/StatusEffects/BP_Thorns.uasset +++ b/Content/Blueprints/StatusEffects/BP_Thorns.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:48a4ca28df9c381f5b0f29fd9a0a4a5ab3baad4524263a0cfac9be21675ad0eb -size 6382 +oid sha256:851cdfb16956e96b0965fe275332897cb64b3a78df1b00925db70e581b20bc6a +size 6482 diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.cpp index 38c2399..2aefba5 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.cpp @@ -20,6 +20,9 @@ void UStatusEffect::OnExpiry(AActor* Character) if (StatusSystem->GetActiveStatusEffect(this).StatusIcon == nullptr) return; StatusSystem->GetActiveStatusEffect(this).StatusIcon->RemoveFromParent(); StatusSystem->RemoveStatusEffect(this); + ATurnBaseCombatV2* CombatSystem = Cast(GetWorld()->GetGameState()); + CombatSystem->OnPlayerTurn.Remove(OnPlayerTurnDelegateHandle); + CombatSystem->OnEnemyTurn.Remove(OnEnemyTurnDelegateHandle); } void UStatusEffect::OnPlayerTurn(AActor* Character, AActor* Enemy) @@ -35,8 +38,8 @@ void UStatusEffect::OnEnemyTurn(AActor* Enemy, AActor* Character) void UStatusEffect::OnStatusEffectAdd() { ATurnBaseCombatV2* CombatSystem = Cast(GetWorld()->GetGameState()); - CombatSystem->OnPlayerTurn.AddUObject(this, &UStatusEffect::OnPlayerTurn); - CombatSystem->OnEnemyTurn.AddUObject(this, &UStatusEffect::OnEnemyTurn); + OnPlayerTurnDelegateHandle = CombatSystem->OnPlayerTurn.AddUObject(this, &UStatusEffect::OnPlayerTurn); + OnEnemyTurnDelegateHandle = CombatSystem->OnEnemyTurn.AddUObject(this, &UStatusEffect::OnEnemyTurn); } void UStatusEffect::CheckForExpiry(const float TimeOfExpiry, AActor* Character) diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.h b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.h index 4d57501..f8cd426 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.h +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.h @@ -20,6 +20,8 @@ public: UPROPERTY(EditAnywhere, BlueprintReadWrite) FString Description; UPROPERTY(EditAnywhere, BlueprintReadWrite) + bool IsForCombatOnly = false; + UPROPERTY(EditAnywhere, BlueprintReadWrite) float BaseDuration; UPROPERTY(EditAnywhere, BlueprintReadWrite) UTexture2D* Icon; @@ -42,4 +44,7 @@ protected: FTimerHandle ExpiryTimerHandle; UFUNCTION() void CheckForExpiry(float TimeOfExpiry, AActor* Character); + + FDelegateHandle OnPlayerTurnDelegateHandle; + FDelegateHandle OnEnemyTurnDelegateHandle; }; diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/Thorns.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/Thorns.cpp index ae9f142..4d27d0d 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/Thorns.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/Thorns.cpp @@ -3,6 +3,8 @@ #include "Thorns.h" +#include "the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h" + void UThorns::Invoke(AActor* Character, float TimeOfExpiry) { Super::Invoke(Character, TimeOfExpiry); @@ -12,3 +14,15 @@ void UThorns::OnExpiry(AActor* Character) { Super::OnExpiry(Character); } + +void UThorns::OnEnemyTurn(AActor* Enemy, AActor* Character) +{ + Super::OnEnemyTurn(Enemy, Character); + ATurnBaseCombatV2* CombatSystem = Cast(GetWorld()->GetGameState()); + CombatSystem->DamageEnemy(DamagePerTurn, "thorns"); + BaseDuration -= 1.0f; + if (BaseDuration <= 0.0f) + { + OnExpiry(Character); + } +} diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/Thorns.h b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/Thorns.h index 9abc89c..09862ae 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/Thorns.h +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/Thorns.h @@ -15,6 +15,10 @@ class THE_TWILIGHT_ABYSS_API UThorns : public UStatusEffect GENERATED_BODY() public: + UPROPERTY(EditAnywhere, BlueprintReadWrite) + float DamagePerTurn = 3.0f; + virtual void Invoke(AActor* Character, float TimeOfExpiry) override; virtual void OnExpiry(AActor* Character) override; + virtual void OnEnemyTurn(AActor* Enemy, AActor* Character) override; }; diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.cpp index 499df9d..46b1b43 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.cpp @@ -43,7 +43,14 @@ void UStatusSystem::AddStatusEffect(UStatusEffect* StatusEffect, const float Dur FActiveStatusEffect NewStatusEffect; NewStatusEffect.StatusEffect = StatusEffect; NewStatusEffect.TimeInitiated = UGameplayStatics::GetRealTimeSeconds(GetWorld()); - NewStatusEffect.TimeTillExpiry = UGameplayStatics::GetRealTimeSeconds(GetWorld()) + StatusEffect->BaseDuration * DurationMultiplier; + if (StatusEffect->IsForCombatOnly) + { + NewStatusEffect.TimeTillExpiry = StatusEffect->BaseDuration * DurationMultiplier; + } + else + { + NewStatusEffect.TimeTillExpiry = UGameplayStatics::GetRealTimeSeconds(GetWorld()) + StatusEffect->BaseDuration * DurationMultiplier; + } NewStatusEffect.StatusIcon = CreateWidget(GetWorld(), HUDStatusIconWidget); UImage* StatusIconImage = Cast(NewStatusEffect.StatusIcon->GetWidgetFromName(TEXT("StatusIconImage"))); StatusIconImage->SetBrushFromTexture(StatusEffect->Icon); diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp index fa527c2..eb2eb90 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp @@ -86,15 +86,15 @@ void ATurnBaseCombatV2::EndCombat() PlayerController->bShowMouseCursor = false; } -void ATurnBaseCombatV2::FKeyPressed() -{ - PButtonOnClick(); -} - -void ATurnBaseCombatV2::WKeyPressed() -{ - EButtonOnClick(); -} +// void ATurnBaseCombatV2::FKeyPressed() +// { +// PButtonOnClick(); +// } +// +// void ATurnBaseCombatV2::WKeyPressed() +// { +// EButtonOnClick(); +// } void ATurnBaseCombatV2::BeginPlay() { @@ -176,6 +176,7 @@ void ATurnBaseCombatV2::ExecuteCast(FString Combo) UStatusEffect* TempThornsStatusEffect = NewObject(PlayerActor, ThornsStatusEffect); StatusSystem->AddStatusEffect(TempThornsStatusEffect, 1, false); StatusEffects.Add(TempThornsStatusEffect); + AddBattleLogMessage("Player Casted Thorns"); } } @@ -191,6 +192,7 @@ void ATurnBaseCombatV2::ExecuteCast(FString Combo) RevertActionPoints(); UpdateActionPoints(); + //Damage Calculation switch (bIsPlayerTurn) { case true: @@ -241,18 +243,18 @@ void ATurnBaseCombatV2::RevertActionPoints() UpdateActionPoints(); } -void ATurnBaseCombatV2::DamagePlayer(int Damage) +void ATurnBaseCombatV2::DamagePlayer(int Damage, FString DamageType) { *PlayerHealth -= FMath::Clamp(Damage, 0, 100); UpdateProgressBars(); - AddBattleLogMessage("Player was damaged for " + FString::FromInt(Damage) + " damage."); + AddBattleLogMessage("Player was damaged for " + FString::FromInt(Damage) + " HP by " + DamageType + "."); } -void ATurnBaseCombatV2::DamageEnemy(int Damage) +void ATurnBaseCombatV2::DamageEnemy(int Damage, FString DamageType) { *EnemyHealth -= FMath::Clamp(Damage, 0, 100); UpdateProgressBars(); - AddBattleLogMessage("Enemy was damaged for " + FString::FromInt(Damage) + " damage."); + AddBattleLogMessage("Enemy was damaged for " + FString::FromInt(Damage) + " HP by " + DamageType + "."); } void ATurnBaseCombatV2::UpdateProgressBars() const @@ -455,6 +457,7 @@ void ATurnBaseCombatV2::ToggleButtons() const void ATurnBaseCombatV2::EnemyTurn() { DamagePlayer(10); + OnEnemyTurn.Broadcast(EnemyActor, PlayerActor); TurnIndicatorTextBlock->SetText(FText::FromString("Player Turn")); ToggleButtons(); } diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h index 4a339a2..db67b13 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h @@ -94,15 +94,18 @@ public: void StartCombat(AActor* Enemy); UFUNCTION(BlueprintCallable) void EndCombat(); - UFUNCTION(BlueprintCallable) - void FKeyPressed(); - UFUNCTION(BlueprintCallable) - void WKeyPressed(); + // UFUNCTION(BlueprintCallable) + // void FKeyPressed(); + // UFUNCTION(BlueprintCallable) + // void WKeyPressed(); DECLARE_EVENT_TwoParams(ATurnBaseCombatV2, FOnPlayerTurn, AActor*, AActor*); DECLARE_EVENT_TwoParams(ATurnBaseCombatV2, FOnEnemyTurn, AActor*, AActor*); FOnPlayerTurn OnPlayerTurn; FOnEnemyTurn OnEnemyTurn; + + void DamagePlayer(int Damage, FString DamageType = "unknown"); + void DamageEnemy(int Damage, FString DamageType = "unknown"); protected: virtual void BeginPlay() override; @@ -110,8 +113,6 @@ protected: void UseActionPoint(); void ReuseActionPoint(); void RevertActionPoints(); - void DamagePlayer(int Damage); - void DamageEnemy(int Damage); void UpdateProgressBars() const; private: diff --git a/the_twilight_abyss.uproject.DotSettings b/the_twilight_abyss.uproject.DotSettings index 2323d1b..81ddebe 100644 --- a/the_twilight_abyss.uproject.DotSettings +++ b/the_twilight_abyss.uproject.DotSettings @@ -1,4 +1,5 @@  True True - True \ No newline at end of file + True + True \ No newline at end of file From c742abfce4ab9c4c91b09bd4153e84b845f08b6a Mon Sep 17 00:00:00 2001 From: PHILIP White Date: Thu, 2 Mar 2023 15:06:31 +0000 Subject: [PATCH 3/4] Added DamageOverTime Status Effect for Combat --- .vsconfig | 5 ++++ .../StatusEffects/BP_DamageOverTime.uasset | 3 +++ .../StatusEffects/DamageOverTime.cpp | 17 ++++++++++++++ .../StatusEffects/DamageOverTime.h | 23 +++++++++++++++++++ .../TurnBasedCombatV2/TurnBaseCombatV2.cpp | 9 ++++++++ .../TurnBasedCombatV2/TurnBaseCombatV2.h | 2 ++ 6 files changed, 59 insertions(+) create mode 100644 Content/Blueprints/StatusEffects/BP_DamageOverTime.uasset create mode 100644 Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/DamageOverTime.cpp create mode 100644 Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/DamageOverTime.h diff --git a/.vsconfig b/.vsconfig index cf3175a..b9be525 100644 --- a/.vsconfig +++ b/.vsconfig @@ -1,10 +1,15 @@ { "version": "1.0", "components": [ + "Microsoft.Net.Component.4.6.2.TargetingPack", + "Microsoft.VisualStudio.Component.VC.14.33.17.3.ARM64", + "Microsoft.VisualStudio.Component.VC.14.33.17.3.x86.x64", "Microsoft.VisualStudio.Component.VC.Tools.ARM64", "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", "Microsoft.VisualStudio.Component.Windows10SDK", "Microsoft.VisualStudio.Workload.CoreEditor", + "Microsoft.VisualStudio.Workload.ManagedDesktop", + "Microsoft.VisualStudio.Workload.NativeCrossPlat", "Microsoft.VisualStudio.Workload.NativeDesktop", "Microsoft.VisualStudio.Workload.NativeGame", "Microsoft.VisualStudio.Workload.Universal" diff --git a/Content/Blueprints/StatusEffects/BP_DamageOverTime.uasset b/Content/Blueprints/StatusEffects/BP_DamageOverTime.uasset new file mode 100644 index 0000000..c69a24b --- /dev/null +++ b/Content/Blueprints/StatusEffects/BP_DamageOverTime.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08f2fffcd5fe0379220954960108a4ee1346bc64bd456fee30919e5f60725878 +size 6592 diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/DamageOverTime.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/DamageOverTime.cpp new file mode 100644 index 0000000..c6692b1 --- /dev/null +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/DamageOverTime.cpp @@ -0,0 +1,17 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "DamageOverTime.h" +#include + +void UDamageOverTime::OnEnemyTurn(AActor* Enemy, AActor* Character) +{ + Super::OnEnemyTurn(Enemy, Character); + ATurnBaseCombatV2* CombatSystem = Cast(GetWorld()->GetGameState()); + CombatSystem->DamageEnemy(DamagePerTurn, "DOT"); + BaseDuration -= 1.0f; + if (BaseDuration <= 0.0f) + { + OnExpiry(Character); + } +} diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/DamageOverTime.h b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/DamageOverTime.h new file mode 100644 index 0000000..c50db18 --- /dev/null +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/DamageOverTime.h @@ -0,0 +1,23 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "../StatusEffect.h" +#include "DamageOverTime.generated.h" + +/** + * + */ +UCLASS() +class THE_TWILIGHT_ABYSS_API UDamageOverTime : public UStatusEffect +{ + GENERATED_BODY() +public: + UPROPERTY(EditAnywhere, BlueprintReadWrite) + float DamagePerTurn = 6.0f; + + //virtual void Invoke(AActor* Character, float TimeOfExpiry) override; + //virtual void OnExpiry(AActor* Character) override; + virtual void OnEnemyTurn(AActor* Enemy, AActor* Character) override; +}; diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp index eb2eb90..3bbffa9 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp @@ -22,6 +22,8 @@ ATurnBaseCombatV2::ATurnBaseCombatV2() HUDWidget = HUDWidgetClass.Class; static ConstructorHelpers::FClassFinder StatusEffectThornsClassFinder(TEXT("/Game/Blueprints/StatusEffects/BP_Thorns")); ThornsStatusEffect = StatusEffectThornsClassFinder.Class; + static ConstructorHelpers::FClassFinder StatusEffectDOTClassFinder(TEXT("/Game/Blueprints/StatusEffects/BP_DamageOverTime")); + DOTStatusEffect = StatusEffectDOTClassFinder.Class; } } @@ -178,6 +180,13 @@ void ATurnBaseCombatV2::ExecuteCast(FString Combo) StatusEffects.Add(TempThornsStatusEffect); AddBattleLogMessage("Player Casted Thorns"); } + else if (Combo == "PPI") + { + UStatusEffect* TempDOTStatusEffect = NewObject(PlayerActor, DOTStatusEffect); + StatusSystem->AddStatusEffect(TempDOTStatusEffect, 1, false); + StatusEffects.Add(TempDOTStatusEffect); + AddBattleLogMessage("Player Casted DOT"); + } } if (GunEffect) diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h index db67b13..db70d83 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h @@ -121,6 +121,8 @@ private: UPROPERTY() TSubclassOf ThornsStatusEffect; + UPROPERTY() + TSubclassOf DOTStatusEffect; UPROPERTY() TArray StatusEffects; From 0bf0b5a220c52db761df92a9ffb32f4748ca67f0 Mon Sep 17 00:00:00 2001 From: PHILIP White Date: Thu, 2 Mar 2023 15:37:36 +0000 Subject: [PATCH 4/4] Updated StatusSystem to Display Active Turns --- .../TurnBasedCombatV2/StatusEffect.cpp | 11 +++++++++-- .../TurnBasedCombatV2/StatusEffect.h | 5 ++++- .../StatusEffects/DamageOverTime.cpp | 2 +- .../TurnBasedCombatV2/StatusEffects/Thorns.cpp | 2 +- .../TurnBasedCombatV2/StatusSystem.cpp | 4 +++- 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.cpp index 2aefba5..931ac87 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.cpp @@ -32,16 +32,23 @@ void UStatusEffect::OnPlayerTurn(AActor* Character, AActor* Enemy) void UStatusEffect::OnEnemyTurn(AActor* Enemy, AActor* Character) { - return; + TickDown(Character); } -void UStatusEffect::OnStatusEffectAdd() +void UStatusEffect::OnStatusEffectAdd(AActor* Character) { ATurnBaseCombatV2* CombatSystem = Cast(GetWorld()->GetGameState()); OnPlayerTurnDelegateHandle = CombatSystem->OnPlayerTurn.AddUObject(this, &UStatusEffect::OnPlayerTurn); OnEnemyTurnDelegateHandle = CombatSystem->OnEnemyTurn.AddUObject(this, &UStatusEffect::OnEnemyTurn); } +void UStatusEffect::TickDown(AActor* Character) +{ + UStatusSystem* StatusSystem = Cast(Character->GetComponentByClass(UStatusSystem::StaticClass())); + UTextBlock* StatusText = Cast(StatusSystem->GetActiveStatusEffect(this).StatusIcon->GetWidgetFromName(TEXT("DurationText"))); + StatusText->SetText(FText::FromString(FString::FromInt(BaseDuration))); +} + void UStatusEffect::CheckForExpiry(const float TimeOfExpiry, AActor* Character) { if (TimeOfExpiry <= UGameplayStatics::GetRealTimeSeconds(GetWorld())) OnExpiry(Character); diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.h b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.h index f8cd426..3073647 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.h +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffect.h @@ -37,7 +37,10 @@ public: virtual void OnEnemyTurn(AActor* Enemy, AActor* Character); UFUNCTION() - virtual void OnStatusEffectAdd(); + virtual void OnStatusEffectAdd(AActor* Character); + + UFUNCTION() + virtual void TickDown(AActor* Character); protected: UPROPERTY() diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/DamageOverTime.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/DamageOverTime.cpp index c6692b1..6bf8032 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/DamageOverTime.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/DamageOverTime.cpp @@ -6,10 +6,10 @@ void UDamageOverTime::OnEnemyTurn(AActor* Enemy, AActor* Character) { - Super::OnEnemyTurn(Enemy, Character); ATurnBaseCombatV2* CombatSystem = Cast(GetWorld()->GetGameState()); CombatSystem->DamageEnemy(DamagePerTurn, "DOT"); BaseDuration -= 1.0f; + Super::OnEnemyTurn(Enemy, Character); if (BaseDuration <= 0.0f) { OnExpiry(Character); diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/Thorns.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/Thorns.cpp index 4d27d0d..b3277af 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/Thorns.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusEffects/Thorns.cpp @@ -17,10 +17,10 @@ void UThorns::OnExpiry(AActor* Character) void UThorns::OnEnemyTurn(AActor* Enemy, AActor* Character) { - Super::OnEnemyTurn(Enemy, Character); ATurnBaseCombatV2* CombatSystem = Cast(GetWorld()->GetGameState()); CombatSystem->DamageEnemy(DamagePerTurn, "thorns"); BaseDuration -= 1.0f; + Super::OnEnemyTurn(Enemy, Character); if (BaseDuration <= 0.0f) { OnExpiry(Character); diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.cpp index 46b1b43..046bc5e 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.cpp @@ -55,7 +55,9 @@ 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->OnStatusEffectAdd(); + NewStatusEffect.StatusEffect->OnStatusEffectAdd(GetOwner()); + UTextBlock* StatusText = Cast(NewStatusEffect.StatusIcon->GetWidgetFromName(TEXT("DurationText"))); + StatusText->SetText(FText::FromString(FString::FromInt(NewStatusEffect.TimeTillExpiry))); if (Invoke) NewStatusEffect.StatusEffect->Invoke(GetOwner(), NewStatusEffect.TimeTillExpiry); ActiveStatusEffects.Add(NewStatusEffect);