From e496cf07e9686c83402291b7d02a710d76d19422 Mon Sep 17 00:00:00 2001 From: PHILIP White Date: Mon, 27 Feb 2023 04:55:55 +0000 Subject: [PATCH] Updated TurnBasedCombat to Use StatusSystem --- .../TurnBasedCombatV2/StatusSystem.cpp | 4 ++-- .../TurnBasedCombatV2/StatusSystem.h | 2 +- .../TurnBasedCombatV2/TurnBaseCombatV2.cpp | 24 ++++++++++++++++++- .../TurnBasedCombatV2/TurnBaseCombatV2.h | 17 +++++++++++++ 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.cpp index 52cdf88..d3138dc 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.cpp @@ -38,7 +38,7 @@ void UStatusSystem::TickComponent(float DeltaTime, ELevelTick TickType, FActorCo Super::TickComponent(DeltaTime, TickType, ThisTickFunction); } -void UStatusSystem::AddStatusEffect(UStatusEffect* StatusEffect, const float DurationMultiplier) +void UStatusSystem::AddStatusEffect(UStatusEffect* StatusEffect, const float DurationMultiplier, const bool Invoke) { FActiveStatusEffect NewStatusEffect; NewStatusEffect.StatusEffect = StatusEffect; @@ -48,7 +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->Invoke(GetOwner(), NewStatusEffect.TimeTillExpiry); + if (Invoke) NewStatusEffect.StatusEffect->Invoke(GetOwner(), NewStatusEffect.TimeTillExpiry); ActiveStatusEffects.Add(NewStatusEffect); } diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.h b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.h index 6e0435f..1076de3 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.h +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/StatusSystem.h @@ -60,7 +60,7 @@ public: virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override; UFUNCTION() - void AddStatusEffect(UStatusEffect* StatusEffect, float DurationMultiplier = 1.0f); + void AddStatusEffect(UStatusEffect* StatusEffect, float DurationMultiplier = 1.0f, bool Invoke = true); UFUNCTION() void RemoveStatusEffect(UStatusEffect* StatusEffect); diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp index e4e4e0f..511fcdc 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp @@ -4,6 +4,7 @@ #include "TurnBaseCombatV2.h" #include "CoreMinimal.h" #include "AIController.h" +#include "StatusSystem.h" #include "Blueprint/UserWidget.h" #include "BehaviorTree/BlackboardComponent.h" #include "Components/TextBlock.h" @@ -20,6 +21,8 @@ ATurnBaseCombatV2::ATurnBaseCombatV2() // Load the HUD widget from the specified path static ConstructorHelpers::FClassFinder HUDWidgetClass(TEXT("/Game/Blueprints/Combat_UI/Combat_UI")); HUDWidget = HUDWidgetClass.Class; + static ConstructorHelpers::FClassFinder StatusEffectThornsClassFinder(TEXT("/Game/Blueprints/StatusEffects/BP_Thorns")); + ThornsStatusEffect = StatusEffectThornsClassFinder.Class; } } @@ -64,6 +67,10 @@ void ATurnBaseCombatV2::StartCombat(AActor* Enemy) void ATurnBaseCombatV2::EndCombat() { + for (UStatusEffect* StatusEffect : StatusEffects) + { + StatusEffect->OnExpiry(PlayerActor); + } //Remove the HUD from the viewport HUD->RemoveFromParent(); APawn* PlayerPawn = Cast(GetWorld()->GetFirstPlayerController()->GetPawn()); @@ -163,6 +170,16 @@ void ATurnBaseCombatV2::ExecuteCast(FString Combo) UpdateResourceBars(); return; } + if (IsSpecialCombo(Combo)) + { + UStatusSystem* StatusSystem = Cast(PlayerActor->GetComponentByClass(UStatusSystem::StaticClass())); + if (Combo == "AAE") + { + UStatusEffect* TempThornsStatusEffect = NewObject(PlayerActor, ThornsStatusEffect); + StatusSystem->AddStatusEffect(TempThornsStatusEffect, 1, false); + StatusEffects.Add(TempThornsStatusEffect); + } + } if (GunEffect) { @@ -244,11 +261,16 @@ void ATurnBaseCombatV2::UpdateProgressBars() const EnemyHealthBar->SetPercent(*EnemyHealth / 100.0f); } -bool ATurnBaseCombatV2::IsValidCombo(FString Combo) const +bool ATurnBaseCombatV2::IsValidCombo(const FString Combo) const { return ValidCombos.Contains(Combo); } +bool ATurnBaseCombatV2::IsSpecialCombo(const FString Combo) const +{ + return SpecialCombos.Contains(Combo); +} + void ATurnBaseCombatV2::SwitchTurn() { //TurnIndicatorTextBlock->SetText(FText::FromString(bIsPlayerTurn ? "Enemy Turn" : "Player Turn")); diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h index 732612a..1533986 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h @@ -6,9 +6,11 @@ #include "Components/Button.h" #include "Components/ProgressBar.h" #include "Components/TextBlock.h" +#include "StatusEffect.h" #include "NiagaraComponent.h" #include "NiagaraFunctionLibrary.h" #include "GameFramework/GameStateBase.h" +#include "StatusEffects/Thorns.h" #include "TurnBaseCombatV2.generated.h" class UNiagaraSystem; @@ -77,6 +79,14 @@ public: {"PI", 15}, {"PPI", 20} }; + UPROPERTY(EditAnywhere) + TMap SpecialCombos = + { + //{"IIA", "ReduceActSpeed"}, + //{"EEP", "AreaOfEffect"}, + {"AAE", "Thorns"}, + {"PPI", "DamageOverTime"} + }; FString BattleLog; @@ -101,6 +111,13 @@ protected: private: bool IsValidCombo(FString Combo) const; + bool IsSpecialCombo(FString Combo) const; + + UPROPERTY() + TSubclassOf ThornsStatusEffect; + + UPROPERTY() + TArray StatusEffects; UPROPERTY(VisibleAnywhere) bool bIsPlayerTurn = true;