本文整理汇总了C++中UBTNode类的典型用法代码示例。如果您正苦于以下问题:C++ UBTNode类的具体用法?C++ UBTNode怎么用?C++ UBTNode使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了UBTNode类的19个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: CollectBreakpointsFromAsset
void FBehaviorTreeDebugger::CollectBreakpointsFromAsset(class UBehaviorTreeGraphNode* Node)
{
if (Node == NULL)
{
return;
}
for (int32 PinIdx = 0; PinIdx < Node->Pins.Num(); PinIdx++)
{
UEdGraphPin* Pin = Node->Pins[PinIdx];
if (Pin->Direction != EGPD_Output)
{
continue;
}
for (int32 i = 0; i < Pin->LinkedTo.Num(); i++)
{
UBehaviorTreeGraphNode* LinkedNode = Cast<UBehaviorTreeGraphNode>(Pin->LinkedTo[i]->GetOwningNode());
if (LinkedNode)
{
UBTNode* BTNode = Cast<UBTNode>(LinkedNode->NodeInstance);
if (BTNode && LinkedNode->bHasBreakpoint && LinkedNode->bIsBreakpointEnabled)
{
ActiveBreakpoints.Add(BTNode->GetExecutionIndex());
}
CollectBreakpointsFromAsset(LinkedNode);
}
}
}
}
开发者ID:Codermay,项目名称:Unreal4,代码行数:31,代码来源:BehaviorTreeDebugger.cpp
示例2: check
void UBTNode::InitializeInSubtree(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, int32& NextInstancedIndex, EBTMemoryInit::Type InitType) const
{
if (bCreateNodeInstance)
{
// composite nodes can't be instanced!
check(IsA(UBTCompositeNode::StaticClass()) == false);
UBTNode* NodeInstance = OwnerComp.NodeInstances.IsValidIndex(NextInstancedIndex) ? OwnerComp.NodeInstances[NextInstancedIndex] : NULL;
if (NodeInstance == NULL)
{
NodeInstance = NewObject<UBTNode>(&OwnerComp, GetClass(), GetFName(), RF_NoFlags, (UObject*)(this));
NodeInstance->InitializeNode(GetParentNode(), GetExecutionIndex(), GetMemoryOffset(), GetTreeDepth());
NodeInstance->bIsInstanced = true;
OwnerComp.NodeInstances.Add(NodeInstance);
}
check(NodeInstance);
NodeInstance->SetOwner(OwnerComp.GetOwner());
FBTInstancedNodeMemory* MyMemory = GetSpecialNodeMemory<FBTInstancedNodeMemory>(NodeMemory);
MyMemory->NodeIdx = NextInstancedIndex;
NodeInstance->OnInstanceCreated(OwnerComp);
NextInstancedIndex++;
}
else
{
InitializeMemory(OwnerComp, NodeMemory, InitType);
}
}
开发者ID:didixp,项目名称:Ark-Dev-Kit,代码行数:31,代码来源:BTNode.cpp
示例3: OnBreakpointRemoved
void FBehaviorTreeDebugger::OnBreakpointRemoved(class UBehaviorTreeGraphNode* Node)
{
if (IsDebuggerReady())
{
UBTNode* BTNode = Cast<UBTNode>(Node->NodeInstance);
if (BTNode)
{
ActiveBreakpoints.RemoveSingleSwap(BTNode->GetExecutionIndex());
}
}
}
开发者ID:Codermay,项目名称:Unreal4,代码行数:11,代码来源:BehaviorTreeDebugger.cpp
示例4: FindBlackboardAsset
const UBlackboardData* FBlackboardSelectorDetails::FindBlackboardAsset(UObject* InObj)
{
for (UObject* TestOb = InObj; TestOb; TestOb = TestOb->GetOuter())
{
UBTNode* NodeOb = Cast<UBTNode>(TestOb);
if (NodeOb)
{
return NodeOb->GetBlackboardAsset();
}
}
return NULL;
}
开发者ID:JustDo1989,项目名称:UnrealEngine4.11-HairWorks,代码行数:13,代码来源:BlackboardSelectorDetails.cpp
示例5: ResetNodeOwner
void UBehaviorTreeGraphNode::PostEditImport()
{
ResetNodeOwner();
if (NodeInstance)
{
UBehaviorTree* BT = Cast<UBehaviorTree>(GetBehaviorTreeGraph()->GetOuter());
if (BT)
{
UBTNode* BTNode = (UBTNode*)NodeInstance;
BTNode->InitializeFromAsset(*BT);
BTNode->InitializeNode(NULL, MAX_uint16, 0, 0);
}
}
}
开发者ID:kidaa,项目名称:UnrealEngineVR,代码行数:15,代码来源:BehaviorTreeGraphNode.cpp
示例6: RebuildExecutionOrder
void UBehaviorTreeGraph::RebuildExecutionOrder()
{
// initial cleanup & root node search
UBehaviorTreeGraphNode_Root* RootNode = NULL;
for (int32 Index = 0; Index < Nodes.Num(); ++Index)
{
UBehaviorTreeGraphNode* Node = Cast<UBehaviorTreeGraphNode>(Nodes[Index]);
// prepare node instance
UBTNode* NodeInstance = Cast<UBTNode>(Node->NodeInstance);
if (NodeInstance)
{
// mark all nodes as disconnected first, path from root will replace it with valid values later
NodeInstance->InitializeNode(NULL, MAX_uint16, 0, 0);
}
// cache root
if (RootNode == NULL)
{
RootNode = Cast<UBehaviorTreeGraphNode_Root>(Nodes[Index]);
}
UBehaviorTreeGraphNode_CompositeDecorator* CompositeDecorator = Cast<UBehaviorTreeGraphNode_CompositeDecorator>(Nodes[Index]);
if (CompositeDecorator)
{
CompositeDecorator->ResetExecutionRange();
}
}
if (RootNode && RootNode->Pins.Num() > 0 && RootNode->Pins[0]->LinkedTo.Num() > 0)
{
UBehaviorTreeGraphNode* Node = Cast<UBehaviorTreeGraphNode>(RootNode->Pins[0]->LinkedTo[0]->GetOwningNode());
if (Node)
{
UBTCompositeNode* BTNode = Cast<UBTCompositeNode>(Node->NodeInstance);
if (BTNode)
{
uint16 ExecutionIndex = 0;
uint8 TreeDepth = 0;
BTNode->InitializeNode(NULL, ExecutionIndex, 0, TreeDepth);
ExecutionIndex++;
BTGraphHelpers::RebuildExecutionOrder(Node, BTNode, &ExecutionIndex, TreeDepth);
}
}
}
}
开发者ID:1vanK,项目名称:AHRUnrealEngine,代码行数:48,代码来源:BehaviorTreeGraph.cpp
示例7: PostPlacedNewNode
void UBehaviorTreeGraphNode::PostPlacedNewNode()
{
UClass* NodeClass = ClassData.GetClass(true);
if (NodeClass)
{
UBehaviorTree* BT = Cast<UBehaviorTree>(GetBehaviorTreeGraph()->GetOuter());
if (BT)
{
NodeInstance = ConstructObject<UBTNode>(NodeClass, BT);
UBTNode* BTNode = (UBTNode*)NodeInstance;
BTNode->SetFlags(RF_Transactional);
BTNode->InitializeFromAsset(*BT);
BTNode->InitializeNode(NULL, MAX_uint16, 0, 0);
}
}
}
开发者ID:kidaa,项目名称:UnrealEngineVR,代码行数:17,代码来源:BehaviorTreeGraphNode.cpp
示例8: OnBlackboardUpdate
void UBehaviorTreeGraphNode_CompositeDecorator::OnBlackboardUpdate()
{
UBehaviorTreeDecoratorGraph* MyGraph = Cast<UBehaviorTreeDecoratorGraph>(BoundGraph);
UBehaviorTree* BTAsset = Cast<UBehaviorTree>(GetOuter()->GetOuter());
if (MyGraph && BTAsset)
{
for (int32 i = 0; i < MyGraph->Nodes.Num(); i++)
{
UBehaviorTreeDecoratorGraphNode_Decorator* MyNode = Cast<UBehaviorTreeDecoratorGraphNode_Decorator>(MyGraph->Nodes[i]);
UBTNode* MyNodeInstance = MyNode ? Cast<UBTNode>(MyNode->NodeInstance) : NULL;
if (MyNodeInstance)
{
MyNodeInstance->InitializeFromAsset(*BTAsset);
}
}
}
}
开发者ID:Codermay,项目名称:Unreal4,代码行数:17,代码来源:BehaviorTreeGraphNode_CompositeDecorator.cpp
示例9: UpdateAbortHighlight
void UBehaviorTreeGraph::UpdateAbortHighlight(struct FAbortDrawHelper& Mode0, struct FAbortDrawHelper& Mode1)
{
for (int32 Index = 0; Index < Nodes.Num(); ++Index)
{
UBehaviorTreeGraphNode* Node = Cast<UBehaviorTreeGraphNode>(Nodes[Index]);
UBTNode* NodeInstance = Node ? Cast<UBTNode>(Node->NodeInstance) : NULL;
if (NodeInstance)
{
const uint16 ExecIndex = NodeInstance->GetExecutionIndex();
Node->bHighlightInAbortRange0 = (ExecIndex != MAX_uint16) && (ExecIndex >= Mode0.AbortStart) && (ExecIndex <= Mode0.AbortEnd);
Node->bHighlightInAbortRange1 = (ExecIndex != MAX_uint16) && (ExecIndex >= Mode1.AbortStart) && (ExecIndex <= Mode1.AbortEnd);
Node->bHighlightInSearchRange0 = (ExecIndex != MAX_uint16) && (ExecIndex >= Mode0.SearchStart) && (ExecIndex <= Mode0.SearchEnd);
Node->bHighlightInSearchRange1 = (ExecIndex != MAX_uint16) && (ExecIndex >= Mode1.SearchStart) && (ExecIndex <= Mode1.SearchEnd);
Node->bHighlightInSearchTree = false;
}
}
}
开发者ID:1vanK,项目名称:AHRUnrealEngine,代码行数:18,代码来源:BehaviorTreeGraph.cpp
示例10: CacheBlackboardData
END_SLATE_FUNCTION_BUILD_OPTIMIZATION
void FBlackboardDecoratorDetails::CacheBlackboardData(IDetailLayoutBuilder& DetailLayout)
{
TArray<TWeakObjectPtr<UObject> > MyOuters;
DetailLayout.GetObjectsBeingCustomized(MyOuters);
CachedBlackboardAsset.Reset();
for (int32 i = 0; i < MyOuters.Num(); i++)
{
UBTNode* NodeOb = Cast<UBTNode>(MyOuters[i].Get());
if (NodeOb)
{
CachedBlackboardAsset = NodeOb->GetBlackboardAsset();
break;
}
}
}
开发者ID:Codermay,项目名称:Unreal4,代码行数:18,代码来源:BlackboardDecoratorDetails.cpp
示例11: LOCTEXT
void UBehaviorTreeGraphNode::FindDiffs(UEdGraphNode* OtherNode, FDiffResults& Results)
{
FDiffSingleResult Diff;
Diff.Diff = EDiffType::NODE_PROPERTY;
Diff.Node1 = this;
Diff.Node2 = OtherNode;
Diff.ToolTip = LOCTEXT("DIF_NodePropertyToolTip", "A Property of the node has changed");
Diff.DisplayColor = FLinearColor(0.25f,0.71f,0.85f);
UBehaviorTreeGraphNode* ThisBehaviorTreeNode = Cast<UBehaviorTreeGraphNode>(this);
UBehaviorTreeGraphNode* OtherBehaviorTreeNode = Cast<UBehaviorTreeGraphNode>(OtherNode);
if(ThisBehaviorTreeNode && OtherBehaviorTreeNode)
{
DiffProperties( ThisBehaviorTreeNode->GetClass(), ThisBehaviorTreeNode, OtherBehaviorTreeNode, Results, Diff );
UBTNode* ThisNodeInstance = Cast<UBTNode>(ThisBehaviorTreeNode->NodeInstance);
UBTNode* OtherNodeInstance = Cast<UBTNode>(OtherBehaviorTreeNode->NodeInstance);
if(ThisNodeInstance && OtherNodeInstance)
{
DiffProperties( ThisNodeInstance->GetClass(), ThisNodeInstance, OtherNodeInstance, Results, Diff );
}
}
}
开发者ID:kidaa,项目名称:UnrealEngineVR,代码行数:23,代码来源:BehaviorTreeGraphNode.cpp
示例12: UpdateBlackboardChange
void UBehaviorTreeGraph::UpdateBlackboardChange()
{
UBehaviorTree* BTAsset = Cast<UBehaviorTree>(GetOuter());
if (BTAsset == nullptr)
{
return;
}
for (int32 Index = 0; Index < Nodes.Num(); ++Index)
{
UBehaviorTreeGraphNode* MyNode = Cast<UBehaviorTreeGraphNode>(Nodes[Index]);
if (MyNode)
{
UBTNode* MyNodeInstance = Cast<UBTNode>(MyNode->NodeInstance);
if (MyNodeInstance)
{
MyNodeInstance->InitializeFromAsset(*BTAsset);
}
}
for (int32 iDecorator = 0; iDecorator < MyNode->Decorators.Num(); iDecorator++)
{
UBTNode* MyNodeInstance = MyNode->Decorators[iDecorator] ? Cast<UBTNode>(MyNode->Decorators[iDecorator]->NodeInstance) : NULL;
if (MyNodeInstance)
{
MyNodeInstance->InitializeFromAsset(*BTAsset);
}
UBehaviorTreeGraphNode_CompositeDecorator* CompDecoratorNode = Cast<UBehaviorTreeGraphNode_CompositeDecorator>(MyNode->Decorators[iDecorator]);
if (CompDecoratorNode)
{
CompDecoratorNode->OnBlackboardUpdate();
}
}
for (int32 iService = 0; iService < MyNode->Services.Num(); iService++)
{
UBTNode* MyNodeInstance = MyNode->Services[iService] ? Cast<UBTNode>(MyNode->Services[iService]->NodeInstance) : NULL;
if (MyNodeInstance)
{
MyNodeInstance->InitializeFromAsset(*BTAsset);
}
}
}
}
开发者ID:1vanK,项目名称:AHRUnrealEngine,代码行数:46,代码来源:BehaviorTreeGraph.cpp
示例13: check
void UBTNode::InitializeInSubtree(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, int32& NextInstancedIndex, EBTMemoryInit::Type InitType) const
{
FBTInstancedNodeMemory* SpecialMemory = GetSpecialNodeMemory<FBTInstancedNodeMemory>(NodeMemory);
if (SpecialMemory)
{
SpecialMemory->NodeIdx = INDEX_NONE;
}
if (bCreateNodeInstance)
{
// composite nodes can't be instanced!
check(IsA(UBTCompositeNode::StaticClass()) == false);
UBTNode* NodeInstance = OwnerComp.NodeInstances.IsValidIndex(NextInstancedIndex) ? OwnerComp.NodeInstances[NextInstancedIndex] : NULL;
if (NodeInstance == NULL)
{
NodeInstance = (UBTNode*)StaticDuplicateObject(this, &OwnerComp);
NodeInstance->InitializeNode(GetParentNode(), GetExecutionIndex(), GetMemoryOffset(), GetTreeDepth());
NodeInstance->bIsInstanced = true;
OwnerComp.NodeInstances.Add(NodeInstance);
}
check(NodeInstance);
check(SpecialMemory);
SpecialMemory->NodeIdx = NextInstancedIndex;
NodeInstance->SetOwner(OwnerComp.GetOwner());
NodeInstance->InitializeMemory(OwnerComp, NodeMemory, InitType);
check(TreeAsset);
NodeInstance->InitializeFromAsset(*TreeAsset);
NodeInstance->OnInstanceCreated(OwnerComp);
NextInstancedIndex++;
}
else
{
InitializeMemory(OwnerComp, NodeMemory, InitType);
}
}
开发者ID:zhaoyizheng0930,项目名称:UnrealEngine,代码行数:40,代码来源:BTNode.cpp
示例14: GetObjectsWithOuter
void UBehaviorTreeGraph::RemoveOrphanedNodes()
{
UBehaviorTree* BTAsset = CastChecked<UBehaviorTree>(GetOuter());
// Obtain a list of all nodes that should be in the asset
TSet<UBTNode*> AllNodes;
for (int32 Index = 0; Index < Nodes.Num(); ++Index)
{
UBehaviorTreeGraphNode* MyNode = Cast<UBehaviorTreeGraphNode>(Nodes[Index]);
if (MyNode)
{
UBTNode* MyNodeInstance = Cast<UBTNode>(MyNode->NodeInstance);
if (MyNodeInstance)
{
AllNodes.Add(MyNodeInstance);
}
for (int32 iDecorator = 0; iDecorator < MyNode->Decorators.Num(); iDecorator++)
{
UBehaviorTreeGraphNode_CompositeDecorator* SubgraphNode = Cast<UBehaviorTreeGraphNode_CompositeDecorator>(MyNode->Decorators[iDecorator]);
if (SubgraphNode)
{
TArray<UBTDecorator*> NodeInstances;
TArray<FBTDecoratorLogic> DummyOps;
SubgraphNode->CollectDecoratorData(NodeInstances, DummyOps);
for (int32 SubIdx = 0; SubIdx < NodeInstances.Num(); SubIdx++)
{
AllNodes.Add(NodeInstances[SubIdx]);
}
}
else
{
UBTNode* MyDecoratorNodeInstance = MyNode->Decorators[iDecorator] ? Cast<UBTNode>(MyNode->Decorators[iDecorator]->NodeInstance) : NULL;
if (MyDecoratorNodeInstance)
{
AllNodes.Add(MyDecoratorNodeInstance);
}
}
}
for (int32 iService = 0; iService < MyNode->Services.Num(); iService++)
{
UBTNode* MyServiceNodeInstance = MyNode->Services[iService] ? Cast<UBTNode>(MyNode->Services[iService]->NodeInstance) : NULL;
if (MyServiceNodeInstance)
{
AllNodes.Add(MyServiceNodeInstance);
}
}
}
}
// Obtain a list of all nodes actually in the asset and discard unused nodes
TArray<UObject*> AllInners;
const bool bIncludeNestedObjects = false;
GetObjectsWithOuter(BTAsset, AllInners, bIncludeNestedObjects);
for (auto InnerIt = AllInners.CreateConstIterator(); InnerIt; ++InnerIt)
{
UBTNode* Node = Cast<UBTNode>(*InnerIt);
if (Node && !AllNodes.Contains(Node))
{
Node->SetFlags(RF_Transient);
Node->Rename(NULL, GetTransientPackage(), REN_DontCreateRedirectors | REN_NonTransactional | REN_ForceNoResetLoaders);
}
}
}
开发者ID:1vanK,项目名称:AHRUnrealEngine,代码行数:66,代码来源:BehaviorTreeGraph.cpp
示例15: UpdateAsset
void UBehaviorTreeGraph::UpdateAsset(EDebuggerFlags DebuggerFlags, bool bBumpVersion)
{
if (bLockUpdates)
{
return;
}
// initial cleanup & root node search
UBehaviorTreeGraphNode_Root* RootNode = NULL;
for (int32 Index = 0; Index < Nodes.Num(); ++Index)
{
UBehaviorTreeGraphNode* Node = Cast<UBehaviorTreeGraphNode>(Nodes[Index]);
// debugger flags
if (DebuggerFlags == ClearDebuggerFlags)
{
Node->ClearDebuggerState();
for (int32 iAux = 0; iAux < Node->Services.Num(); iAux++)
{
Node->Services[iAux]->ClearDebuggerState();
}
for (int32 iAux = 0; iAux < Node->Decorators.Num(); iAux++)
{
Node->Decorators[iAux]->ClearDebuggerState();
}
}
// parent chain
Node->ParentNode = NULL;
for (int32 iAux = 0; iAux < Node->Services.Num(); iAux++)
{
Node->Services[iAux]->ParentNode = Node;
}
for (int32 iAux = 0; iAux < Node->Decorators.Num(); iAux++)
{
Node->Decorators[iAux]->ParentNode = Node;
}
// prepare node instance
UBTNode* NodeInstance = Cast<UBTNode>(Node->NodeInstance);
if (NodeInstance)
{
// mark all nodes as disconnected first, path from root will replace it with valid values later
NodeInstance->InitializeNode(NULL, MAX_uint16, 0, 0);
}
// cache root
if (RootNode == NULL)
{
RootNode = Cast<UBehaviorTreeGraphNode_Root>(Nodes[Index]);
}
UBehaviorTreeGraphNode_CompositeDecorator* CompositeDecorator = Cast<UBehaviorTreeGraphNode_CompositeDecorator>(Nodes[Index]);
if (CompositeDecorator)
{
CompositeDecorator->ResetExecutionRange();
}
}
if (RootNode && RootNode->Pins.Num() > 0 && RootNode->Pins[0]->LinkedTo.Num() > 0)
{
UBehaviorTreeGraphNode* Node = Cast<UBehaviorTreeGraphNode>(RootNode->Pins[0]->LinkedTo[0]->GetOwningNode());
if (Node)
{
CreateBTFromGraph(Node);
if (bBumpVersion)
{
GraphVersion++;
}
}
}
}
开发者ID:1vanK,项目名称:AHRUnrealEngine,代码行数:76,代码来源:BehaviorTreeGraph.cpp
示例16: CreateChildren
void CreateChildren(UBehaviorTree* BTAsset, UBTCompositeNode* RootNode, const UBehaviorTreeGraphNode* RootEdNode, uint16* ExecutionIndex, uint8 TreeDepth)
{
if (RootEdNode == NULL)
{
return;
}
RootNode->Children.Reset();
RootNode->Services.Reset();
// collect services
if (RootEdNode->Services.Num())
{
for (int32 i = 0; i < RootEdNode->Services.Num(); i++)
{
UBTService* ServiceInstance = RootEdNode->Services[i] ? Cast<UBTService>(RootEdNode->Services[i]->NodeInstance) : NULL;
if (ServiceInstance)
{
if (Cast<UBehaviorTree>(ServiceInstance->GetOuter()) == NULL)
{
ServiceInstance->Rename(NULL, BTAsset);
}
ServiceInstance->InitializeNode(RootNode, *ExecutionIndex, 0, TreeDepth);
*ExecutionIndex += 1;
RootNode->Services.Add(ServiceInstance);
}
}
}
// gather all nodes
int32 ChildIdx = 0;
for (int32 PinIdx = 0; PinIdx < RootEdNode->Pins.Num(); PinIdx++)
{
UEdGraphPin* Pin = RootEdNode->Pins[PinIdx];
if (Pin->Direction != EGPD_Output)
{
continue;
}
// sort connections so that they're organized the same as user can see in the editor
Pin->LinkedTo.Sort(FCompareNodeXLocation());
for (int32 Index = 0; Index < Pin->LinkedTo.Num(); ++Index)
{
UBehaviorTreeGraphNode* GraphNode = Cast<UBehaviorTreeGraphNode>(Pin->LinkedTo[Index]->GetOwningNode());
if (GraphNode == NULL)
{
continue;
}
UBTTaskNode* TaskInstance = Cast<UBTTaskNode>(GraphNode->NodeInstance);
if (TaskInstance && Cast<UBehaviorTree>(TaskInstance->GetOuter()) == NULL)
{
TaskInstance->Rename(NULL, BTAsset);
}
UBTCompositeNode* CompositeInstance = Cast<UBTCompositeNode>(GraphNode->NodeInstance);
if (CompositeInstance && Cast<UBehaviorTree>(CompositeInstance->GetOuter()) == NULL)
{
CompositeInstance->Rename(NULL, BTAsset);
}
if (TaskInstance == NULL && CompositeInstance == NULL)
{
continue;
}
// collect decorators
TArray<UBTDecorator*> DecoratorInstances;
TArray<FBTDecoratorLogic> DecoratorOperations;
CollectDecorators(BTAsset, GraphNode, DecoratorInstances, DecoratorOperations, true, RootNode, ExecutionIndex, TreeDepth, ChildIdx);
// store child data
RootNode->Children.AddZeroed();
FBTCompositeChild& ChildInfo = RootNode->Children[ChildIdx];
ChildInfo.ChildComposite = CompositeInstance;
ChildInfo.ChildTask = TaskInstance;
ChildInfo.Decorators = DecoratorInstances;
ChildInfo.DecoratorOps = DecoratorOperations;
ChildIdx++;
UBTNode* ChildNode = CompositeInstance ? (UBTNode*)CompositeInstance : (UBTNode*)TaskInstance;
if (ChildNode && Cast<UBehaviorTree>(ChildNode->GetOuter()) == NULL)
{
ChildNode->Rename(NULL, BTAsset);
}
InitializeInjectedNodes(GraphNode, RootNode, *ExecutionIndex, TreeDepth, ChildIdx);
// special case: subtrees
UBTTask_RunBehavior* SubtreeTask = Cast<UBTTask_RunBehavior>(TaskInstance);
if (SubtreeTask)
{
*ExecutionIndex += SubtreeTask->GetInjectedNodesCount();
}
ChildNode->InitializeNode(RootNode, *ExecutionIndex, 0, TreeDepth);
*ExecutionIndex += 1;
//.........这里部分代码省略.........
开发者ID:1vanK,项目名称:AHRUnrealEngine,代码行数:101,代码来源:BehaviorTreeGraph.cpp
示例17: sizeof
//.........这里部分代码省略.........
bool bAlreadyInjected = false;
for (int32 Idx = 0; Idx < LinkData.Decorators.Num(); Idx++)
{
if (LinkData.Decorators[Idx] && LinkData.Decorators[Idx]->IsInjected())
{
bAlreadyInjected = true;
break;
}
}
// add decorators to link
const int32 NumOriginalDecorators = LinkData.Decorators.Num();
for (int32 Idx = 0; Idx < NumInjectedDecorators; Idx++)
{
UBTDecorator* InstancedOb = Cast<UBTDecorator>(OwnerComp.NodeInstances[FirstNodeIdx + Idx]);
InstancedOb->InitializeFromAsset(*BehaviorAsset);
InstancedOb->InitializeDecorator(ChildIdx);
if (!bAlreadyInjected)
{
LinkData.Decorators.Add(InstancedOb);
}
}
// update composite logic operators
if (!bAlreadyInjected && (LinkData.DecoratorOps.Num() || BehaviorAsset->RootDecoratorOps.Num()))
{
const int32 NumOriginalOps = LinkData.DecoratorOps.Num();
if (NumOriginalDecorators > 0)
{
// and operator for two groups of composites: original and new one
FBTDecoratorLogic MasterAndOp(EBTDecoratorLogic::And, LinkData.DecoratorOps.Num() ? 2 : (NumOriginalDecorators + 1));
LinkData.DecoratorOps.Insert(MasterAndOp, 0);
if (NumOriginalOps == 0)
{
// add Test operations, original link didn't have composite operators
for (int32 Idx = 0; Idx < NumOriginalDecorators; Idx++)
{
FBTDecoratorLogic TestOp(EBTDecoratorLogic::Test, Idx);
LinkData.DecoratorOps.Add(TestOp);
}
}
}
// add injected operators
if (BehaviorAsset->RootDecoratorOps.Num() == 0)
{
FBTDecoratorLogic InjectedAndOp(EBTDecoratorLogic::And, NumInjectedDecorators);
LinkData.DecoratorOps.Add(InjectedAndOp);
for (int32 Idx = 0; Idx < NumInjectedDecorators; Idx++)
{
FBTDecoratorLogic TestOp(EBTDecoratorLogic::Test, NumOriginalDecorators + Idx);
LinkData.DecoratorOps.Add(TestOp);
}
}
else
{
for (int32 Idx = 0; Idx < BehaviorAsset->RootDecoratorOps.Num(); Idx++)
{
FBTDecoratorLogic InjectedOp = BehaviorAsset->RootDecoratorOps[Idx];
if (InjectedOp.Operation == EBTDecoratorLogic::Test)
{
InjectedOp.Number += NumOriginalDecorators;
}
LinkData.DecoratorOps.Add(InjectedOp);
}
}
}
#if USE_BEHAVIORTREE_DEBUGGER
if (!bAlreadyInjected)
{
// insert to NextExecutionNode list for debugger
UBTNode* NodeIt = GetParentNode();
while (NodeIt && NodeIt->GetNextNode() != this)
{
NodeIt = NodeIt->GetNextNode();
}
if (NodeIt)
{
NodeIt->InitializeExecutionOrder(OwnerComp.NodeInstances[FirstNodeIdx]);
NodeIt = NodeIt->GetNextNode();
for (int32 Idx = 1; Idx < NumInjectedDecorators; Idx++)
{
NodeIt->InitializeExecutionOrder(OwnerComp.NodeInstances[FirstNodeIdx + Idx]);
NodeIt = NodeIt->GetNextNode();
}
NodeIt->InitializeExecutionOrder((UBTNode*)this);
}
}
#endif
}
}
}
开发者ID:kidaa,项目名称:UnrealEngineVR,代码行数:101,代码来源:BTTask_RunBehavior.cpp
示例18: UsesBlueprint
bool UBehaviorTreeGraphNode::UsesBlueprint() const
{
UBTNode* BTNodeInstance = Cast<UBTNode>(NodeInstance);
return BTNodeInstance != nullptr ? BTNodeInstance->UsesBlueprint() : false;
}
开发者ID:kidaa,项目名称:UnrealEngineVR,代码行数:5,代码来源:BehaviorTreeGraphNode.cpp
示例19: GetNameIcon
FName UBehaviorTreeGraphNode::GetNameIcon() const
{
UBTNode* BTNodeInstance = Cast<UBTNode>(NodeInstance);
return BTNodeInstance != nullptr ? BTNodeInstance->GetNodeIconName() : FName("BTEditor.Graph.BTNode.Icon");
}
开发者ID:kidaa,项目名称:UnrealEngineVR,代码行数:5,代码来源:BehaviorTreeGraphNode.cpp
注:本文中的UBTNode类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论