From 0b9791086e37e7ceb6bbc163cfb5640def7900f2 Mon Sep 17 00:00:00 2001 From: PHILIP WHITE Date: Thu, 18 Apr 2024 21:26:09 +0100 Subject: [PATCH] Update AI, Character to Detect If Being Investigated --- .../EndlessVendetta/AI/AI_EnemyController.cpp | 9 ++++++- .../AI/Tasks/BTTask_StopInvestigating.cpp | 11 ++++++--- .../EndlessVendettaCharacter.cpp | 24 +++++++++++++++++-- .../EndlessVendettaCharacter.h | 9 +++++++ 4 files changed, 47 insertions(+), 6 deletions(-) diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/AI_EnemyController.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/AI_EnemyController.cpp index dc0daed6..9d3eed47 100644 --- a/EndlessVendetta/Source/EndlessVendetta/AI/AI_EnemyController.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/AI/AI_EnemyController.cpp @@ -117,13 +117,20 @@ void AAI_EnemyController::OnTargetPerceptionUpdated(AActor* Actor, FAIStimulus c GetBlackboardComponent()->ClearValue("TargetLocation"); GetBlackboardComponent()->SetValueAsBool("CanSeePlayer", false); GetBlackboardComponent()->SetValueAsBool("SeenWithHostilities", false); - PlayerCharacter->DecrementSeenHostileCount(); + if (!GetBlackboardComponent()->GetValueAsBool("SeenWithHostilities")) + { + PlayerCharacter->DecrementSeenHostileCount(); + } } if (Stimulus.WasSuccessfullySensed() && Stimulus.Type == HearingConfig->GetSenseID()) { GetBlackboardComponent()->SetValueAsObject("TargetPlayer", Actor); GetBlackboardComponent()->SetValueAsVector("InvestigationLocation", Stimulus.StimulusLocation); + if (!GetBlackboardComponent()->GetValueAsBool("IsInvestigating")) + { + PlayerCharacter->IncrementBeingInvestigatedCount(); + } GetBlackboardComponent()->SetValueAsBool("IsInvestigating", true); } else if (!Stimulus.WasSuccessfullySensed() && Stimulus.Type == HearingConfig->GetSenseID()) diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_StopInvestigating.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_StopInvestigating.cpp index 8e5cd367..d6ca7d0f 100644 --- a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_StopInvestigating.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_StopInvestigating.cpp @@ -4,6 +4,7 @@ #include "BTTask_StopInvestigating.h" #include "BehaviorTree/BlackboardComponent.h" +#include "EndlessVendetta/EndlessVendettaCharacter.h" #include "EndlessVendetta/AI/AI_EnemyController.h" #include "EndlessVendetta/AI/EnemyCharacter.h" @@ -18,9 +19,13 @@ EBTNodeResult::Type UBTTask_StopInvestigating::ExecuteTask(UBehaviorTreeComponen { if (UBlackboardComponent* const BlackboardComponent = OwnerComp.GetBlackboardComponent()) { - BlackboardComponent->ClearValue(GetSelectedBlackboardKey()); - FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded); - return EBTNodeResult::Succeeded; + if (AEndlessVendettaCharacter* Player = Cast(GetWorld()->GetFirstPlayerController()->GetPawn())) + { + BlackboardComponent->ClearValue(GetSelectedBlackboardKey()); + Player->DecrementBeingInvestigatedCount(); + FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded); + return EBTNodeResult::Succeeded; + } } } return EBTNodeResult::Failed; diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp index 1937ebf7..988f771e 100644 --- a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp @@ -60,7 +60,10 @@ void AEndlessVendettaCharacter::IncrementSeenHostileCount() { GetWorld()->GetTimerManager().ClearTimer(NotInCombatTimerHandle); } - bIsInCombat = true; + if (!bIsInCombat) + { + bIsInCombat = true; + } } void AEndlessVendettaCharacter::DecrementSeenHostileCount() @@ -77,6 +80,24 @@ void AEndlessVendettaCharacter::DecrementSeenHostileCount() } } +void AEndlessVendettaCharacter::IncrementBeingInvestigatedCount() +{ + BeingInvestigatedCount++; + if (!bIsBeingInvestigated) + { + bIsBeingInvestigated = true; + } +} + +void AEndlessVendettaCharacter::DecrementBeingInvestigatedCount() +{ + BeingInvestigatedCount--; + if (BeingInvestigatedCount <= 0) + { + bIsBeingInvestigated = false; + } +} + void AEndlessVendettaCharacter::ReloadAnimationComplete() { if (IsValid(PrimaryWeapon)) @@ -216,7 +237,6 @@ void AEndlessVendettaCharacter::Heal(const float Amount) void AEndlessVendettaCharacter::NotInCombat() { bIsInCombat = false; - GEngine->AddOnScreenDebugMessage(-1, 15.f, FColor::Green, TEXT("Not In Combat")); } void AEndlessVendettaCharacter::WeaponPickUpSystem() diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h index cf47b207..0b0fced9 100644 --- a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h +++ b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h @@ -165,6 +165,9 @@ public: bool bIsInRestrictedArea = false; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Stats") bool bIsInCombat = false; + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Stats") + bool bIsBeingInvestigated = false; + UFUNCTION(BlueprintCallable) void IncrementRestrictedBoundsCount(); UFUNCTION(BlueprintCallable) @@ -173,6 +176,10 @@ public: void IncrementSeenHostileCount(); UFUNCTION(BlueprintCallable) void DecrementSeenHostileCount(); + UFUNCTION(BlueprintCallable) + void IncrementBeingInvestigatedCount(); + UFUNCTION(BlueprintCallable) + void DecrementBeingInvestigatedCount(); DECLARE_DYNAMIC_MULTICAST_DELEGATE(FStartReload); UPROPERTY(BlueprintAssignable, Category = "Weapon") @@ -223,6 +230,8 @@ protected: UPROPERTY() int SeenHostileCount = 0; UPROPERTY() + int BeingInvestigatedCount = 0; + UPROPERTY() FTimerHandle NotInCombatTimerHandle; void NotInCombat();