From 0e6c2d5d056b34a94d7ed50ed20c221dbb3a5f29 Mon Sep 17 00:00:00 2001 From: PHILIP WHITE Date: Fri, 16 Feb 2024 19:04:14 +0000 Subject: [PATCH] Update Enemy AI to Shoot w/ VFX, SFX & Animation --- .../Content/AI/Enemy/Basic/AfterShot.uasset | 3 --- .../Basic/BP_BasicEnemyCharacterSwat.uasset | 4 +-- .../AI/Enemy/Basic/BT_BasicEnemy.uasset | 4 +-- .../Content/Characters/Swat/ABP_Swat.uasset | 4 +-- .../EndlessVendetta/AI/EnemyCharacter.h | 7 ++++- .../AI/Tasks/BTTask_AttackPlayer.cpp | 27 +++++++++---------- 6 files changed, 25 insertions(+), 24 deletions(-) delete mode 100644 EndlessVendetta/Content/AI/Enemy/Basic/AfterShot.uasset diff --git a/EndlessVendetta/Content/AI/Enemy/Basic/AfterShot.uasset b/EndlessVendetta/Content/AI/Enemy/Basic/AfterShot.uasset deleted file mode 100644 index b2a26d9a..00000000 --- a/EndlessVendetta/Content/AI/Enemy/Basic/AfterShot.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:850f284bdafe247a859e134d6db7bce335a93c814828c76efe2baffd67562f6e -size 660882 diff --git a/EndlessVendetta/Content/AI/Enemy/Basic/BP_BasicEnemyCharacterSwat.uasset b/EndlessVendetta/Content/AI/Enemy/Basic/BP_BasicEnemyCharacterSwat.uasset index ba7dbc6b..eb9f276c 100644 --- a/EndlessVendetta/Content/AI/Enemy/Basic/BP_BasicEnemyCharacterSwat.uasset +++ b/EndlessVendetta/Content/AI/Enemy/Basic/BP_BasicEnemyCharacterSwat.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:abc713e5bc7ac0afa27a7d5036a84638b46e19fdbb8d2a764c97fc4a3c32e307 -size 88423 +oid sha256:2c46611621707c4a12a15374d5b4a710de5b654a57e18db1c3ebdf9f2fdabe83 +size 143601 diff --git a/EndlessVendetta/Content/AI/Enemy/Basic/BT_BasicEnemy.uasset b/EndlessVendetta/Content/AI/Enemy/Basic/BT_BasicEnemy.uasset index f96b7e46..622b9377 100644 --- a/EndlessVendetta/Content/AI/Enemy/Basic/BT_BasicEnemy.uasset +++ b/EndlessVendetta/Content/AI/Enemy/Basic/BT_BasicEnemy.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:949609799d11457e6150250a14eb15ebcf32753bc180188cd508a395ad4e68ed -size 69012 +oid sha256:acd488a5ce63b573d1fa4bc4eeac055692608ca08c4231742613cd34de37edcf +size 71080 diff --git a/EndlessVendetta/Content/Characters/Swat/ABP_Swat.uasset b/EndlessVendetta/Content/Characters/Swat/ABP_Swat.uasset index 74dcda36..16a85e65 100644 --- a/EndlessVendetta/Content/Characters/Swat/ABP_Swat.uasset +++ b/EndlessVendetta/Content/Characters/Swat/ABP_Swat.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7d5e5f3f0963eb30ae715261b9defc1100335d7314161d6901016ffe75c0b000 -size 294560 +oid sha256:c2f14a9381f812060126fc2ea4f63b1147ee79ff9387aab71cd019d433c860cc +size 294438 diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.h b/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.h index eeb034ce..f124e995 100644 --- a/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.h +++ b/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.h @@ -42,7 +42,12 @@ public: UFUNCTION(BlueprintNativeEvent) void SetFiring(bool IsFiring); virtual void SetFiring_Implementation(bool IsFiring); - + + DECLARE_DYNAMIC_MULTICAST_DELEGATE(FFireWeapon); + + UPROPERTY(BlueprintAssignable, Category = "AI") + FFireWeapon FireWeapon; + private: FDelegateHandle AlertLevelDelegateHandle; FDelegateHandle HuntPlayerDelegateHandle; diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_AttackPlayer.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_AttackPlayer.cpp index c86f70ca..3b4ff281 100644 --- a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_AttackPlayer.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_AttackPlayer.cpp @@ -23,23 +23,22 @@ EBTNodeResult::Type UBTTask_AttackPlayer::ExecuteTask(UBehaviorTreeComponent& Ow 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(), 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(HitResult.GetActor())->TakeDamage(5.0f, FPointDamageEvent(), AIController->GetInstigatorController(), AIController->GetPawn()); - } - } - } if (AEnemyCharacter* const EnemyCharacter = Cast(AIController->GetPawn())) { + EnemyCharacter->FireWeapon.Broadcast(); EnemyCharacter->SetFiring(true); + 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(HitResult.GetActor())->TakeDamage(5.0f, FPointDamageEvent(), AIController->GetInstigatorController(), AIController->GetPawn()); + } + } + } FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded); return EBTNodeResult::Succeeded;