diff --git a/Content/Blueprints/Combat_UI/BookCombat_UI.uasset b/Content/Blueprints/Combat_UI/BookCombat_UI.uasset index 769cd4f..a84ab5a 100644 --- a/Content/Blueprints/Combat_UI/BookCombat_UI.uasset +++ b/Content/Blueprints/Combat_UI/BookCombat_UI.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0030dacfde336e729232b84b34bfa39e6b12baeeadedf973edcccfdbcf27d672 -size 120732 +oid sha256:db5917badce17c133c0356a6348cb612efa49fc7e8fa84a46ba093120ee30d48 +size 123554 diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp index 0dac807..713ca61 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp @@ -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(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(BookHUD->GetWidgetFromName("CurrentCombo_2")); BattleLogTextBlock = Cast(HUD->GetWidgetFromName("BattleLog")); EscapePercentageTextBlock = Cast(BookHUD->GetWidgetFromName("EscapePercentage_Text")); + DamageMultiplierTextBlock = Cast(BookHUD->GetWidgetFromName("DamageMultiplier_Text")); PlayerHealthBar = Cast(BookHUD->GetWidgetFromName("PlayerHealthBar")); EnemyHealthBar = Cast(HUD->GetWidgetFromName("EnemyHealthBar")); ProbertiumResourceBar = Cast(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 diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h index 80754d0..0380d07 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h @@ -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 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;