- Breaking changes:
- Remove dependency to VRChat in the AnimatorAsCode.V1 namespace. The namespace should now be usable in non-VRChat projects.
- All VRChat-specific methods are now extension functions in a separate namespace, AnimatorAsCode.V1.VRC.
- VRChat methods that modify existing assets are split into a separate namespace, AnimatorAsCode.V1.VRCDestructiveWorkflow.
- Breaking fixes:
- Fix incorrect type signature on AacFlFloatParameterGroup.ToList() and AacFlIntParameterGroup.ToList().
- Add AacFlBase.NewBlendTree():
- This allows creating blend trees as code.
- Add AacFlState.WithAnimation(AacFlBlendTree).
- Add AacFlBase.NoAnimator():
- This can be used to obtain AacFlParameter objects for use in the generation of BlendTrees and other systems, without requiring the existence of a backing animator controller.
- This can also be used in some cases where there are type casts (Bool to Float, Float to Bool).
- Add AacFlBase.NewAnimatorController():
- This is meant to be used for non-destructive workflows.
- This creates an animator controller inside the asset container. This animator controller will be reaped in the same way as other assets are reaped.
- This is equivalent to a transition that occurs after the animation is at least at 0 percent.
- It is meant to be used with sub state machine nodes exiting.
- AacFlLayer.OverrideValue(...) overloads now returns itself.
- AacFlLayer.WithAvatarMask(...) now returns itself.
- AacFlLayer.WithAvatarMaskNoTransforms(...) now returns itself.
- AacFlLayer.ResolveAvatarMask(...) now returns itself.
- Other void-returning functions in AAC do not return themselves because:
- Some of them are meant to be used for cleanup purposes rather than for build purposes, so returning void here creates a usability gap to draw attention.
- The ones used in animation keyframes marks it as the last operation that consumes the chain, as further calls would not be logical (i.e. .WithOneFrame(...).WithAnimationCurve(...))