Files
o3de/Gems/EMotionFX/Code/Tests/TestAssetCode/AnimGraphFactory.cpp
T
2021-03-08 14:30:57 -08:00

148 lines
4.8 KiB
C++

/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#include <EMotionFX/Source/AnimGraph.h>
#include <EMotionFX/Source/AnimGraphMotionNode.h>
#include <EMotionFX/Source/AnimGraphStateMachine.h>
#include <EMotionFX/Source/AnimGraphStateTransition.h>
#include <MCore/Source/ReflectionSerializer.h>
#include <Tests/TestAssetCode/AnimGraphFactory.h>
namespace EMotionFX
{
EmptyAnimGraph::EmptyAnimGraph()
{
// Emptry animgraph with nothing inside.
SetRootStateMachine(aznew AnimGraphStateMachine());
GetRootStateMachine()->SetName("rootStateMachine");
}
void EmptyAnimGraph::Reflect(AZ::ReflectContext* context)
{
AZ::SerializeContext* serializeContext = azrtti_cast<AZ::SerializeContext*>(context);
if (serializeContext)
{
serializeContext->Class<EmptyAnimGraph>()
->Version(1);
}
}
AnimGraphInstance* EmptyAnimGraph::GetAnimGraphInstance(ActorInstance* actorInstance, MotionSet* motionSet)
{
// TODO: Move this method to AnimGraphInstanceFactory when we create it.
AnimGraphInstance* animGraphInstance = AnimGraphInstance::Create(this, actorInstance, motionSet);
actorInstance->SetAnimGraphInstance(animGraphInstance);
animGraphInstance->IncreaseReferenceCount();
animGraphInstance->RecursiveInvalidateUniqueDatas();
return animGraphInstance;
}
TwoMotionNodeAnimGraph::TwoMotionNodeAnimGraph()
{
/*
Inside the root state machine:
+-----------+
|motionNodeA|
+-----------+
+-----------+
|motionNodeB|
+-----------+
*/
m_motionNodeA = aznew AnimGraphMotionNode();
m_motionNodeB = aznew AnimGraphMotionNode();
m_motionNodeA->SetName("A");
m_motionNodeB->SetName("B");
GetRootStateMachine()->SetName("rootStateMachine");
GetRootStateMachine()->AddChildNode(m_motionNodeA);
GetRootStateMachine()->AddChildNode(m_motionNodeB);
GetRootStateMachine()->SetEntryState(m_motionNodeA);
}
void TwoMotionNodeAnimGraph::Reflect(AZ::ReflectContext* context)
{
AZ::SerializeContext* serializeContext = azrtti_cast<AZ::SerializeContext*>(context);
if (serializeContext)
{
serializeContext->Class<TwoMotionNodeAnimGraph>()
->Version(1);
}
}
AnimGraphMotionNode* TwoMotionNodeAnimGraph::GetMotionNodeA()
{
return m_motionNodeA;
}
AnimGraphMotionNode* TwoMotionNodeAnimGraph::GetMotionNodeB()
{
return m_motionNodeB;
}
OneBlendTreeNodeAnimGraph::OneBlendTreeNodeAnimGraph()
{
/*
+-----------+
|m_blendTree|
+-----------+
*/
m_blendTree = aznew BlendTree();
GetRootStateMachine()->AddChildNode(m_blendTree);
GetRootStateMachine()->SetEntryState(m_blendTree);
}
void OneBlendTreeNodeAnimGraph::Reflect(AZ::ReflectContext* context)
{
AZ::SerializeContext* serializeContext = azrtti_cast<AZ::SerializeContext*>(context);
if (serializeContext)
{
serializeContext->Class<OneBlendTreeNodeAnimGraph>()
->Version(1);
}
}
BlendTree* OneBlendTreeNodeAnimGraph::GetBlendTreeNode() const
{
return m_blendTree;
}
OneBlendTreeParameterNodeAnimGraph::OneBlendTreeParameterNodeAnimGraph()
{
/*
Inside blend tree:
+---------------+ +-----------+
|m_parameterNode| |m_finalNode|
+---------------+ +-----------+
*/
m_parameterNode = aznew BlendTreeParameterNode();
m_parameterNode->SetName("Parameters0");
m_finalNode = aznew BlendTreeFinalNode();
m_finalNode->SetName("FinalNode0");
BlendTree* blendTree = aznew BlendTree();
blendTree->SetName("BlendTree0");
blendTree->AddChildNode(m_parameterNode);
blendTree->AddChildNode(m_finalNode);
GetRootStateMachine()->AddChildNode(blendTree);
GetRootStateMachine()->SetEntryState(blendTree);
InitAfterLoading();
}
BlendTreeParameterNode* OneBlendTreeParameterNodeAnimGraph::GetParameterNode() const
{
return m_parameterNode;
}
} // namespace EMotionFX