void SFindInBT::MatchTokens(const TArray<FString>& Tokens) { RootSearchResult.Reset(); TWeakPtr<SGraphEditor> FocusedGraphEditor = BehaviorTreeEditorPtr.Pin()->GetFocusedGraphPtr(); UEdGraph* Graph = NULL; if (FocusedGraphEditor.IsValid()) { Graph = FocusedGraphEditor.Pin()->GetCurrentGraph(); } if (Graph == NULL) { return; } RootSearchResult = FSearchResult(new FFindInBTResult(FString("BehaviorTreeRoot"))); for (auto It(Graph->Nodes.CreateConstIterator()); It; ++It) { UEdGraphNode* Node = *It; const FString NodeName = Node->GetNodeTitle(ENodeTitleType::ListView).ToString(); FSearchResult NodeResult(new FFindInBTResult(NodeName, RootSearchResult, Node)); FString NodeSearchString = NodeName + Node->GetClass()->GetName() + Node->NodeComment; NodeSearchString = NodeSearchString.Replace(TEXT(" "), TEXT("")); bool bNodeMatchesSearch = StringMatchesSearchTokens(Tokens, NodeSearchString); UBehaviorTreeGraphNode* BTNode = Cast<UBehaviorTreeGraphNode>(Node); if (BTNode) { // searching through nodes' decorators for (auto DecoratorIt(BTNode->Decorators.CreateConstIterator()); DecoratorIt; ++DecoratorIt) { UBehaviorTreeGraphNode* Decorator = *DecoratorIt; MatchTokensInChild(Tokens, Decorator, NodeResult); } // searching through nodes' services for (auto ServiceIt(BTNode->Services.CreateConstIterator()); ServiceIt; ++ServiceIt) { UBehaviorTreeGraphNode* Service = *ServiceIt; MatchTokensInChild(Tokens, Service, NodeResult); } } if ((NodeResult->Children.Num() > 0) || bNodeMatchesSearch) { NodeResult->SetNodeHighlight(true); ItemsFound.Add(NodeResult); } } }
void UBTTask_BlueprintBase::FinishAbort() { UBehaviorTreeComponent* OwnerComp = Cast<UBehaviorTreeComponent>(GetOuter()); EBTNodeResult::Type NodeResult(EBTNodeResult::Aborted); if (bStoreFinishResult) { CurrentCallResult = NodeResult; } else if (OwnerComp && bIsAborting) { FinishLatentAbort(*OwnerComp); } }
void UBTTask_BlueprintBase::FinishExecute(bool bSuccess) { UBehaviorTreeComponent* OwnerComp = Cast<UBehaviorTreeComponent>(GetOuter()); EBTNodeResult::Type NodeResult(bSuccess ? EBTNodeResult::Succeeded : EBTNodeResult::Failed); if (bStoreFinishResult) { CurrentCallResult = NodeResult; } else if (OwnerComp && !bIsAborting) { FinishLatentTask(*OwnerComp, NodeResult); } }
void SFindInMaterial::MatchTokens(const TArray<FString> &Tokens) { RootSearchResult.Reset(); UEdGraph* Graph = MaterialEditorPtr.Pin()->Material->MaterialGraph; if (Graph == NULL) { return; } RootSearchResult = FSearchResult(new FFindInMaterialResult(FString("BehaviorTreeRoot"))); for (auto It(Graph->Nodes.CreateConstIterator()); It; ++It) { UEdGraphNode* Node = *It; const FString NodeName = Node->GetNodeTitle(ENodeTitleType::ListView).ToString(); FSearchResult NodeResult(new FFindInMaterialResult(NodeName, RootSearchResult, Node)); FString NodeSearchString = NodeName + Node->NodeComment; NodeSearchString = NodeSearchString.Replace(TEXT(" "), TEXT("")); bool bNodeMatchesSearch = StringMatchesSearchTokens(Tokens, NodeSearchString); // Use old Material Expression search functions too if (!bNodeMatchesSearch) { bool bMatchesAllTokens = true; if (UMaterialGraphNode* MatNode = Cast<UMaterialGraphNode>(Node)) { for (int32 Index = 0; Index < Tokens.Num(); ++Index) { if (!MatNode->MaterialExpression->MatchesSearchQuery(*Tokens[Index])) { bMatchesAllTokens = false; break; } } } else if (UMaterialGraphNode_Comment* MatComment = Cast<UMaterialGraphNode_Comment>(Node)) { for (int32 Index = 0; Index < Tokens.Num(); ++Index) { if (!MatComment->MaterialExpressionComment->MatchesSearchQuery(*Tokens[Index])) { bMatchesAllTokens = false; break; } } } else { bMatchesAllTokens = false; } if (bMatchesAllTokens) { bNodeMatchesSearch = true; } } for (TArray<UEdGraphPin*>::TIterator PinIt(Node->Pins); PinIt; ++PinIt) { UEdGraphPin* Pin = *PinIt; if (Pin && Pin->PinFriendlyName.CompareTo(FText::FromString(TEXT(" "))) != 0) { FText PinName = Pin->GetSchema()->GetPinDisplayName(Pin); FString PinSearchString = Pin->PinName + Pin->PinFriendlyName.ToString() + Pin->DefaultValue + Pin->PinType.PinCategory + Pin->PinType.PinSubCategory + (Pin->PinType.PinSubCategoryObject.IsValid() ? Pin->PinType.PinSubCategoryObject.Get()->GetFullName() : TEXT("")); PinSearchString = PinSearchString.Replace(TEXT(" "), TEXT("")); if (StringMatchesSearchTokens(Tokens, PinSearchString)) { FSearchResult PinResult(new FFindInMaterialResult(PinName.ToString(), NodeResult, Pin)); NodeResult->Children.Add(PinResult); } } } if ((NodeResult->Children.Num() > 0) || bNodeMatchesSearch) { ItemsFound.Add(NodeResult); } } }