Updated TurnBasedCombat to Use StatusSystem

This commit is contained in:
Philip W 2023-02-27 04:55:55 +00:00
parent fb697f3588
commit e496cf07e9
4 changed files with 43 additions and 4 deletions

View File

@ -38,7 +38,7 @@ void UStatusSystem::TickComponent(float DeltaTime, ELevelTick TickType, FActorCo
Super::TickComponent(DeltaTime, TickType, ThisTickFunction); 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; FActiveStatusEffect NewStatusEffect;
NewStatusEffect.StatusEffect = StatusEffect; NewStatusEffect.StatusEffect = StatusEffect;
@ -48,7 +48,7 @@ void UStatusSystem::AddStatusEffect(UStatusEffect* StatusEffect, const float Dur
UImage* StatusIconImage = Cast<UImage>(NewStatusEffect.StatusIcon->GetWidgetFromName(TEXT("StatusIconImage"))); UImage* StatusIconImage = Cast<UImage>(NewStatusEffect.StatusIcon->GetWidgetFromName(TEXT("StatusIconImage")));
StatusIconImage->SetBrushFromTexture(StatusEffect->Icon); StatusIconImage->SetBrushFromTexture(StatusEffect->Icon);
StatusIconsBox->AddChild(NewStatusEffect.StatusIcon); StatusIconsBox->AddChild(NewStatusEffect.StatusIcon);
NewStatusEffect.StatusEffect->Invoke(GetOwner(), NewStatusEffect.TimeTillExpiry); if (Invoke) NewStatusEffect.StatusEffect->Invoke(GetOwner(), NewStatusEffect.TimeTillExpiry);
ActiveStatusEffects.Add(NewStatusEffect); ActiveStatusEffects.Add(NewStatusEffect);
} }

View File

@ -60,7 +60,7 @@ public:
virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override; virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
UFUNCTION() UFUNCTION()
void AddStatusEffect(UStatusEffect* StatusEffect, float DurationMultiplier = 1.0f); void AddStatusEffect(UStatusEffect* StatusEffect, float DurationMultiplier = 1.0f, bool Invoke = true);
UFUNCTION() UFUNCTION()
void RemoveStatusEffect(UStatusEffect* StatusEffect); void RemoveStatusEffect(UStatusEffect* StatusEffect);

View File

@ -4,6 +4,7 @@
#include "TurnBaseCombatV2.h" #include "TurnBaseCombatV2.h"
#include "CoreMinimal.h" #include "CoreMinimal.h"
#include "AIController.h" #include "AIController.h"
#include "StatusSystem.h"
#include "Blueprint/UserWidget.h" #include "Blueprint/UserWidget.h"
#include "BehaviorTree/BlackboardComponent.h" #include "BehaviorTree/BlackboardComponent.h"
#include "Components/TextBlock.h" #include "Components/TextBlock.h"
@ -20,6 +21,8 @@ ATurnBaseCombatV2::ATurnBaseCombatV2()
// Load the HUD widget from the specified path // Load the HUD widget from the specified path
static ConstructorHelpers::FClassFinder<UUserWidget> HUDWidgetClass(TEXT("/Game/Blueprints/Combat_UI/Combat_UI")); static ConstructorHelpers::FClassFinder<UUserWidget> HUDWidgetClass(TEXT("/Game/Blueprints/Combat_UI/Combat_UI"));
HUDWidget = HUDWidgetClass.Class; HUDWidget = HUDWidgetClass.Class;
static ConstructorHelpers::FClassFinder<UStatusEffect> StatusEffectThornsClassFinder(TEXT("/Game/Blueprints/StatusEffects/BP_Thorns"));
ThornsStatusEffect = StatusEffectThornsClassFinder.Class;
} }
} }
@ -64,6 +67,10 @@ void ATurnBaseCombatV2::StartCombat(AActor* Enemy)
void ATurnBaseCombatV2::EndCombat() void ATurnBaseCombatV2::EndCombat()
{ {
for (UStatusEffect* StatusEffect : StatusEffects)
{
StatusEffect->OnExpiry(PlayerActor);
}
//Remove the HUD from the viewport //Remove the HUD from the viewport
HUD->RemoveFromParent(); HUD->RemoveFromParent();
APawn* PlayerPawn = Cast<APawn>(GetWorld()->GetFirstPlayerController()->GetPawn()); APawn* PlayerPawn = Cast<APawn>(GetWorld()->GetFirstPlayerController()->GetPawn());
@ -163,6 +170,16 @@ void ATurnBaseCombatV2::ExecuteCast(FString Combo)
UpdateResourceBars(); UpdateResourceBars();
return; return;
} }
if (IsSpecialCombo(Combo))
{
UStatusSystem* StatusSystem = Cast<UStatusSystem>(PlayerActor->GetComponentByClass(UStatusSystem::StaticClass()));
if (Combo == "AAE")
{
UStatusEffect* TempThornsStatusEffect = NewObject<UStatusEffect>(PlayerActor, ThornsStatusEffect);
StatusSystem->AddStatusEffect(TempThornsStatusEffect, 1, false);
StatusEffects.Add(TempThornsStatusEffect);
}
}
if (GunEffect) if (GunEffect)
{ {
@ -244,11 +261,16 @@ void ATurnBaseCombatV2::UpdateProgressBars() const
EnemyHealthBar->SetPercent(*EnemyHealth / 100.0f); EnemyHealthBar->SetPercent(*EnemyHealth / 100.0f);
} }
bool ATurnBaseCombatV2::IsValidCombo(FString Combo) const bool ATurnBaseCombatV2::IsValidCombo(const FString Combo) const
{ {
return ValidCombos.Contains(Combo); return ValidCombos.Contains(Combo);
} }
bool ATurnBaseCombatV2::IsSpecialCombo(const FString Combo) const
{
return SpecialCombos.Contains(Combo);
}
void ATurnBaseCombatV2::SwitchTurn() void ATurnBaseCombatV2::SwitchTurn()
{ {
//TurnIndicatorTextBlock->SetText(FText::FromString(bIsPlayerTurn ? "Enemy Turn" : "Player Turn")); //TurnIndicatorTextBlock->SetText(FText::FromString(bIsPlayerTurn ? "Enemy Turn" : "Player Turn"));

View File

@ -6,9 +6,11 @@
#include "Components/Button.h" #include "Components/Button.h"
#include "Components/ProgressBar.h" #include "Components/ProgressBar.h"
#include "Components/TextBlock.h" #include "Components/TextBlock.h"
#include "StatusEffect.h"
#include "NiagaraComponent.h" #include "NiagaraComponent.h"
#include "NiagaraFunctionLibrary.h" #include "NiagaraFunctionLibrary.h"
#include "GameFramework/GameStateBase.h" #include "GameFramework/GameStateBase.h"
#include "StatusEffects/Thorns.h"
#include "TurnBaseCombatV2.generated.h" #include "TurnBaseCombatV2.generated.h"
class UNiagaraSystem; class UNiagaraSystem;
@ -77,6 +79,14 @@ public:
{"PI", 15}, {"PI", 15},
{"PPI", 20} {"PPI", 20}
}; };
UPROPERTY(EditAnywhere)
TMap<FString, FString> SpecialCombos =
{
//{"IIA", "ReduceActSpeed"},
//{"EEP", "AreaOfEffect"},
{"AAE", "Thorns"},
{"PPI", "DamageOverTime"}
};
FString BattleLog; FString BattleLog;
@ -101,6 +111,13 @@ protected:
private: private:
bool IsValidCombo(FString Combo) const; bool IsValidCombo(FString Combo) const;
bool IsSpecialCombo(FString Combo) const;
UPROPERTY()
TSubclassOf<UStatusEffect> ThornsStatusEffect;
UPROPERTY()
TArray<UStatusEffect*> StatusEffects;
UPROPERTY(VisibleAnywhere) UPROPERTY(VisibleAnywhere)
bool bIsPlayerTurn = true; bool bIsPlayerTurn = true;