56{
58
59 if (Data.CachedPlayerActor.IsValid() == false)
60 {
61 if (UWorld* World = Context.GetWorld())
62 {
64 }
65 }
66
67 APawn* OwnerPawn = Data.OwnerPawn.Get();
68 AActor* PlayerActor = Data.CachedPlayerActor.Get();
70
71 if (BossCharacter)
72 {
74 }
75
76 if (OwnerPawn == nullptr || PlayerActor == nullptr)
77 {
78 Data.TargetActor = nullptr;
79 Data.DistanceToTarget = 0.0f;
80 Data.bIsTargetBehind = false;
81 return;
82 }
83
84 const FVector OwnerLocation = OwnerPawn->GetActorLocation();
85 const FVector PlayerLocation = PlayerActor->GetActorLocation();
86 const FVector DirectionToPlayer = (PlayerLocation - OwnerLocation).GetSafeNormal2D();
87 const float ForwardDot = FVector::DotProduct(OwnerPawn->GetActorForwardVector().GetSafeNormal2D(), DirectionToPlayer);
88
89 Data.DistanceToTarget = FVector::Dist(OwnerLocation, PlayerLocation);
90 Data.bIsTargetBehind = ForwardDot <= Data.BehindDotThreshold;
91
92 if (Data.bHasDetectedTarget == false)
93 {
94 if (Data.DistanceToTarget <= Data.DetectRadius)
95 {
96 Data.bHasDetectedTarget = true;
97
98 if (BossCharacter)
99 {
101 }
102 }
103 }
104
105 if (Data.bHasDetectedTarget)
106 {
107 Data.TargetActor = PlayerActor;
108 }
109 else
110 {
111 Data.TargetActor = nullptr;
112 }
113}
Definition BossCharacter.h:22
FORCEINLINE bool HasEncounteredPlayer() const
Definition BossCharacter.h:35
FORCEINLINE void MarkPlayerEncountered()
Definition BossCharacter.h:40
TWeakObjectPtr< AActor > CachedPlayerActor
Definition Evaluator_BossTargetData.h:38
FBossTargetInstanceData FInstanceDataType
Definition Evaluator_BossTargetData.h:47