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 (Enemy == nullptr) return;
|
||||||
if (bIsInCombat) return;
|
if (bIsInCombat) return;
|
||||||
|
BookHUD->SetVisibility(ESlateVisibility::SelfHitTestInvisible);
|
||||||
EscapePercentage = CalculateEscapePercentage();
|
EscapePercentage = CalculateEscapePercentage();
|
||||||
EscapePercentageTextBlock->SetText(FText::Join(FText::FromString(""), FText::FromString(FString::FromInt(EscapePercentage * 100)), FText::FromString("%")));
|
EscapePercentageTextBlock->SetText(FText::Join(FText::FromString(""), FText::FromString(FString::FromInt(EscapePercentage * 100)), FText::FromString("%")));
|
||||||
const FVector2D ViewportSize = FVector2D(GEngine->GameViewport->Viewport->GetSizeXY());
|
const FVector2D ViewportSize = FVector2D(GEngine->GameViewport->Viewport->GetSizeXY());
|
||||||
@ -100,6 +101,8 @@ void ATurnBaseCombatV2::StartCombat(AActor* Enemy)
|
|||||||
|
|
||||||
void ATurnBaseCombatV2::EndCombat()
|
void ATurnBaseCombatV2::EndCombat()
|
||||||
{
|
{
|
||||||
|
BookHUD->SetVisibility(ESlateVisibility::Hidden);
|
||||||
|
Cast<ATempCharacter>(PlayerActor)->ResetWidgetPointer();
|
||||||
const FVector2D ViewportSize = FVector2D(GEngine->GameViewport->Viewport->GetSizeXY());
|
const FVector2D ViewportSize = FVector2D(GEngine->GameViewport->Viewport->GetSizeXY());
|
||||||
TurnIndicatorTextBlock->SetText(FText::FromString(""));
|
TurnIndicatorTextBlock->SetText(FText::FromString(""));
|
||||||
GetWorld()->GetFirstPlayerController()->SetMouseLocation(ViewportSize.X / 2, ViewportSize.Y / 2);
|
GetWorld()->GetFirstPlayerController()->SetMouseLocation(ViewportSize.X / 2, ViewportSize.Y / 2);
|
||||||
@ -152,6 +155,7 @@ void ATurnBaseCombatV2::BeginPlay()
|
|||||||
CurrentComboTextBlock2 = Cast<UTextBlock>(BookHUD->GetWidgetFromName("CurrentCombo_2"));
|
CurrentComboTextBlock2 = Cast<UTextBlock>(BookHUD->GetWidgetFromName("CurrentCombo_2"));
|
||||||
BattleLogTextBlock = Cast<UTextBlock>(HUD->GetWidgetFromName("BattleLog"));
|
BattleLogTextBlock = Cast<UTextBlock>(HUD->GetWidgetFromName("BattleLog"));
|
||||||
EscapePercentageTextBlock = Cast<UTextBlock>(BookHUD->GetWidgetFromName("EscapePercentage_Text"));
|
EscapePercentageTextBlock = Cast<UTextBlock>(BookHUD->GetWidgetFromName("EscapePercentage_Text"));
|
||||||
|
DamageMultiplierTextBlock = Cast<UTextBlock>(BookHUD->GetWidgetFromName("DamageMultiplier_Text"));
|
||||||
PlayerHealthBar = Cast<UProgressBar>(BookHUD->GetWidgetFromName("PlayerHealthBar"));
|
PlayerHealthBar = Cast<UProgressBar>(BookHUD->GetWidgetFromName("PlayerHealthBar"));
|
||||||
EnemyHealthBar = Cast<UProgressBar>(HUD->GetWidgetFromName("EnemyHealthBar"));
|
EnemyHealthBar = Cast<UProgressBar>(HUD->GetWidgetFromName("EnemyHealthBar"));
|
||||||
ProbertiumResourceBar = Cast<UProgressBar>(BookHUD->GetWidgetFromName("ProbertiumResourceBar"));
|
ProbertiumResourceBar = Cast<UProgressBar>(BookHUD->GetWidgetFromName("ProbertiumResourceBar"));
|
||||||
@ -231,26 +235,27 @@ void ATurnBaseCombatV2::ExecuteCast(FString Combo)
|
|||||||
UNiagaraFunctionLibrary::SpawnSystemAtLocation(GetWorld(), GunEffect, GunLocationOffset, PlayerActor->GetActorRotation());
|
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 = "";
|
CurrentComboString = "";
|
||||||
UpdateComboString(CurrentComboString);
|
UpdateComboString(CurrentComboString);
|
||||||
RevertActionPoints();
|
RevertActionPoints();
|
||||||
UpdateActionPoints();
|
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
|
//Ends Combat if either the player or enemy is dead
|
||||||
if (*EnemyHealth <= 0)
|
if (*EnemyHealth <= 0)
|
||||||
{
|
{
|
||||||
@ -266,6 +271,21 @@ void ATurnBaseCombatV2::ExecuteCast(FString Combo)
|
|||||||
return;
|
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)
|
if (!bPlayerHasExtraTurn)
|
||||||
{
|
{
|
||||||
SwitchTurn();
|
SwitchTurn();
|
||||||
@ -293,16 +313,16 @@ void ATurnBaseCombatV2::RevertActionPoints()
|
|||||||
|
|
||||||
void ATurnBaseCombatV2::DamagePlayer(int Damage, FString DamageType)
|
void ATurnBaseCombatV2::DamagePlayer(int Damage, FString DamageType)
|
||||||
{
|
{
|
||||||
*PlayerHealth -= FMath::Clamp(Damage, 0, 100);
|
*PlayerHealth -= FMath::Clamp(Damage * BaseDefenseMultiplier, 0, 100);
|
||||||
UpdateProgressBars();
|
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)
|
void ATurnBaseCombatV2::DamageEnemy(int Damage, FString DamageType)
|
||||||
{
|
{
|
||||||
*EnemyHealth -= FMath::Clamp(Damage, 0, 100);
|
*EnemyHealth -= FMath::Clamp(Damage * BaseDamageMultiplier, 0, 100);
|
||||||
UpdateProgressBars();
|
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
|
void ATurnBaseCombatV2::UpdateProgressBars() const
|
||||||
|
@ -29,8 +29,15 @@ public:
|
|||||||
bool bIsInCombat = false;
|
bool bIsInCombat = false;
|
||||||
|
|
||||||
UPROPERTY(EditDefaultsOnly)
|
UPROPERTY(EditDefaultsOnly)
|
||||||
int DefaultActionPoints = 2;
|
float BaseDamageMultiplier = 1.0f;
|
||||||
UPROPERTY(EditDefaultsOnly)
|
UPROPERTY(EditDefaultsOnly)
|
||||||
|
float BaseDefenseMultiplier = 1.0f;
|
||||||
|
UPROPERTY()
|
||||||
|
float ChainDamageMultiplier = 1.0f;
|
||||||
|
|
||||||
|
UPROPERTY(EditDefaultsOnly)
|
||||||
|
int DefaultActionPoints = 2;
|
||||||
|
UPROPERTY()
|
||||||
int ActiveActionPoints = 0;
|
int ActiveActionPoints = 0;
|
||||||
|
|
||||||
UPROPERTY(EditDefaultsOnly)
|
UPROPERTY(EditDefaultsOnly)
|
||||||
@ -59,10 +66,7 @@ public:
|
|||||||
UUserWidget* CombatTutorialWidgetInstance;
|
UUserWidget* CombatTutorialWidgetInstance;
|
||||||
UPROPERTY()
|
UPROPERTY()
|
||||||
UWidgetComponent* PlayerWidget;
|
UWidgetComponent* PlayerWidget;
|
||||||
/*
|
|
||||||
TODO:
|
|
||||||
Reference Player Inventory
|
|
||||||
*/
|
|
||||||
UPROPERTY(EditAnywhere)
|
UPROPERTY(EditAnywhere)
|
||||||
TSubclassOf<UUserWidget> HUDWidget;
|
TSubclassOf<UUserWidget> HUDWidget;
|
||||||
UPROPERTY(EditAnywhere)
|
UPROPERTY(EditAnywhere)
|
||||||
@ -134,6 +138,8 @@ private:
|
|||||||
UPROPERTY(VisibleAnywhere)
|
UPROPERTY(VisibleAnywhere)
|
||||||
bool bIsPlayerTurn = true;
|
bool bIsPlayerTurn = true;
|
||||||
|
|
||||||
|
FString PreviousComboString = "";
|
||||||
|
|
||||||
UPROPERTY(VisibleAnywhere)
|
UPROPERTY(VisibleAnywhere)
|
||||||
FString CurrentComboString = "";
|
FString CurrentComboString = "";
|
||||||
|
|
||||||
@ -151,6 +157,8 @@ private:
|
|||||||
UTextBlock* BattleLogTextBlock;
|
UTextBlock* BattleLogTextBlock;
|
||||||
UPROPERTY()
|
UPROPERTY()
|
||||||
UTextBlock* EscapePercentageTextBlock;
|
UTextBlock* EscapePercentageTextBlock;
|
||||||
|
UPROPERTY()
|
||||||
|
UTextBlock* DamageMultiplierTextBlock;
|
||||||
|
|
||||||
UPROPERTY()
|
UPROPERTY()
|
||||||
UProgressBar* PlayerHealthBar;
|
UProgressBar* PlayerHealthBar;
|
||||||
|
Loading…
Reference in New Issue
Block a user