diff --git a/Content/BlueprintAI/AI/AIBruh.uasset b/Content/BlueprintAI/AI/AIBruh.uasset index 0b9fbcb..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:584aedc80008c87b7f98a2ecfcf05b9093863d61f10acb95ed575a00914e7c6c -size 80816 +oid sha256:1a5b12edd0d92e0740ce9b6cba738992d981e85247c6779896ab36d7ba46dbb7 +size 90680 diff --git a/Content/Blueprints/Combat_UI/BookCombat_UI.uasset b/Content/Blueprints/Combat_UI/BookCombat_UI.uasset index 769cd4f..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:0030dacfde336e729232b84b34bfa39e6b12baeeadedf973edcccfdbcf27d672 -size 120732 +oid sha256:ca7bf22c8b47c3e70ba53db3687e8d2d7eee77fa3e5d007ad10725be44b19bac +size 123309 diff --git a/Content/Blueprints/Combat_UI/CombatCharacter.uasset b/Content/Blueprints/Combat_UI/CombatCharacter.uasset index bdcc2d3..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:2288fc028031dde43dddc963534df07aabf9d878a4c0f0ae4c7bd2bc88b9be16 -size 142363 +oid sha256:0937bad3411c906cc07f2119c01387e47590336e0c4c8610b975222ea79d5e3a +size 146662 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/Content/Blueprints/Combat_UI/CombatTutorial.uasset b/Content/Blueprints/Combat_UI/CombatTutorial.uasset index 72bdb4a..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:4b4aab87269ca504b3c501ffc37ba58bcffa14975659fa61a31239fc365a0f1d -size 59827 +oid sha256:3902cdce2b55bc5f3715dab3d64f5dea287cb52481e8e12d47c4392b4dd5793f +size 64715 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 diff --git a/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.cpp b/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.cpp index a4253a2..513d062 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" @@ -28,10 +31,10 @@ void UHoldToInitCombat::BeginPlay() { Super::BeginPlay(); InitCombatWidget = CreateWidget(GetWorld(), InitCombatWidgetClass); + InitCombatWidget->AddToViewport(); + InitCombatWidget->SetVisibility(ESlateVisibility::Hidden); - UInputComponent* PlayerInputComponent = GetWorld()->GetFirstPlayerController()->InputComponent; - PlayerInputComponent->BindAction("RightClick", IE_Pressed, this, &UHoldToInitCombat::OnRightClickDown); - PlayerInputComponent->BindAction("RightClick", IE_Released, this, &UHoldToInitCombat::OnRightClickUp); + ReloadSlider = Cast(InitCombatWidget->GetWidgetFromName("ReloadSlider")); } @@ -39,35 +42,26 @@ 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 (Cast(GetWorld()->GetGameState())->bIsInCombat) return; + if (ReloadTimer > 0.0f) return; if (GunEffect) { const AActor* PlayerActor = GetWorld()->GetFirstPlayerController()->GetPawn(); @@ -75,16 +69,22 @@ 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; + EnemyBlackboard = Cast(TargetEnemy->GetInstigatorController())->GetBlackboardComponent(); + if (!EnemyBlackboard->GetValueAsBool("WasInCombat")) + { + Cast(GetWorld()->GetGameState())->StartCombat(TargetEnemy, true); + return; + } + 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..e94c410 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.h +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/HoldToInitCombat.h @@ -4,8 +4,9 @@ #include "CoreMinimal.h" #include "Components/ActorComponent.h" -#include "NiagaraComponent.h" #include "NiagaraFunctionLibrary.h" +#include "Components/RadialSlider.h" +#include "BehaviorTree/BlackboardComponent.h" #include "HoldToInitCombat.generated.h" class UNiagaraSystem; @@ -26,21 +27,30 @@ public: UPROPERTY() UNiagaraSystem* GunEffect; + UPROPERTY(EditAnywhere) + float ReloadTime = 1.0f; + + UFUNCTION(BlueprintCallable) + void OnClickDown(); + protected: // Called when the game starts virtual void BeginPlay() override; + UPROPERTY() + UBlackboardComponent* EnemyBlackboard; public: // Called every frame virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override; private: - void OnRightClickDown(); - void OnRightClickUp(); - bool bRightClickDown = false; - float RightClickDownTime = 0.0f; - + 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 ae699e5..eec5d2c 100644 --- a/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp +++ b/Source/the_twilight_abyss/TurnBasedCombatV2/TurnBaseCombatV2.cpp @@ -32,48 +32,16 @@ ATurnBaseCombatV2::ATurnBaseCombatV2() } } -void ATurnBaseCombatV2::StartCombat(AActor* Enemy) +void ATurnBaseCombatV2::StartCombat(AActor* Enemy, bool bWasShot) { 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(); @@ -88,7 +56,34 @@ void ATurnBaseCombatV2::StartCombat(AActor* Enemy) LookAtRotation.Pitch = -9.0f; PlayerController->SetControlRotation(LookAtRotation); + 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(bWasShot); //DrawDebugPoint(GetWorld(), Enemy->GetActorLocation(), 10, FColor::Red, false, 10); +} + +void ATurnBaseCombatV2::CombatCheck(bool bWasShot) +{ + const UBlackboardComponent* EnemyBlackboard = Cast(EnemyActor->GetInstigatorController())->GetBlackboardComponent(); + + //TODO: REMOVE THIS + ProbertiumResource = 10; + EisResource = 10; + AzosResource = 10; + IroquoidResource = 10; CurrentComboString = ""; UpdateComboString(CurrentComboString); @@ -96,13 +91,27 @@ void ATurnBaseCombatV2::StartCombat(AActor* Enemy) UpdateActionPoints(); UpdateResourceBars(); ClearBattleLog(); + EnableButtons(); + + FProperty* ReactionSpeedProperty = EnemyActor->GetClass()->FindPropertyByName(FName("ReactionSpeed")); + float* EnemyReactionSpeedPtr = ReactionSpeedProperty->ContainerPtrToValuePtr(EnemyActor); + if (EnemyBlackboard->GetValueAsBool("Sight") && !bWasShot) + { + //bEnemyHasExtraTurn = true; + SwitchTurn(); + } + else if (Cast(PlayerActor)->ReactionSpeed > *EnemyReactionSpeedPtr && bWasShot) + { + bPlayerHasExtraTurn = true; + } + TurnIndicatorTextBlock->SetText(FText::FromString("Player Turn")); } void ATurnBaseCombatV2::EndCombat() { - const FVector2D ViewportSize = FVector2D(GEngine->GameViewport->Viewport->GetSizeXY()); + BookHUD->SetVisibility(ESlateVisibility::Hidden); + Cast(PlayerActor)->ResetWidgetPointer(); TurnIndicatorTextBlock->SetText(FText::FromString("")); - GetWorld()->GetFirstPlayerController()->SetMouseLocation(ViewportSize.X / 2, ViewportSize.Y / 2); bEnemyHasExtraTurn = false; bPlayerHasExtraTurn = false; bIsInCombat = false; @@ -127,8 +136,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; @@ -139,6 +146,7 @@ void ATurnBaseCombatV2::BeginPlay() } PlayerHealth = &Cast(PlayerActor)->Health; + CombatTutorialWidgetInstance = CreateWidget(GetWorld(), CombatTutorialWidget); HUD = CreateWidget(GetWorld(), HUDWidget); TArray PlayerChildActors; PlayerActor->GetAllChildActors(PlayerChildActors, false); @@ -152,6 +160,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")); @@ -208,14 +217,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); @@ -224,13 +233,29 @@ 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)); 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(); @@ -251,21 +276,6 @@ void ATurnBaseCombatV2::ExecuteCast(FString Combo) break; } - //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; - } - if (!bPlayerHasExtraTurn) { SwitchTurn(); @@ -293,16 +303,44 @@ 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 + "."); + //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) { - *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 + "."); + //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 @@ -481,6 +519,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); @@ -551,6 +590,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 cc3446e..bf780b0 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) @@ -47,7 +54,7 @@ public: UPROPERTY(VisibleAnywhere) AActor* PlayerActor; - UPROPERTY(VisibleAnywhere) + UPROPERTY(VisibleAnywhere, BlueprintReadWrite) AActor* EnemyActor; // AActor* ActiveActor; UPROPERTY(BlueprintReadWrite) @@ -59,53 +66,40 @@ public: UUserWidget* CombatTutorialWidgetInstance; UPROPERTY() UWidgetComponent* PlayerWidget; - /* - TODO: - Reference Player Inventory - */ + UPROPERTY(EditAnywhere) TSubclassOf HUDWidget; UPROPERTY(EditAnywhere) TSubclassOf CombatTutorialWidget; - UPROPERTY() + UPROPERTY(BlueprintReadWrite) bool HasSeenTutorial = false; 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; UFUNCTION(BlueprintCallable) - void StartCombat(AActor* Enemy); + void StartCombat(AActor* Enemy, bool bWasShot = false); + UFUNCTION(BlueprintCallable) + void CombatCheck(bool bWasShot = false); UFUNCTION(BlueprintCallable) void EndCombat(); @@ -146,53 +140,57 @@ private: UPROPERTY(VisibleAnywhere) bool bIsPlayerTurn = true; + FString PreviousComboString = ""; + UPROPERTY(VisibleAnywhere) FString CurrentComboString = ""; 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() + UTextBlock* DamageMultiplierTextBlock; - 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() @@ -221,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() 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" });