7{
9
11 if (IsValid(StrafeComp) == false)
12 {
13 return EStateTreeRunStatus::Failed;
14 }
15
16 switch (Data.StrafeMode)
17 {
18 case EStrafeMode::Reset:
19 StrafeComp->SetCurrentStrafeDirection(FMath::RandBool() ? -1.0f : 1.0f);
20 break;
21
22 case EStrafeMode::Calculate:
23 {
24 float CurrentDirection = StrafeComp->GetCurrentStrafeDirection();
25 if (FMath::FRand() < StrafeComp->GetDirectionChangeChance())
26 {
27 CurrentDirection *= -1.0f;
28 StrafeComp->SetCurrentStrafeDirection(CurrentDirection);
29 }
30
31 Data.StrafeDirection = CurrentDirection;
32
33 const float StrafeDistanceMin = StrafeComp->GetStrafeDistanceMin();
34 const float StrafeDistanceMax = StrafeComp->GetStrafeDistanceMax();
35
36 Data.CombatDistance = 0.0f;
37 if (StrafeDistanceMin < StrafeDistanceMax)
38 {
39 if (Data.DistanceToTarget < StrafeDistanceMin)
40 {
41 Data.CombatDistance = 1.0f;
42 }
43 else if (Data.DistanceToTarget > StrafeDistanceMax)
44 {
45 Data.CombatDistance = -1.0f;
46 }
47 }
48 break;
49 }
50
51 default:
52 return EStateTreeRunStatus::Failed;
53 }
54
55 return EStateTreeRunStatus::Succeeded;
56}
TObjectPtr< UEnemyStrafeComponent > StrafeComponent
Definition Task_Strafe.h:23
FStrafeInstanceData FInstanceDataType
Definition Task_Strafe.h:43