bool UCreatureAnimGraphSchema::TryCreateConnection(UEdGraphPin* A, UEdGraphPin* B) const { if (A==B) { return false; } else { UCreatureAnimTransitionNode* TransitionNode = NewObject<UCreatureAnimTransitionNode>(A->GetOwningNode()->GetGraph()); TransitionNode->NodePosX = (A->GetOwningNode()->NodePosX+ B->GetOwningNode()->NodePosX) / 2; TransitionNode->NodePosY = (A->GetOwningNode()->NodePosY+ B->GetOwningNode()->NodePosY) / 2; if (UCreatureStateMachineGraph* Graph = Cast<UCreatureStateMachineGraph>(TransitionNode->GetGraph())) { if (TransitionNode->CompiledTransition != nullptr) { TransitionNode->CompiledTransition = NewObject<UCreatureAnimTransition>(Graph->GetOuter()); TransitionNode->CompiledTransition->AnimStateMachine = Graph->ParentStateMachine; } } A->MakeLinkTo(TransitionNode->CreatePin(EEdGraphPinDirection::EGPD_Input, A->PinType, FString("In"))); TransitionNode->CreatePin(EEdGraphPinDirection::EGPD_Output, FEdGraphPinType(), FString("Out"))->MakeLinkTo(B); A->GetOwningNode()->GetGraph()->AddNode(TransitionNode); TransitionNode->TransitionTargetNode = Cast<UCreatureAnimStateNode>(B->GetOwningNode()); } return true; }
UEdGraphNode* FEdGraphSchemaAction_NewCreatureAnimationEndTransition::PerformAction(class UEdGraph* ParentGraph, UEdGraphPin* FromPin, const FVector2D Location, bool bSelectNewNode /*= true*/) { UCreatureAnimTransitionNode* NewAnimationEndTransitionNode = NewObject<UCreatureAnimTransitionNode>(ParentGraph); NewAnimationEndTransitionNode->NodePosX = Location.X; NewAnimationEndTransitionNode->NodePosY = Location.Y; NewAnimationEndTransitionNode->InputPin = NewAnimationEndTransitionNode->CreatePin(EEdGraphPinDirection::EGPD_Input, FEdGraphPinType(), TEXT("Input")); NewAnimationEndTransitionNode->OutputPin = NewAnimationEndTransitionNode->CreatePin(EEdGraphPinDirection::EGPD_Output, FEdGraphPinType(), TEXT("Output")); NewAnimationEndTransitionNode->TransitionCondition = FString(TEXT("AnimationEnd")); NewAnimationEndTransitionNode->TransitionFlag = true; ParentGraph->AddNode(NewAnimationEndTransitionNode, true, false); return NewAnimationEndTransitionNode; }