Updated StatusSystem to Display Active Turns

This commit is contained in:
Philip W 2023-03-02 15:37:36 +00:00
parent c742abfce4
commit 0bf0b5a220
5 changed files with 18 additions and 6 deletions

View File

@ -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<ATurnBaseCombatV2>(GetWorld()->GetGameState());
OnPlayerTurnDelegateHandle = CombatSystem->OnPlayerTurn.AddUObject(this, &UStatusEffect::OnPlayerTurn);
OnEnemyTurnDelegateHandle = CombatSystem->OnEnemyTurn.AddUObject(this, &UStatusEffect::OnEnemyTurn);
}
void UStatusEffect::TickDown(AActor* Character)
{
UStatusSystem* StatusSystem = Cast<UStatusSystem>(Character->GetComponentByClass(UStatusSystem::StaticClass()));
UTextBlock* StatusText = Cast<UTextBlock>(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);

View File

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

View File

@ -6,10 +6,10 @@
void UDamageOverTime::OnEnemyTurn(AActor* Enemy, AActor* Character)
{
Super::OnEnemyTurn(Enemy, Character);
ATurnBaseCombatV2* CombatSystem = Cast<ATurnBaseCombatV2>(GetWorld()->GetGameState());
CombatSystem->DamageEnemy(DamagePerTurn, "DOT");
BaseDuration -= 1.0f;
Super::OnEnemyTurn(Enemy, Character);
if (BaseDuration <= 0.0f)
{
OnExpiry(Character);

View File

@ -17,10 +17,10 @@ void UThorns::OnExpiry(AActor* Character)
void UThorns::OnEnemyTurn(AActor* Enemy, AActor* Character)
{
Super::OnEnemyTurn(Enemy, Character);
ATurnBaseCombatV2* CombatSystem = Cast<ATurnBaseCombatV2>(GetWorld()->GetGameState());
CombatSystem->DamageEnemy(DamagePerTurn, "thorns");
BaseDuration -= 1.0f;
Super::OnEnemyTurn(Enemy, Character);
if (BaseDuration <= 0.0f)
{
OnExpiry(Character);

View File

@ -55,7 +55,9 @@ 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->OnStatusEffectAdd();
NewStatusEffect.StatusEffect->OnStatusEffectAdd(GetOwner());
UTextBlock* StatusText = Cast<UTextBlock>(NewStatusEffect.StatusIcon->GetWidgetFromName(TEXT("DurationText")));
StatusText->SetText(FText::FromString(FString::FromInt(NewStatusEffect.TimeTillExpiry)));
if (Invoke) NewStatusEffect.StatusEffect->Invoke(GetOwner(), NewStatusEffect.TimeTillExpiry);
ActiveStatusEffects.Add(NewStatusEffect);