diff --git a/Content/BlueprintAI/AI/BTT_ChaseBruh.uasset b/Content/BlueprintAI/AI/BTT_ChaseBruh.uasset index 231e030..5be2e6f 100644 --- a/Content/BlueprintAI/AI/BTT_ChaseBruh.uasset +++ b/Content/BlueprintAI/AI/BTT_ChaseBruh.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e7d9c9dff6292b768609dc7b0a31ee5b86bc9b09ef0117e781e9d1f4d47d2cb4 -size 31268 +oid sha256:7a0e737908180c4749ef74a974ae3f2f2523cc31e70f32c22bddb9c57a84ca3f +size 39811 diff --git a/Content/Blueprints/Combat_UI/CombatCharacterRT.uasset b/Content/Blueprints/Combat_UI/CombatCharacterRT.uasset index 7873cbb..bd0eb2e 100644 --- a/Content/Blueprints/Combat_UI/CombatCharacterRT.uasset +++ b/Content/Blueprints/Combat_UI/CombatCharacterRT.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c4660c22fe66671e9afa5f7b94224ec21f7ed9a8f0050dde0178d63d088fa8a4 -size 81902 +oid sha256:d4a26d2d9ff8145e416491010946f85fa4cdc6ca032b23d708863e252af4b1e0 +size 81418 diff --git a/Source/the_twilight_abyss/RealTimeCombat/RealTimeCombat.cpp b/Source/the_twilight_abyss/RealTimeCombat/RealTimeCombat.cpp index e1e31ab..8a18400 100644 --- a/Source/the_twilight_abyss/RealTimeCombat/RealTimeCombat.cpp +++ b/Source/the_twilight_abyss/RealTimeCombat/RealTimeCombat.cpp @@ -22,9 +22,9 @@ ARealTimeCombat::ARealTimeCombat() void ARealTimeCombat::StartCombat() { - if (HUD->IsInViewport()) return; HUD->AddToViewport(); + bStartTimer = true; //EnemyActor = Enemy; // if (APlayerController* PC = Cast(GetWorld()->GetFirstPlayerController())) @@ -116,6 +116,12 @@ void ARealTimeCombat::BeginPlay() EnemyActor = Cast(Actor); } + UGameplayStatics::GetAllActorsOfClassWithTag(GetWorld(), AActor::StaticClass(), FName("Player"), AllCharacterActorsInScene); + for (AActor* Actor : AllCharacterActorsInScene) + { + PlayerActor = Cast(Actor); + } + HUD = CreateWidget(GetWorld(), HUDWidget); CurrentComboTextBlock = Cast(HUD->GetWidgetFromName("CurrentCombo")); @@ -158,6 +164,12 @@ void ARealTimeCombat::ExecuteCast(FString Combo) RevertActionPoints(); UpdateActionPoints(); + if (!HitEnemy()) + { + GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Missed")); + return; + } + switch (bIsPlayerTurn) { case true: @@ -231,9 +243,7 @@ void ARealTimeCombat::UpdateProgressBars() const void ARealTimeCombat::Tick(float DeltaSeconds) { Super::Tick(DeltaSeconds); - UE_LOG(LogTemp, Warning, TEXT( "%f" ), DeltaSeconds); - //Every second add 1 action point - if (ActionPointsTimer >= 1.0f && HeldActionPoints < MaxActionPoints) + if (ActionPointsTimer >= 1.0f && HeldActionPoints < MaxActionPoints && bStartTimer) { HeldActionPoints += 1; ActiveActionPoints += 1; @@ -288,3 +298,22 @@ void ARealTimeCombat::UpdateResourceBars() const IronResourceBar->SetPercent(IronResource / 10.0f); SulfurResourceBar->SetPercent(SulfurResource / 10.0f); } + +bool ARealTimeCombat::HitEnemy() const +{ + FHitResult HitResult; + FVector Start = PlayerActor->GetActorLocation(); + FVector End = PlayerActor->GetActorForwardVector() * 1000.0f + Start; + FCollisionQueryParams CollisionParams; + CollisionParams.AddIgnoredActor(PlayerActor); + if (GetWorld()->LineTraceSingleByChannel(HitResult, Start, End, ECC_Pawn, CollisionParams)) + { + DrawDebugLine(GetWorld(), Start, End, HitResult.bBlockingHit ? FColor::Green : FColor::Red, false, 5.0f, 0, 10.0f); + if (HitResult.GetActor() == EnemyActor) + { + return true; + } + } + DrawDebugLine(GetWorld(), Start, End, HitResult.bBlockingHit ? FColor::Green : FColor::Red, false, 5.0f, 0, 10.0f); + return false; +} diff --git a/Source/the_twilight_abyss/RealTimeCombat/RealTimeCombat.h b/Source/the_twilight_abyss/RealTimeCombat/RealTimeCombat.h index 977d716..c6cfae9 100644 --- a/Source/the_twilight_abyss/RealTimeCombat/RealTimeCombat.h +++ b/Source/the_twilight_abyss/RealTimeCombat/RealTimeCombat.h @@ -28,7 +28,8 @@ class THE_TWILIGHT_ABYSS_API ARealTimeCombat : public AGameStateBase UPROPERTY(EditDefaultsOnly) int SulfurResource = 10; // W - // AActor* PlayerActor; + UPROPERTY(VisibleAnywhere) + AActor* PlayerActor; UPROPERTY(VisibleAnywhere) AActor* EnemyActor; // AActor* ActiveActor; @@ -120,4 +121,7 @@ private: void ClearBattleLog(); void UpdateBattleLog(); void UpdateResourceBars() const; + bool HitEnemy() const; + + bool bStartTimer = false; };