Provides computer graphics animation functionality.
Animation on a single entity comprises of one or more
Samplers. Each sampler
operates on a
Channel. Thus, for a single entity, conceptually each
(Channel, Sampler) pair is enough to define one part the animation, and a
Vec<(Channel, Sampler)> defines the whole animation.
In a more complex situation, an object in game may be made up of multiple entities. Say you have
a dragon monster, that is defined by a skinned mesh that has a skeleton with 10 joints. Each
joint will then be an
Entity. Our animation definition holds the samplers to run for the whole
object. To animate each of the entities of this complex object, we need a way to link the
sampler to the each of the entities.
Animation definitions are persistent and can be stored on disk. Entities however, are not. To
link the right sampler to the right entity, when we construct each of the entities such as the
joints, we track it with an index, called the
The following list might help to illustrate the scenario:
|0||body ("main" entity)|
The node index to
Entity mapping is stored in
Back to the animation definition, we also record the
node_index in the tuple, which we call a
"node". Each node is now
(node_index, Channel, Sampler) (conceptually — in code the
tuple holds references instead of the complete object). Hence, each node holds the information
of what channel the sampler belongs to, and which entity it should be applied to.
So what happens for the nodes where we only have one entity? Right now Amethyst requires you to
assign it node index
Defines a single animation.
Bundle for a complete animation setup including sampler interpolation and animation control.
Controls the state of a single running animation on a specific component type
Contains all currently running animations for an entity.
System for setting up animations, should run before
Defines the hierarchy of nodes that a single animation can control. Attached to the root entity that an animation can be defined for. Only required for animations which target more than a single node or entity.
Attaches to an entity that have animations, with links to all animations that can be run on the entity. Is not used directly by the animation systems, provided for convenience.
Joint, attach to an entity with a
Define the rest state for a component on an entity
Sampler defines a single animation for a single channel on a single component
Control a single active sampler
Sampler control set, containing a set of sampler controllers for a single component.
System for interpolating active samplers.
Bundle for only the sampler interpolation.
Skin, attach to the root entity in the mesh hierarchy
Bundle for vertex skinning
System for performing vertex skinning.
Blend method for sampler blending
State of animation
Defer the start of an animation until the relationship has done this
Control handling of animation/sampler end
Supported interpolation functions
Channels that are animatable on
Sampler primitive for Material animations
Note that material can only ever be animated with
Used when doing animation stepping (i.e only move forward/backward to discrete input values)
Channels that can be animated on
Master trait used to define animation sampling on a component
Extra data to extract from
Interpolation primitive, defines basic arithmetic needed for interpolation.
Get the animation set for an entity. If none exists, one will be added. If entity is invalid, (eg. removed before) None will be returned.
Asset storage processor for
Asset storage processor for