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;
}