Concepts
The XMas goal is that you can forgive to develop code to use animations in your game, to do this you will need a Animation Graph. Animation graph is a graph of nodes binded to one our yours class by reflexion. The system evaluate all nodes and get all the result animations with the corresponding blending.
We have different animation nodes types:
| Node Name | Reflexion Value | Comment |
| Start | None | Initial node, can be only one! |
| Animation | None | Node that contains a animation, this node hasn't output, it is a finish node |
| BlendList | Index of child | Basic blend list node, can blend in a variable items numbers, each one with different blend values |
| CrossFade | Value from 0 to 1 | Node that blend between two values from 0 to 1 |
| Random | None | Choose a randomly a child to play, when finish play another with blend, useful to have different animations with one action, like 3 idles |
| Rangecrossfade | Value between any range | Do a crossfade between values in selected range |
We need one Start Node, then the system calculate the weight of all children based on node type and finally get all Animation nodes with the final weights and aply with blending to the model. That's all
Editor
Editor has his own
EditorDocumentation
Using XMas
There is a example called XMasTest
Add XMas reference to your project
Add XNACalc3DLoad to your Content preferences
Set CCald3DImporter in content importer
Set CCald3DProcess in content processor
- Add a XMas Graph
- On LoadContent
initialModel = Content.Load<Model>("Models/pink/pink");
CSkeletonData skinningData = initialModel.Tag as CSkeletonData;
- Create a instanced of XMAnimationSystem loading from file
_animationSystem = XMAnimationSystem.LoadFromFile(@".\Content\AnimGraph.xmas", skinningData, PluginList);
_animationSystem.ReflexionObject = testReflexion;
- Update Animation system (Update)
_animationSystem.Update(gameTime.ElapsedGameTime);
Matrix[] bones = _animationSystem.GetSkinTransforms();
// Render the skinned mesh.
foreach (ModelMesh mesh in initialModel.Meshes)
{
foreach (Effect effect in mesh.Effects)
{
effect.Parameters["Bones"].SetValue(bones);
effect.Parameters["View"].SetValue(view);
effect.Parameters["Projection"].SetValue(projection);
}
mesh.Draw();
}
Adding custom Animation Nodes
There is a example called PluginTest
It's easy, to create simply create a class derivate from AnimationNode or any class derivated from this. You can read all available methods and fields on
technical documentationTo use with editor copy the result dll to Editor Path\Content\Nodes
To use with your game only add a reference to plugin dll to project
Adding custom importers
No supported yet
Technical documentation
You can download from release or read
online