public interface IConstraintSchedulerWhat is solved together, and when in the frame.
No guide page documents this yet — the page shows what the code says about itself.
Remarks
⚠ Two entry points, because a one-stage seam could not host what this is for. Two characters whose goals reference each other cannot be solved independently without one of them seeing last frame's pose of the other. The pose stage runs inside IPoseProcessor, which is after each animator has mixed its layers — so a group solved there is a group of finished poses, every one of which was blended against a stale view of the others. Grouping alone was the right idea at the wrong point in the frame.
So PlanPreEvaluation runs before any animator evaluates. A group planned there can solve, publish to Published, and have every member's own evaluation read that instead of reaching for a neighbour's live pose.
The default plans nothing before evaluation, so the whole stage costs a virtual call on an empty span — which is the point of it shipping now rather than later. It is here because it decides ConstraintStack's shape, and deciding afterwards would mean opening up a type everything else already depends on.
Methods (2)
void PlanPreEvaluation(ReadOnlySpan<ConstraintStack> stacks, IConstraintGroupSink sink)Decides what to solve before any character has been evaluated.
void PlanPose(ReadOnlySpan<ConstraintStack> stacks, IConstraintGroupSink sink)Decides what to solve once every character has a pose.
Used by (4)
- AnimationSystemVixen.Animation
- DefaultConstraintSchedulerVixen.Animation
- OneGroupTestSchedulerVixen.Animation.Tests
- SeamTestsVixen.Animation.Tests