21{
22 Super::TickNode(OwnerComp, NodeMemory, DeltaSeconds);
23
24 ACharacter* PlayerCharacter = UGameplayStatics::GetPlayerCharacter(GetWorld(), 0);
25
26 if (!PlayerCharacter)
27 {
28 OwnerComp.GetBlackboardComponent()->SetValueAsObject(
TargetActorKey.SelectedKeyName,
nullptr);
29 return;
30 }
31
32 bool bIsPlayerDead = false;
33 if (IAbilitySystemInterface* ASCInterface = Cast<IAbilitySystemInterface>(PlayerCharacter))
34 {
35 if (UAbilitySystemComponent* ASC = ASCInterface->GetAbilitySystemComponent())
36 {
37 if (ASC->HasMatchingGameplayTag(TAG_CHARACTER_STATE_ISDEAD))
38 {
39 bIsPlayerDead = true;
40 }
41 }
42 }
43
44 if (bIsPlayerDead)
45 {
46 OwnerComp.GetBlackboardComponent()->SetValueAsObject(
TargetActorKey.SelectedKeyName,
nullptr);
47 OwnerComp.GetBlackboardComponent()->SetValueAsBool(
IsInAttackRangeKey.SelectedKeyName,
false);
48 }
49 else
50 {
51 OwnerComp.GetBlackboardComponent()->SetValueAsObject(
TargetActorKey.SelectedKeyName, PlayerCharacter);
52
53 if (APawn* ControllingPawn = OwnerComp.GetAIOwner()->GetPawn())
54 {
55 float Distance = FVector::Distance(ControllingPawn->GetActorLocation(), PlayerCharacter->GetActorLocation());
56
58 {
60 {
61 bool bInAttackRange = (Distance <= EnemyAttributes->GetAttackRange());
62 OwnerComp.GetBlackboardComponent()->SetValueAsBool(
IsInAttackRangeKey.SelectedKeyName, bInAttackRange);
63 }
64 }
65 }
66 }
67}
Definition CK_CharacterEnemy.h:20
struct FBlackboardKeySelector IsInAttackRangeKey
Definition BTService_DetectPlayer.h:28
struct FBlackboardKeySelector TargetActorKey
Definition BTService_DetectPlayer.h:25
Definition EnemyAttributeSet.h:11