From 00a22d1c39f3cf6d8d8e7a9ae711669ed7a554fa Mon Sep 17 00:00:00 2001 From: Kacper Szelest Date: Mon, 24 Apr 2023 16:07:09 +0100 Subject: [PATCH 01/10] Changed tutorial text I shortened the text on the tutorial to condense it and not dump the player with text. --- Content/Blueprints/Combat_UI/CombatTutorial.uasset | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Content/Blueprints/Combat_UI/CombatTutorial.uasset b/Content/Blueprints/Combat_UI/CombatTutorial.uasset index 4d5595b..2d582fe 100644 --- a/Content/Blueprints/Combat_UI/CombatTutorial.uasset +++ b/Content/Blueprints/Combat_UI/CombatTutorial.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:105769fa75c92ede5d6755984d7e6ab2bb8a06f64de788b296dd59752966dab7 -size 59828 +oid sha256:914c41f8679a3e40527a4ba8ce4657bd1c92f8ecdf1c267620f1eb505aef67a9 +size 59448 From 0384c4977d7bbd06a64460345815f9d641877087 Mon Sep 17 00:00:00 2001 From: Kacper Szelest Date: Mon, 24 Apr 2023 16:08:45 +0100 Subject: [PATCH 02/10] Changed location of text int tutorial I changed the lovation of the text in the tutorial to fit the page better. --- Content/Blueprints/Combat_UI/CombatTutorial.uasset | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Content/Blueprints/Combat_UI/CombatTutorial.uasset b/Content/Blueprints/Combat_UI/CombatTutorial.uasset index 2d582fe..102833c 100644 --- a/Content/Blueprints/Combat_UI/CombatTutorial.uasset +++ b/Content/Blueprints/Combat_UI/CombatTutorial.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:914c41f8679a3e40527a4ba8ce4657bd1c92f8ecdf1c267620f1eb505aef67a9 -size 59448 +oid sha256:9e4e905636735097dd8236f8d76d106e084d61dc62ba8093ca5803ee9b49da64 +size 59478 From feea306d11ff62db2bed3ae16766492a2703493e Mon Sep 17 00:00:00 2001 From: PHILIP White Date: Tue, 25 Apr 2023 04:38:06 +0100 Subject: [PATCH 03/10] Updated Combat to Replace Old Combos --- .../TurnBasedCombatV2/TurnBaseCombatV2.cpp | 4 +-- .../TurnBasedCombatV2/TurnBaseCombatV2.h | 34 ++++++------------- 2 files changed, 13 insertions(+), 25 deletions(-) diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp index ae699e5..48fc123 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp @@ -208,14 +208,14 @@ void ATurnBaseCombatV2::ExecuteCast(FString Combo) if (IsSpecialCombo(Combo)) { UStatusSystem* StatusSystem = Cast(PlayerActor->GetComponentByClass(UStatusSystem::StaticClass())); - if (Combo == "AAE") + if (Combo == "PA") { UStatusEffect* TempThornsStatusEffect = NewObject(PlayerActor, ThornsStatusEffect); StatusSystem->AddStatusEffect(TempThornsStatusEffect, 1, false); StatusEffects.Add(TempThornsStatusEffect); AddBattleLogMessage("Player Casted Thorns"); } - else if (Combo == "PPI") + else if (Combo == "PI") { UStatusEffect* TempDOTStatusEffect = NewObject(PlayerActor, DOTStatusEffect); StatusSystem->AddStatusEffect(TempDOTStatusEffect, 1, false); diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h index cc3446e..830859d 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h @@ -72,34 +72,22 @@ public: UPROPERTY(EditAnywhere) TMap ValidCombos = { - {"P", 5}, - {"PP", 15}, - {"PPP", 20}, - {"E", 5}, - {"EE", 15}, - {"EEE", 20}, - {"A", 5}, - {"AA", 15}, - {"AAA", 20}, - {"I", 5}, - {"II", 15}, - {"III", 20}, - {"IA", 15}, - {"IIA", 20}, - {"EP", 15}, - {"EEP", 20}, - {"AE", 15}, - {"AAE", 20}, + {"PE", 15}, + {"PA", 15}, {"PI", 15}, - {"PPI", 20} + {"EA", 15}, + {"EI", 15}, + {"AI", 15}, + {"PP", 20}, + {"EE", 20}, + {"AA", 20}, + {"II", 20} }; UPROPERTY(EditAnywhere) TMap SpecialCombos = { - //{"IIA", "ReduceActSpeed"}, - //{"EEP", "AreaOfEffect"}, - {"AAE", "Thorns"}, - {"PPI", "DamageOverTime"} + {"PA", "Thorns"}, + {"PI", "DamageOverTime"} }; FString BattleLog; From f7c4fdac3faa7b5c6a1195a7a3672ee79efeb789 Mon Sep 17 00:00:00 2001 From: PHILIP White Date: Wed, 26 Apr 2023 02:10:01 +0100 Subject: [PATCH 04/10] Updated Combat to Include a Reload Effect --- .../Combat_UI/CombatCharacter.uasset | 4 +- .../Blueprints/Combat_UI/CombatInit.uasset | 4 +- .../TurnBasedCombatV2/HoldToInitCombat.cpp | 56 +++++++++---------- .../TurnBasedCombatV2/HoldToInitCombat.h | 17 ++++-- .../TurnBasedCombatV2/TurnBaseCombatV2.cpp | 2 +- .../TurnBasedCombatV2/TurnBaseCombatV2.h | 38 ++++++------- .../the_twilight_abyss.Build.cs | 2 +- 7 files changed, 61 insertions(+), 62 deletions(-) diff --git a/Content/Blueprints/Combat_UI/CombatCharacter.uasset b/Content/Blueprints/Combat_UI/CombatCharacter.uasset index bdcc2d3..69a4360 100644 --- a/Content/Blueprints/Combat_UI/CombatCharacter.uasset +++ b/Content/Blueprints/Combat_UI/CombatCharacter.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2288fc028031dde43dddc963534df07aabf9d878a4c0f0ae4c7bd2bc88b9be16 -size 142363 +oid sha256:1a2bddd56882aae8e60f9dd852ca2b7b1a5a3996871f9be2e8ebacc3d961b413 +size 142557 diff --git a/Content/Blueprints/Combat_UI/CombatInit.uasset b/Content/Blueprints/Combat_UI/CombatInit.uasset index 3c61b7c..9d7eec8 100644 --- a/Content/Blueprints/Combat_UI/CombatInit.uasset +++ b/Content/Blueprints/Combat_UI/CombatInit.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1a362f19c5501c2b4112c3e0e94d5ce56f0c0a09cd6f68dc798e7c9d303780b3 -size 28160 +oid sha256:a775d9f184f3cc994b611c19d229cb421849876734bf25b2c32a621203d348d2 +size 25308 diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.cpp index a4253a2..854f2ce 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.cpp @@ -28,10 +28,13 @@ void UHoldToInitCombat::BeginPlay() { Super::BeginPlay(); InitCombatWidget = CreateWidget(GetWorld(), InitCombatWidgetClass); + InitCombatWidget->AddToViewport(); + InitCombatWidget->SetVisibility(ESlateVisibility::Hidden); + + ReloadSlider = Cast(InitCombatWidget->GetWidgetFromName("ReloadSlider")); UInputComponent* PlayerInputComponent = GetWorld()->GetFirstPlayerController()->InputComponent; - PlayerInputComponent->BindAction("RightClick", IE_Pressed, this, &UHoldToInitCombat::OnRightClickDown); - PlayerInputComponent->BindAction("RightClick", IE_Released, this, &UHoldToInitCombat::OnRightClickUp); + PlayerInputComponent->BindAction("Click", IE_Pressed, this, &UHoldToInitCombat::OnClickDown); } @@ -39,35 +42,25 @@ void UHoldToInitCombat::BeginPlay() void UHoldToInitCombat::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) { Super::TickComponent(DeltaTime, TickType, ThisTickFunction); + if (ReloadTimer > 0.0f) + { + ReloadTimer -= DeltaTime; + ReloadSlider->SetValue(FMath::Clamp(ReloadTime - ReloadTimer, 0.f, ReloadTime) / ReloadTime); + } + else if (InitCombatWidget->GetVisibility() == ESlateVisibility::Visible) + { + InitCombatWidget->SetVisibility(ESlateVisibility::Hidden); + } - // if (bRightClickDown && RightClickDownTime < 0.1f) - // { - // RightClickDownTime += DeltaTime; - // } - // else if (bRightClickDown && RightClickDownTime >= 0.1f) - // { - // //Enter Combat Mode - // Cast(GetWorld()->GetGameState())->StartCombat(TargetEnemy); - // //UBlackboardComponent* TargetEnemyBlackboard = Cast(TargetEnemy->GetComponentByClass(UBlackboardComponent::StaticClass())); - // //TargetEnemyBlackboard->SetValueAsBool("IsInCombat", true); - // OnRightClickUp(); - // } - if (bRightClickDown) + if (bClickDown && TargetEnemy != nullptr) { Cast(GetWorld()->GetGameState())->StartCombat(TargetEnemy); - OnRightClickUp(); } } -void UHoldToInitCombat::OnRightClickDown() +void UHoldToInitCombat::OnClickDown() { - if (AActor* RightClickHit = LookingAtEnemy(); RightClickHit != nullptr) - { - TargetEnemy = RightClickHit; - bRightClickDown = true; - //InitCombatWidget->AddToViewport(); - } - + if (ReloadTimer > 0.0f) return; if (GunEffect) { const AActor* PlayerActor = GetWorld()->GetFirstPlayerController()->GetPawn(); @@ -75,16 +68,17 @@ void UHoldToInitCombat::OnRightClickDown() const FVector GunLocationOffset = GunComponent->GetSocketTransform("Muzzle").TransformPosition(FVector(-100, 0, 0)); UNiagaraFunctionLibrary::SpawnSystemAtLocation(GetWorld(), GunEffect, GunLocationOffset, PlayerActor->GetActorRotation()); } -} -void UHoldToInitCombat::OnRightClickUp() -{ - bRightClickDown = false; - RightClickDownTime = 0.0f; - if (InitCombatWidget->IsInViewport()) + if (AActor* ClickHit = LookingAtEnemy(); ClickHit != nullptr) { - InitCombatWidget->RemoveFromParent(); + TargetEnemy = ClickHit; + Cast(GetWorld()->GetGameState())->StartCombat(TargetEnemy); + InitCombatWidget->SetVisibility(ESlateVisibility::Hidden); + return; } + + ReloadTimer = ReloadTime; + InitCombatWidget->SetVisibility(ESlateVisibility::Visible); } AActor* UHoldToInitCombat::LookingAtEnemy() const diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.h b/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.h index 6ac7e3c..b72dfd8 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.h +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.h @@ -4,8 +4,8 @@ #include "CoreMinimal.h" #include "Components/ActorComponent.h" -#include "NiagaraComponent.h" #include "NiagaraFunctionLibrary.h" +#include "Components/RadialSlider.h" #include "HoldToInitCombat.generated.h" class UNiagaraSystem; @@ -26,6 +26,9 @@ public: UPROPERTY() UNiagaraSystem* GunEffect; + UPROPERTY(EditAnywhere) + float ReloadTime = 1.0f; + protected: // Called when the game starts virtual void BeginPlay() override; @@ -35,12 +38,14 @@ public: virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override; private: - void OnRightClickDown(); - void OnRightClickUp(); - bool bRightClickDown = false; - float RightClickDownTime = 0.0f; - + void OnClickDown(); + bool bClickDown = false; + float ReloadTimer = 0.0f; + UFUNCTION() AActor* LookingAtEnemy() const; AActor* TargetEnemy = nullptr; + + UPROPERTY() + URadialSlider* ReloadSlider; }; diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp index 48fc123..0dac807 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp @@ -224,7 +224,7 @@ void ATurnBaseCombatV2::ExecuteCast(FString Combo) } } - if (GunEffect && !bIsInCombat) + if (GunEffect) { const UStaticMeshComponent* GunComponent = Cast(PlayerActor->GetComponentsByTag(UPrimitiveComponent::StaticClass(), FName("Gun"))[0]); const FVector GunLocationOffset = GunComponent->GetSocketTransform("Muzzle").TransformPosition(FVector(-100, 0, 0)); diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h index 830859d..80754d0 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h @@ -139,48 +139,48 @@ private: void SwitchTurn(); - UPROPERTY(VisibleAnywhere) + UPROPERTY() UTextBlock* TurnIndicatorTextBlock; - UPROPERTY(VisibleAnywhere) + UPROPERTY() UTextBlock* CurrentComboTextBlock; - UPROPERTY(VisibleAnywhere) + UPROPERTY() UTextBlock* CurrentComboTextBlock1; - UPROPERTY(VisibleAnywhere) + UPROPERTY() UTextBlock* CurrentComboTextBlock2; - UPROPERTY(VisibleAnywhere) + UPROPERTY() UTextBlock* BattleLogTextBlock; - UPROPERTY(VisibleAnywhere) + UPROPERTY() UTextBlock* EscapePercentageTextBlock; - UPROPERTY(VisibleAnywhere) + UPROPERTY() UProgressBar* PlayerHealthBar; - UPROPERTY(VisibleAnywhere) + UPROPERTY() UProgressBar* EnemyHealthBar; - UPROPERTY(VisibleAnywhere) + UPROPERTY() UProgressBar* ProbertiumResourceBar; - UPROPERTY(VisibleAnywhere) + UPROPERTY() UProgressBar* EisResourceBar; - UPROPERTY(VisibleAnywhere) + UPROPERTY() UProgressBar* AzosResourceBar; - UPROPERTY(VisibleAnywhere) + UPROPERTY() UProgressBar* IroquoidResourceBar; - UPROPERTY(VisibleAnywhere) + UPROPERTY() UButton* CastButton; - UPROPERTY(VisibleAnywhere) + UPROPERTY() UButton* PButton; - UPROPERTY(VisibleAnywhere) + UPROPERTY() UButton* EButton; - UPROPERTY(VisibleAnywhere) + UPROPERTY() UButton* AButton; - UPROPERTY(VisibleAnywhere) + UPROPERTY() UButton* IButton; - UPROPERTY(VisibleAnywhere) + UPROPERTY() UButton* BackspaceButton; - UPROPERTY(VisibleAnywhere) + UPROPERTY() UButton* RunButton; UFUNCTION() diff --git a/Source/the_twilight_abyss/the_twilight_abyss.Build.cs b/Source/the_twilight_abyss/the_twilight_abyss.Build.cs index 53967db..9d9a118 100644 --- a/Source/the_twilight_abyss/the_twilight_abyss.Build.cs +++ b/Source/the_twilight_abyss/the_twilight_abyss.Build.cs @@ -10,7 +10,7 @@ public class the_twilight_abyss : ModuleRules PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "UMG", "Niagara", "AIModule", "Json" }); - PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" }); + PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore", "AdvancedWidgets" }); // Uncomment if you are using Slate UI // PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" }); From 0c13de4668f711fdb8f1306ff6d4b1467d927b86 Mon Sep 17 00:00:00 2001 From: PHILIP White Date: Wed, 26 Apr 2023 03:22:13 +0100 Subject: [PATCH 05/10] Bugfix BindAction Consuming Left Mouse Input --- Content/Blueprints/Combat_UI/CombatCharacter.uasset | 4 ++-- .../the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.cpp | 4 +--- .../the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.h | 4 +++- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Content/Blueprints/Combat_UI/CombatCharacter.uasset b/Content/Blueprints/Combat_UI/CombatCharacter.uasset index 69a4360..a9219a1 100644 --- a/Content/Blueprints/Combat_UI/CombatCharacter.uasset +++ b/Content/Blueprints/Combat_UI/CombatCharacter.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1a2bddd56882aae8e60f9dd852ca2b7b1a5a3996871f9be2e8ebacc3d961b413 -size 142557 +oid sha256:f25c0c81bbb9b3c94eb649742dd64e21d3c91ab9345fdda91d35be4066f0b323 +size 146352 diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.cpp index 854f2ce..f9fd522 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.cpp @@ -32,9 +32,6 @@ void UHoldToInitCombat::BeginPlay() InitCombatWidget->SetVisibility(ESlateVisibility::Hidden); ReloadSlider = Cast(InitCombatWidget->GetWidgetFromName("ReloadSlider")); - - UInputComponent* PlayerInputComponent = GetWorld()->GetFirstPlayerController()->InputComponent; - PlayerInputComponent->BindAction("Click", IE_Pressed, this, &UHoldToInitCombat::OnClickDown); } @@ -60,6 +57,7 @@ void UHoldToInitCombat::TickComponent(float DeltaTime, ELevelTick TickType, FAct void UHoldToInitCombat::OnClickDown() { + if (Cast(GetWorld()->GetGameState())->bIsInCombat) return; if (ReloadTimer > 0.0f) return; if (GunEffect) { diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.h b/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.h index b72dfd8..c24e4a3 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.h +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.h @@ -29,6 +29,9 @@ public: UPROPERTY(EditAnywhere) float ReloadTime = 1.0f; + UFUNCTION(BlueprintCallable) + void OnClickDown(); + protected: // Called when the game starts virtual void BeginPlay() override; @@ -38,7 +41,6 @@ public: virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override; private: - void OnClickDown(); bool bClickDown = false; float ReloadTimer = 0.0f; From 15d2734c52aaa9c813bacb00267b7f5658d03b6a Mon Sep 17 00:00:00 2001 From: PHILIP White Date: Wed, 26 Apr 2023 03:51:17 +0100 Subject: [PATCH 06/10] Bugfix Pointer Retaining Position After Combat Has Ended --- Content/Blueprints/Combat_UI/CombatCharacter.uasset | 4 ++-- Source/the_twilight_abyss/PlayerTemp/TempCharacter.cpp | 5 +++++ Source/the_twilight_abyss/PlayerTemp/TempCharacter.h | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Content/Blueprints/Combat_UI/CombatCharacter.uasset b/Content/Blueprints/Combat_UI/CombatCharacter.uasset index a9219a1..81d6e54 100644 --- a/Content/Blueprints/Combat_UI/CombatCharacter.uasset +++ b/Content/Blueprints/Combat_UI/CombatCharacter.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f25c0c81bbb9b3c94eb649742dd64e21d3c91ab9345fdda91d35be4066f0b323 -size 146352 +oid sha256:b14e899d3b8f72c09561fe40dd1bd18fc9f1120cefc74619dd51d9c808f4b226 +size 146591 diff --git a/Source/the_twilight_abyss/PlayerTemp/TempCharacter.cpp b/Source/the_twilight_abyss/PlayerTemp/TempCharacter.cpp index 08a54d2..f45d69a 100644 --- a/Source/the_twilight_abyss/PlayerTemp/TempCharacter.cpp +++ b/Source/the_twilight_abyss/PlayerTemp/TempCharacter.cpp @@ -94,6 +94,11 @@ void ATempCharacter::Sneak() } +void ATempCharacter::ResetWidgetPointer() const +{ + WidgetPointer->SetWorldLocationAndRotation(FVector(0, 0, 0), FRotator(0, 0, 0).Quaternion()); +} + // Called every frame void ATempCharacter::Tick(float DeltaTime) { diff --git a/Source/the_twilight_abyss/PlayerTemp/TempCharacter.h b/Source/the_twilight_abyss/PlayerTemp/TempCharacter.h index 06d50f0..3463954 100644 --- a/Source/the_twilight_abyss/PlayerTemp/TempCharacter.h +++ b/Source/the_twilight_abyss/PlayerTemp/TempCharacter.h @@ -19,6 +19,7 @@ class THE_TWILIGHT_ABYSS_API ATempCharacter : public ACharacter public: // Sets default values for this character's properties ATempCharacter(); + void ResetWidgetPointer() const; protected: // Called when the game starts or when spawned From 32f20c12c3cdd427f213d0c479739a47ea4da74e Mon Sep 17 00:00:00 2001 From: PHILIP White Date: Wed, 26 Apr 2023 03:52:22 +0100 Subject: [PATCH 07/10] Updated Combat to Include Damage Stacking --- .../Blueprints/Combat_UI/BookCombat_UI.uasset | 4 +- .../TurnBasedCombatV2/TurnBaseCombatV2.cpp | 58 +++++++++++++------ .../TurnBasedCombatV2/TurnBaseCombatV2.h | 18 ++++-- 3 files changed, 54 insertions(+), 26 deletions(-) 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; From 5634557af2cd878592a4b9256536620aee04fbc1 Mon Sep 17 00:00:00 2001 From: PHILIP White Date: Wed, 26 Apr 2023 05:28:02 +0100 Subject: [PATCH 08/10] Bugfix Game End on Player Death & Lock Combat on Tutorial --- .../Blueprints/Combat_UI/BookCombat_UI.uasset | 4 +- .../Combat_UI/CombatCharacter.uasset | 4 +- .../Combat_UI/CombatTutorial.uasset | 4 +- .../TurnBasedCombatV2/TurnBaseCombatV2.cpp | 148 +++++++++++------- .../TurnBasedCombatV2/TurnBaseCombatV2.h | 10 +- 5 files changed, 107 insertions(+), 63 deletions(-) diff --git a/Content/Blueprints/Combat_UI/BookCombat_UI.uasset b/Content/Blueprints/Combat_UI/BookCombat_UI.uasset index a84ab5a..6de1978 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:db5917badce17c133c0356a6348cb612efa49fc7e8fa84a46ba093120ee30d48 -size 123554 +oid sha256:ca7bf22c8b47c3e70ba53db3687e8d2d7eee77fa3e5d007ad10725be44b19bac +size 123309 diff --git a/Content/Blueprints/Combat_UI/CombatCharacter.uasset b/Content/Blueprints/Combat_UI/CombatCharacter.uasset index 81d6e54..e554a28 100644 --- a/Content/Blueprints/Combat_UI/CombatCharacter.uasset +++ b/Content/Blueprints/Combat_UI/CombatCharacter.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b14e899d3b8f72c09561fe40dd1bd18fc9f1120cefc74619dd51d9c808f4b226 -size 146591 +oid sha256:0937bad3411c906cc07f2119c01387e47590336e0c4c8610b975222ea79d5e3a +size 146662 diff --git a/Content/Blueprints/Combat_UI/CombatTutorial.uasset b/Content/Blueprints/Combat_UI/CombatTutorial.uasset index 102833c..3b2e409 100644 --- a/Content/Blueprints/Combat_UI/CombatTutorial.uasset +++ b/Content/Blueprints/Combat_UI/CombatTutorial.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9e4e905636735097dd8236f8d76d106e084d61dc62ba8093ca5803ee9b49da64 -size 59478 +oid sha256:3902cdce2b55bc5f3715dab3d64f5dea287cb52481e8e12d47c4392b4dd5793f +size 64715 diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp index 713ca61..9609c99 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp @@ -35,47 +35,14 @@ ATurnBaseCombatV2::ATurnBaseCombatV2() void ATurnBaseCombatV2::StartCombat(AActor* Enemy) { if (Enemy == nullptr) return; + EnemyActor = Enemy; 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()); - GetWorld()->GetFirstPlayerController()->SetMouseLocation(ViewportSize.X / 2, ViewportSize.Y / 2); bIsInCombat = true; UBlackboardComponent* EnemyBlackboard = Cast(Enemy->GetInstigatorController())->GetBlackboardComponent(); - if (!HasSeenTutorial) - { - ToggleButtons(); - CombatTutorialWidgetInstance = CreateWidget(GetWorld(), CombatTutorialWidget); - CombatTutorialWidgetInstance->AddToViewport(); - HasSeenTutorial = true; - } - - if (EnemyBlackboard->GetValueAsBool("IsInCombat")) return; - EnemyBlackboard->SetValueAsBool("IsInCombat", true); - FProperty* HealthProperty = Enemy->GetClass()->FindPropertyByName(FName("Health")); - int32* EnemyHealthPtr = HealthProperty->ContainerPtrToValuePtr(Enemy); - EnemyHealth = EnemyHealthPtr; - - if (EnemyBlackboard->GetValueAsBool("Sight")) - { - //bEnemyHasExtraTurn = true; - SwitchTurn(); - } - else - { - bPlayerHasExtraTurn = true; - } - - if (HUD->IsInViewport()) return; - //HUD->AddToViewport(); - EnemyActor = Enemy; - - ProbertiumResource = 10; - EisResource = 10; - AzosResource = 10; - IroquoidResource = 10; - + //Disable Character Movement APlayerController* PlayerController = GetWorld()->GetFirstPlayerController(); PlayerController->SetIgnoreMoveInput(true); @@ -89,23 +56,59 @@ void ATurnBaseCombatV2::StartCombat(AActor* Enemy) LookAtRotation.Pitch = -9.0f; PlayerController->SetControlRotation(LookAtRotation); - //DrawDebugPoint(GetWorld(), Enemy->GetActorLocation(), 10, FColor::Red, false, 10); + if (EnemyBlackboard->GetValueAsBool("IsInCombat")) return; + EnemyBlackboard->SetValueAsBool("IsInCombat", true); + FProperty* HealthProperty = Enemy->GetClass()->FindPropertyByName(FName("Health")); + int32* EnemyHealthPtr = HealthProperty->ContainerPtrToValuePtr(Enemy); + EnemyHealth = EnemyHealthPtr; + + if (IsValid(CombatTutorialWidgetInstance) && CombatTutorialWidgetInstance->IsInViewport()) return; + if (!HasSeenTutorial) + { + DisableButtons(); + CombatTutorialWidgetInstance->AddToViewport(); + HasSeenTutorial = true; + return; + } + CombatCheck(); + //DrawDebugPoint(GetWorld(), Enemy->GetActorLocation(), 10, FColor::Red, false, 10); +} + +void ATurnBaseCombatV2::CombatCheck() +{ + const UBlackboardComponent* EnemyBlackboard = Cast(EnemyActor->GetInstigatorController())->GetBlackboardComponent(); + + //TODO: REMOVE THIS + ProbertiumResource = 10; + EisResource = 10; + AzosResource = 10; + IroquoidResource = 10; + CurrentComboString = ""; UpdateComboString(CurrentComboString); RevertActionPoints(); UpdateActionPoints(); UpdateResourceBars(); ClearBattleLog(); + EnableButtons(); + + if (EnemyBlackboard->GetValueAsBool("Sight")) + { + //bEnemyHasExtraTurn = true; + SwitchTurn(); + } + else + { + bPlayerHasExtraTurn = true; + } } 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); bEnemyHasExtraTurn = false; bPlayerHasExtraTurn = false; bIsInCombat = false; @@ -130,8 +133,6 @@ void ATurnBaseCombatV2::EndCombat() void ATurnBaseCombatV2::BeginPlay() { Super::BeginPlay(); - const FVector2D ViewportSize = FVector2D(GEngine->GameViewport->Viewport->GetSizeXY()); - GetWorld()->GetFirstPlayerController()->SetMouseLocation(ViewportSize.X / 2, ViewportSize.Y / 2); TArray AllCharacterActorsInScene; @@ -142,6 +143,7 @@ void ATurnBaseCombatV2::BeginPlay() } PlayerHealth = &Cast(PlayerActor)->Health; + CombatTutorialWidgetInstance = CreateWidget(GetWorld(), CombatTutorialWidget); HUD = CreateWidget(GetWorld(), HUDWidget); TArray PlayerChildActors; PlayerActor->GetAllChildActors(PlayerChildActors, false); @@ -256,21 +258,6 @@ void ATurnBaseCombatV2::ExecuteCast(FString Combo) RevertActionPoints(); UpdateActionPoints(); - //Ends Combat if either the player or enemy is dead - if (*EnemyHealth <= 0) - { - EndCombat(); - EnemyActor->Destroy(); - return; - } - if (*PlayerHealth <= 0) - { - //EndCombat(); - DeathScreenWidget = CreateWidget(GetWorld(), DeathScreenWidgetSubclass); - DeathScreenWidget->AddToViewport(); - return; - } - //Damage Calculation switch (bIsPlayerTurn) { @@ -316,6 +303,20 @@ void ATurnBaseCombatV2::DamagePlayer(int Damage, FString DamageType) *PlayerHealth -= FMath::Clamp(Damage * BaseDefenseMultiplier, 0, 100); UpdateProgressBars(); AddBattleLogMessage("Player was damaged for " + FString::FromInt(Damage * BaseDefenseMultiplier) + " HP by " + DamageType + "."); + //Ends Combat if either the player or enemy is dead + if (*EnemyHealth <= 0) + { + EndCombat(); + EnemyActor->Destroy(); + return; + } + if (*PlayerHealth <= 0) + { + //EndCombat(); + DeathScreenWidget = CreateWidget(GetWorld(), DeathScreenWidgetSubclass); + DeathScreenWidget->AddToViewport(); + return; + } } void ATurnBaseCombatV2::DamageEnemy(int Damage, FString DamageType) @@ -323,6 +324,20 @@ void ATurnBaseCombatV2::DamageEnemy(int Damage, FString DamageType) *EnemyHealth -= FMath::Clamp(Damage * BaseDamageMultiplier, 0, 100); UpdateProgressBars(); AddBattleLogMessage("Enemy was damaged for " + FString::FromInt(Damage * BaseDamageMultiplier) + " HP by " + DamageType + "."); + //Ends Combat if either the player or enemy is dead + if (*EnemyHealth <= 0) + { + EndCombat(); + EnemyActor->Destroy(); + return; + } + if (*PlayerHealth <= 0) + { + //EndCombat(); + DeathScreenWidget = CreateWidget(GetWorld(), DeathScreenWidgetSubclass); + DeathScreenWidget->AddToViewport(); + return; + } } void ATurnBaseCombatV2::UpdateProgressBars() const @@ -501,6 +516,7 @@ void ATurnBaseCombatV2::RunButtonOnClick() SwitchTurn(); return; } + GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, TEXT("Escape Successful")); UBlackboardComponent* EnemyBlackboard = Cast(EnemyActor->GetInstigatorController())->GetBlackboardComponent(); EscapePercentageTextBlock->SetText(FText::Join(FText::FromString(""), FText::FromString("--"), FText::FromString("%"))); EnemyBlackboard->SetValueAsBool("IsInCombat", false); @@ -571,6 +587,28 @@ void ATurnBaseCombatV2::ToggleButtons() const RunButton->SetIsEnabled(!RunButton->GetIsEnabled()); } +void ATurnBaseCombatV2::DisableButtons() const +{ + PButton->SetIsEnabled(false); + EButton->SetIsEnabled(false); + AButton->SetIsEnabled(false); + IButton->SetIsEnabled(false); + BackspaceButton->SetIsEnabled(false); + CastButton->SetIsEnabled(false); + RunButton->SetIsEnabled(false); +} + +void ATurnBaseCombatV2::EnableButtons() const +{ + PButton->SetIsEnabled(true); + EButton->SetIsEnabled(true); + AButton->SetIsEnabled(true); + IButton->SetIsEnabled(true); + BackspaceButton->SetIsEnabled(true); + CastButton->SetIsEnabled(true); + RunButton->SetIsEnabled(true); +} + void ATurnBaseCombatV2::EnemyTurn() { DamagePlayer(10); diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h index 0380d07..9bd7367 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h @@ -54,7 +54,7 @@ public: UPROPERTY(VisibleAnywhere) AActor* PlayerActor; - UPROPERTY(VisibleAnywhere) + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) AActor* EnemyActor; // AActor* ActiveActor; UPROPERTY(BlueprintReadWrite) @@ -71,7 +71,7 @@ public: TSubclassOf HUDWidget; UPROPERTY(EditAnywhere) TSubclassOf CombatTutorialWidget; - UPROPERTY() + UPROPERTY(BlueprintReadWrite) bool HasSeenTutorial = false; UPROPERTY(EditAnywhere) TMap ValidCombos = @@ -99,6 +99,8 @@ public: UFUNCTION(BlueprintCallable) void StartCombat(AActor* Enemy); UFUNCTION(BlueprintCallable) + void CombatCheck(); + UFUNCTION(BlueprintCallable) void EndCombat(); DECLARE_EVENT_TwoParams(ATurnBaseCombatV2, FOnPlayerTurn, AActor*, AActor*); @@ -217,6 +219,10 @@ private: void UpdateResourceBars() const; UFUNCTION(BlueprintCallable) void ToggleButtons() const; + UFUNCTION(BlueprintCallable) + void DisableButtons() const; + UFUNCTION(BlueprintCallable) + void EnableButtons() const; void EnemyTurn(); UPROPERTY() From 37268a3dc2fd31ecf629214d6fa1cf1fdca06a32 Mon Sep 17 00:00:00 2001 From: PHILIP White Date: Wed, 26 Apr 2023 05:51:07 +0100 Subject: [PATCH 09/10] Bugfix Unable to Escape in Some Situations --- Content/BlueprintAI/AI/AIBruh.uasset | 4 ++-- .../TurnBasedCombatV2/HoldToInitCombat.cpp | 10 +++++++++- .../TurnBasedCombatV2/HoldToInitCombat.h | 3 +++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/Content/BlueprintAI/AI/AIBruh.uasset b/Content/BlueprintAI/AI/AIBruh.uasset index 0b9fbcb..427fe28 100644 --- a/Content/BlueprintAI/AI/AIBruh.uasset +++ b/Content/BlueprintAI/AI/AIBruh.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:584aedc80008c87b7f98a2ecfcf05b9093863d61f10acb95ed575a00914e7c6c -size 80816 +oid sha256:300e621b880bc7c6a608256b218af1095b93829767a940cfe574e2e0814c81f4 +size 90153 diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.cpp index f9fd522..a699be0 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.cpp @@ -2,7 +2,10 @@ #include "HoldToInitCombat.h" + +#include "AIController.h" #include "TurnBaseCombatV2.h" +#include "BehaviorTree/BlackboardComponent.h" #include "Blueprint/UserWidget.h" @@ -70,7 +73,12 @@ void UHoldToInitCombat::OnClickDown() if (AActor* ClickHit = LookingAtEnemy(); ClickHit != nullptr) { TargetEnemy = ClickHit; - Cast(GetWorld()->GetGameState())->StartCombat(TargetEnemy); + EnemyBlackboard = Cast(TargetEnemy->GetInstigatorController())->GetBlackboardComponent(); + if (!EnemyBlackboard->GetValueAsBool("WasInCombat")) + { + Cast(GetWorld()->GetGameState())->StartCombat(TargetEnemy); + return; + } InitCombatWidget->SetVisibility(ESlateVisibility::Hidden); return; } diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.h b/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.h index c24e4a3..e94c410 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.h +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.h @@ -6,6 +6,7 @@ #include "Components/ActorComponent.h" #include "NiagaraFunctionLibrary.h" #include "Components/RadialSlider.h" +#include "BehaviorTree/BlackboardComponent.h" #include "HoldToInitCombat.generated.h" class UNiagaraSystem; @@ -35,6 +36,8 @@ public: protected: // Called when the game starts virtual void BeginPlay() override; + UPROPERTY() + UBlackboardComponent* EnemyBlackboard; public: // Called every frame From 4f336263fbe035dcb2a37c882e4ba1d0d2bce404 Mon Sep 17 00:00:00 2001 From: PHILIP White Date: Wed, 26 Apr 2023 06:21:08 +0100 Subject: [PATCH 10/10] Bugfix Enemy Always Started First --- Content/BlueprintAI/AI/AIBruh.uasset | 4 ++-- .../TurnBasedCombatV2/HoldToInitCombat.cpp | 2 +- .../TurnBasedCombatV2/TurnBaseCombatV2.cpp | 19 +++++++++++-------- .../TurnBasedCombatV2/TurnBaseCombatV2.h | 4 ++-- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/Content/BlueprintAI/AI/AIBruh.uasset b/Content/BlueprintAI/AI/AIBruh.uasset index 427fe28..f599c59 100644 --- a/Content/BlueprintAI/AI/AIBruh.uasset +++ b/Content/BlueprintAI/AI/AIBruh.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:300e621b880bc7c6a608256b218af1095b93829767a940cfe574e2e0814c81f4 -size 90153 +oid sha256:1a5b12edd0d92e0740ce9b6cba738992d981e85247c6779896ab36d7ba46dbb7 +size 90680 diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.cpp index a699be0..513d062 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.cpp @@ -76,7 +76,7 @@ void UHoldToInitCombat::OnClickDown() EnemyBlackboard = Cast(TargetEnemy->GetInstigatorController())->GetBlackboardComponent(); if (!EnemyBlackboard->GetValueAsBool("WasInCombat")) { - Cast(GetWorld()->GetGameState())->StartCombat(TargetEnemy); + Cast(GetWorld()->GetGameState())->StartCombat(TargetEnemy, true); return; } InitCombatWidget->SetVisibility(ESlateVisibility::Hidden); diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp index 9609c99..eec5d2c 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp @@ -32,7 +32,7 @@ ATurnBaseCombatV2::ATurnBaseCombatV2() } } -void ATurnBaseCombatV2::StartCombat(AActor* Enemy) +void ATurnBaseCombatV2::StartCombat(AActor* Enemy, bool bWasShot) { if (Enemy == nullptr) return; EnemyActor = Enemy; @@ -42,7 +42,7 @@ void ATurnBaseCombatV2::StartCombat(AActor* Enemy) EscapePercentageTextBlock->SetText(FText::Join(FText::FromString(""), FText::FromString(FString::FromInt(EscapePercentage * 100)), FText::FromString("%"))); bIsInCombat = true; UBlackboardComponent* EnemyBlackboard = Cast(Enemy->GetInstigatorController())->GetBlackboardComponent(); - + //Disable Character Movement APlayerController* PlayerController = GetWorld()->GetFirstPlayerController(); PlayerController->SetIgnoreMoveInput(true); @@ -61,7 +61,7 @@ void ATurnBaseCombatV2::StartCombat(AActor* Enemy) FProperty* HealthProperty = Enemy->GetClass()->FindPropertyByName(FName("Health")); int32* EnemyHealthPtr = HealthProperty->ContainerPtrToValuePtr(Enemy); EnemyHealth = EnemyHealthPtr; - + if (IsValid(CombatTutorialWidgetInstance) && CombatTutorialWidgetInstance->IsInViewport()) return; if (!HasSeenTutorial) { @@ -71,11 +71,11 @@ void ATurnBaseCombatV2::StartCombat(AActor* Enemy) return; } - CombatCheck(); + CombatCheck(bWasShot); //DrawDebugPoint(GetWorld(), Enemy->GetActorLocation(), 10, FColor::Red, false, 10); } -void ATurnBaseCombatV2::CombatCheck() +void ATurnBaseCombatV2::CombatCheck(bool bWasShot) { const UBlackboardComponent* EnemyBlackboard = Cast(EnemyActor->GetInstigatorController())->GetBlackboardComponent(); @@ -84,7 +84,7 @@ void ATurnBaseCombatV2::CombatCheck() EisResource = 10; AzosResource = 10; IroquoidResource = 10; - + CurrentComboString = ""; UpdateComboString(CurrentComboString); RevertActionPoints(); @@ -93,15 +93,18 @@ void ATurnBaseCombatV2::CombatCheck() ClearBattleLog(); EnableButtons(); - if (EnemyBlackboard->GetValueAsBool("Sight")) + FProperty* ReactionSpeedProperty = EnemyActor->GetClass()->FindPropertyByName(FName("ReactionSpeed")); + float* EnemyReactionSpeedPtr = ReactionSpeedProperty->ContainerPtrToValuePtr(EnemyActor); + if (EnemyBlackboard->GetValueAsBool("Sight") && !bWasShot) { //bEnemyHasExtraTurn = true; SwitchTurn(); } - else + else if (Cast(PlayerActor)->ReactionSpeed > *EnemyReactionSpeedPtr && bWasShot) { bPlayerHasExtraTurn = true; } + TurnIndicatorTextBlock->SetText(FText::FromString("Player Turn")); } void ATurnBaseCombatV2::EndCombat() diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h index 9bd7367..bf780b0 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.h @@ -97,9 +97,9 @@ public: FString BattleLog; UFUNCTION(BlueprintCallable) - void StartCombat(AActor* Enemy); + void StartCombat(AActor* Enemy, bool bWasShot = false); UFUNCTION(BlueprintCallable) - void CombatCheck(); + void CombatCheck(bool bWasShot = false); UFUNCTION(BlueprintCallable) void EndCombat();