13{
15
16 if (IsValid(Data.Actor) == false)
17 {
18 return EStateTreeRunStatus::Failed;
19 }
20
21 Data.
GroggyComponent = Data.Actor->FindComponentByClass<UEnemyGroggyComponent>();
22 if (IsValid(Data.GroggyComponent) == false)
23 {
24 return EStateTreeRunStatus::Failed;
25 }
26
27 ACharacter* Character = Cast<ACharacter>(Data.Actor);
28 if (IsValid(Character))
29 {
30 if (USkeletalMeshComponent* MeshComponent = Character->GetMesh())
31 {
32 Data.AnimInstance = MeshComponent->GetAnimInstance();
33 }
34 }
35
36 Data.GroggyMontage = Data.GroggyComponent->GetGroggyMontage();
37
39 {
40
41 if (IsValid(Character))
42 {
43 if (AController* Controller = Character->GetController())
44 {
45 Controller->StopMovement();
46 }
47 }
48
49
50 if (IsValid(Data.AnimInstance) && IsValid(Data.GroggyMontage))
51 {
52 Data.AnimInstance->StopAllMontages(0.05f);
53 Data.AnimInstance->Montage_Play(Data.GroggyMontage, 1.0f);
54 }
55
56 return EStateTreeRunStatus::Running;
57 }
58
59 if (IsValid(Data.AnimInstance) == false || IsValid(Data.GroggyMontage) == false)
60 {
61 return EStateTreeRunStatus::Succeeded;
62 }
63
64 const FName EndSectionName = Data.GroggyComponent->GetGroggyEndSectionName();
65 if (EndSectionName.IsNone())
66 {
67 return EStateTreeRunStatus::Succeeded;
68 }
69
70 if (Data.AnimInstance->Montage_IsPlaying(Data.GroggyMontage) == false)
71 {
72 return EStateTreeRunStatus::Succeeded;
73 }
74
75 Data.AnimInstance->Montage_JumpToSection(EndSectionName, Data.GroggyMontage);
76
77 return EStateTreeRunStatus::Running;
78}
TObjectPtr< UEnemyGroggyComponent > GroggyComponent
Definition Task_Groggy.h:33
FGroggyTaskInstanceData FInstanceDataType
Definition Task_Groggy.h:47