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);
}
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<UImage>(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);
}

View File

@ -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);

View File

@ -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<UUserWidget> HUDWidgetClass(TEXT("/Game/Blueprints/Combat_UI/Combat_UI"));
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()
{
for (UStatusEffect* StatusEffect : StatusEffects)
{
StatusEffect->OnExpiry(PlayerActor);
}
//Remove the HUD from the viewport
HUD->RemoveFromParent();
APawn* PlayerPawn = Cast<APawn>(GetWorld()->GetFirstPlayerController()->GetPawn());
@ -163,6 +170,16 @@ void ATurnBaseCombatV2::ExecuteCast(FString Combo)
UpdateResourceBars();
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)
{
@ -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"));

View File

@ -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<FString, FString> 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<UStatusEffect> ThornsStatusEffect;
UPROPERTY()
TArray<UStatusEffect*> StatusEffects;
UPROPERTY(VisibleAnywhere)
bool bIsPlayerTurn = true;