bool UBTDecorator_BlueprintBase::GetShouldAbort(UBehaviorTreeComponent& OwnerComp) const { // if there's no condition-checking function implemented we always want to abort on any change if (PerformConditionCheckImplementations == 0) { return true; } const bool bIsOnActiveBranch = OwnerComp.IsExecutingBranch(GetMyNode(), GetChildIndex()); bool bShouldAbort = false; if (bIsOnActiveBranch) { bShouldAbort = (FlowAbortMode == EBTFlowAbortMode::Self || FlowAbortMode == EBTFlowAbortMode::Both) && CalculateRawConditionValueImpl(OwnerComp) == IsInversed(); } else { bShouldAbort = (FlowAbortMode == EBTFlowAbortMode::LowerPriority || FlowAbortMode == EBTFlowAbortMode::Both) && CalculateRawConditionValueImpl(OwnerComp) != IsInversed(); } return bShouldAbort; }
bool UBTDecorator_BlueprintBase::IsDecoratorExecutionActive() const { UBehaviorTreeComponent* OwnerComp = Cast<UBehaviorTreeComponent>(GetOuter()); return OwnerComp && OwnerComp->IsExecutingBranch(GetMyNode(), GetChildIndex()); }