Updated Combat to Include Damage Stacking
This commit is contained in:
parent
15d2734c52
commit
32f20c12c3
BIN
Content/Blueprints/Combat_UI/BookCombat_UI.uasset
(Stored with Git LFS)
BIN
Content/Blueprints/Combat_UI/BookCombat_UI.uasset
(Stored with Git LFS)
Binary file not shown.
@ -36,6 +36,7 @@ void ATurnBaseCombatV2::StartCombat(AActor* Enemy)
|
||||
{
|
||||
if (Enemy == nullptr) return;
|
||||
if (bIsInCombat) return;
|
||||
BookHUD->SetVisibility(ESlateVisibility::SelfHitTestInvisible);
|
||||
EscapePercentage = CalculateEscapePercentage();
|
||||
EscapePercentageTextBlock->SetText(FText::Join(FText::FromString(""), FText::FromString(FString::FromInt(EscapePercentage * 100)), FText::FromString("%")));
|
||||
const FVector2D ViewportSize = FVector2D(GEngine->GameViewport->Viewport->GetSizeXY());
|
||||
@ -100,6 +101,8 @@ void ATurnBaseCombatV2::StartCombat(AActor* Enemy)
|
||||
|
||||
void ATurnBaseCombatV2::EndCombat()
|
||||
{
|
||||
BookHUD->SetVisibility(ESlateVisibility::Hidden);
|
||||
Cast<ATempCharacter>(PlayerActor)->ResetWidgetPointer();
|
||||
const FVector2D ViewportSize = FVector2D(GEngine->GameViewport->Viewport->GetSizeXY());
|
||||
TurnIndicatorTextBlock->SetText(FText::FromString(""));
|
||||
GetWorld()->GetFirstPlayerController()->SetMouseLocation(ViewportSize.X / 2, ViewportSize.Y / 2);
|
||||
@ -152,6 +155,7 @@ void ATurnBaseCombatV2::BeginPlay()
|
||||
CurrentComboTextBlock2 = Cast<UTextBlock>(BookHUD->GetWidgetFromName("CurrentCombo_2"));
|
||||
BattleLogTextBlock = Cast<UTextBlock>(HUD->GetWidgetFromName("BattleLog"));
|
||||
EscapePercentageTextBlock = Cast<UTextBlock>(BookHUD->GetWidgetFromName("EscapePercentage_Text"));
|
||||
DamageMultiplierTextBlock = Cast<UTextBlock>(BookHUD->GetWidgetFromName("DamageMultiplier_Text"));
|
||||
PlayerHealthBar = Cast<UProgressBar>(BookHUD->GetWidgetFromName("PlayerHealthBar"));
|
||||
EnemyHealthBar = Cast<UProgressBar>(HUD->GetWidgetFromName("EnemyHealthBar"));
|
||||
ProbertiumResourceBar = Cast<UProgressBar>(BookHUD->GetWidgetFromName("ProbertiumResourceBar"));
|
||||
@ -231,26 +235,27 @@ void ATurnBaseCombatV2::ExecuteCast(FString Combo)
|
||||
UNiagaraFunctionLibrary::SpawnSystemAtLocation(GetWorld(), GunEffect, GunLocationOffset, PlayerActor->GetActorRotation());
|
||||
}
|
||||
|
||||
if (ChainDamageMultiplier == 1) BaseDamageMultiplier = 1;
|
||||
if ((CurrentComboString == "II" || CurrentComboString == "PP" || CurrentComboString == "EE" || CurrentComboString == "AA") &&
|
||||
(PreviousComboString == "II" || PreviousComboString == "PP" || PreviousComboString == "EE" || PreviousComboString == "AA"))
|
||||
{
|
||||
ChainDamageMultiplier += 0.2;
|
||||
DamageMultiplierTextBlock->SetText(FText::Join(FText::FromString(""), FText::FromString("x"), FText::FromString(FString::SanitizeFloat(ChainDamageMultiplier))));
|
||||
}
|
||||
else if (CurrentComboString == "EI")
|
||||
{
|
||||
BaseDamageMultiplier = ChainDamageMultiplier;
|
||||
ChainDamageMultiplier = 1;
|
||||
DamageMultiplierTextBlock->SetText(FText::FromString(""));
|
||||
}
|
||||
|
||||
PreviousComboString = CurrentComboString;
|
||||
|
||||
CurrentComboString = "";
|
||||
UpdateComboString(CurrentComboString);
|
||||
RevertActionPoints();
|
||||
UpdateActionPoints();
|
||||
|
||||
//Damage Calculation
|
||||
switch (bIsPlayerTurn)
|
||||
{
|
||||
case true:
|
||||
// Player Turn
|
||||
DamageEnemy(*ValidCombos.Find(Combo));
|
||||
OnPlayerTurn.Broadcast(PlayerActor, EnemyActor);
|
||||
break;
|
||||
case false:
|
||||
// Enemy Turn
|
||||
DamagePlayer(*ValidCombos.Find(Combo));
|
||||
OnEnemyTurn.Broadcast(EnemyActor, PlayerActor);
|
||||
break;
|
||||
}
|
||||
|
||||
//Ends Combat if either the player or enemy is dead
|
||||
if (*EnemyHealth <= 0)
|
||||
{
|
||||
@ -266,6 +271,21 @@ void ATurnBaseCombatV2::ExecuteCast(FString Combo)
|
||||
return;
|
||||
}
|
||||
|
||||
//Damage Calculation
|
||||
switch (bIsPlayerTurn)
|
||||
{
|
||||
case true:
|
||||
// Player Turn
|
||||
DamageEnemy(*ValidCombos.Find(Combo));
|
||||
OnPlayerTurn.Broadcast(PlayerActor, EnemyActor);
|
||||
break;
|
||||
case false:
|
||||
// Enemy Turn
|
||||
DamagePlayer(*ValidCombos.Find(Combo));
|
||||
OnEnemyTurn.Broadcast(EnemyActor, PlayerActor);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!bPlayerHasExtraTurn)
|
||||
{
|
||||
SwitchTurn();
|
||||
@ -293,16 +313,16 @@ void ATurnBaseCombatV2::RevertActionPoints()
|
||||
|
||||
void ATurnBaseCombatV2::DamagePlayer(int Damage, FString DamageType)
|
||||
{
|
||||
*PlayerHealth -= FMath::Clamp(Damage, 0, 100);
|
||||
*PlayerHealth -= FMath::Clamp(Damage * BaseDefenseMultiplier, 0, 100);
|
||||
UpdateProgressBars();
|
||||
AddBattleLogMessage("Player was damaged for " + FString::FromInt(Damage) + " HP by " + DamageType + ".");
|
||||
AddBattleLogMessage("Player was damaged for " + FString::FromInt(Damage * BaseDefenseMultiplier) + " HP by " + DamageType + ".");
|
||||
}
|
||||
|
||||
void ATurnBaseCombatV2::DamageEnemy(int Damage, FString DamageType)
|
||||
{
|
||||
*EnemyHealth -= FMath::Clamp(Damage, 0, 100);
|
||||
*EnemyHealth -= FMath::Clamp(Damage * BaseDamageMultiplier, 0, 100);
|
||||
UpdateProgressBars();
|
||||
AddBattleLogMessage("Enemy was damaged for " + FString::FromInt(Damage) + " HP by " + DamageType + ".");
|
||||
AddBattleLogMessage("Enemy was damaged for " + FString::FromInt(Damage * BaseDamageMultiplier) + " HP by " + DamageType + ".");
|
||||
}
|
||||
|
||||
void ATurnBaseCombatV2::UpdateProgressBars() const
|
||||
|
@ -29,8 +29,15 @@ public:
|
||||
bool bIsInCombat = false;
|
||||
|
||||
UPROPERTY(EditDefaultsOnly)
|
||||
int DefaultActionPoints = 2;
|
||||
float BaseDamageMultiplier = 1.0f;
|
||||
UPROPERTY(EditDefaultsOnly)
|
||||
float BaseDefenseMultiplier = 1.0f;
|
||||
UPROPERTY()
|
||||
float ChainDamageMultiplier = 1.0f;
|
||||
|
||||
UPROPERTY(EditDefaultsOnly)
|
||||
int DefaultActionPoints = 2;
|
||||
UPROPERTY()
|
||||
int ActiveActionPoints = 0;
|
||||
|
||||
UPROPERTY(EditDefaultsOnly)
|
||||
@ -59,10 +66,7 @@ public:
|
||||
UUserWidget* CombatTutorialWidgetInstance;
|
||||
UPROPERTY()
|
||||
UWidgetComponent* PlayerWidget;
|
||||
/*
|
||||
TODO:
|
||||
Reference Player Inventory
|
||||
*/
|
||||
|
||||
UPROPERTY(EditAnywhere)
|
||||
TSubclassOf<UUserWidget> HUDWidget;
|
||||
UPROPERTY(EditAnywhere)
|
||||
@ -134,6 +138,8 @@ private:
|
||||
UPROPERTY(VisibleAnywhere)
|
||||
bool bIsPlayerTurn = true;
|
||||
|
||||
FString PreviousComboString = "";
|
||||
|
||||
UPROPERTY(VisibleAnywhere)
|
||||
FString CurrentComboString = "";
|
||||
|
||||
@ -151,6 +157,8 @@ private:
|
||||
UTextBlock* BattleLogTextBlock;
|
||||
UPROPERTY()
|
||||
UTextBlock* EscapePercentageTextBlock;
|
||||
UPROPERTY()
|
||||
UTextBlock* DamageMultiplierTextBlock;
|
||||
|
||||
UPROPERTY()
|
||||
UProgressBar* PlayerHealthBar;
|
||||
|
Loading…
Reference in New Issue
Block a user