FAITest_BTCompositeDecorator() { UBTCompositeNode& CompNode = FBTBuilder::AddSequence(*BTAsset); { FBTBuilder::AddTask(CompNode, 0, EBTNodeResult::Succeeded); FBTBuilder::AddTask(CompNode, 1, EBTNodeResult::Succeeded); { FBTBuilder::WithDecoratorBlackboard(CompNode, EBasicKeyOperation::NotSet, EBTFlowAbortMode::None, TEXT("Bool1")); FBTBuilder::WithDecoratorBlackboard(CompNode, EBasicKeyOperation::NotSet, EBTFlowAbortMode::None, TEXT("Bool2")); FBTBuilder::WithDecoratorBlackboard(CompNode, EBasicKeyOperation::Set, EBTFlowAbortMode::None, TEXT("Bool3")); FBTBuilder::WithDecoratorBlackboard(CompNode, EBasicKeyOperation::NotSet, EBTFlowAbortMode::None, TEXT("Bool4")); TArray<FBTDecoratorLogic>& CompositeOps = CompNode.Children.Last().DecoratorOps; CompositeOps.Add(FBTDecoratorLogic(EBTDecoratorLogic::Or, 3)); CompositeOps.Add(FBTDecoratorLogic(EBTDecoratorLogic::Test, 0)); CompositeOps.Add(FBTDecoratorLogic(EBTDecoratorLogic::Not, 1)); CompositeOps.Add(FBTDecoratorLogic(EBTDecoratorLogic::And, 2)); CompositeOps.Add(FBTDecoratorLogic(EBTDecoratorLogic::Test, 1)); CompositeOps.Add(FBTDecoratorLogic(EBTDecoratorLogic::Test, 2)); CompositeOps.Add(FBTDecoratorLogic(EBTDecoratorLogic::Test, 3)); } FBTBuilder::AddTask(CompNode, 2, EBTNodeResult::Succeeded); } ExpectedResult.Add(0); ExpectedResult.Add(1); ExpectedResult.Add(2); }
void UBehaviorTreeGraphNode_Decorator::CollectDecoratorData(TArray<UBTDecorator*>& NodeInstances, TArray<FBTDecoratorLogic>& Operations) const { if (NodeInstance) { UBTDecorator* DecoratorNode = (UBTDecorator*)NodeInstance; const int32 InstanceIdx = NodeInstances.Add(DecoratorNode); Operations.Add(FBTDecoratorLogic(EBTDecoratorLogic::Test, InstanceIdx)); } }