From 91c3e8163bbb064993f02de0d15c4abb4574f9ec Mon Sep 17 00:00:00 2001
From: PHILIP WHITE <PW259246@falmouth.ac.uk>
Date: Thu, 9 Nov 2023 13:14:28 +0000
Subject: [PATCH] Update AI Attack Task for Instigating Damage

---
 .../AI/Tasks/BTTask_AttackPlayer.cpp            | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_AttackPlayer.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_AttackPlayer.cpp
index 84e3240e..c86f70ca 100644
--- a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_AttackPlayer.cpp
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_AttackPlayer.cpp
@@ -5,7 +5,9 @@
 
 #include "EndlessVendetta/AI/AI_EnemyController.h"
 #include "BehaviorTree/BlackboardComponent.h"
+#include "EndlessVendetta/EndlessVendettaCharacter.h"
 #include "EndlessVendetta/AI/EnemyCharacter.h"
+#include "Engine/DamageEvents.h"
 
 UBTTask_AttackPlayer::UBTTask_AttackPlayer(FObjectInitializer const& ObjectInitializer)
 {
@@ -19,9 +21,22 @@ EBTNodeResult::Type UBTTask_AttackPlayer::ExecuteTask(UBehaviorTreeComponent& Ow
 		if (const UBlackboardComponent* const Blackboard = OwnerComp.GetBlackboardComponent())
 		{
 			FVector const Origin = AIController->GetPawn()->GetActorLocation();
+			FVector const Start = Origin + FVector(0.f, 0.f, 30.f);
 			FVector const PlayerLocation = Blackboard->GetValueAsVector("TargetLocation");
-			//DrawDebugLine(GetWorld(), Origin, PlayerLocation, FColor::Green, false, 1.f, 0, 1.f);
+			DrawDebugLine(GetWorld(), Start, PlayerLocation, FColor::Black, false, 1.f, 0, 1.f);
 
+			FCollisionQueryParams QueryParams;
+			QueryParams.AddIgnoredActor(AIController->GetPawn());
+			if (FHitResult HitResult; GetWorld()->LineTraceSingleByChannel(HitResult, Start, PlayerLocation, ECC_Pawn, QueryParams))
+			{
+				if (IsValid(HitResult.GetActor()))
+				{
+					if (HitResult.GetActor()->ActorHasTag("Player"))
+					{
+						Cast<AEndlessVendettaCharacter>(HitResult.GetActor())->TakeDamage(5.0f, FPointDamageEvent(), AIController->GetInstigatorController(), AIController->GetPawn());
+					}
+				}
+			}
 			if (AEnemyCharacter* const EnemyCharacter = Cast<AEnemyCharacter>(AIController->GetPawn()))
 			{
 				EnemyCharacter->SetFiring(true);