BlendClock¶
from acron.anim import BlendClock
- class BlendClock(actor)¶
Bases:
objectOne animation clock per clip – Godot’s
AnimationTree, on Acron.Godot advances every input of a blend by the same delta each process tick; each
AnimationNodeAnimationwraps at its own length, and the mixer reads all of them at that instant. Acron has no such tick:Actor.loophands a clip to the GLOBAL clock – the display’s, not the fixed step’s – and a port that poses only the loudest clip therefore has a blend in whichevery quieter clip free-runs at the display rate, out of phase with the one that is driven, and ignoring the tree’s
TimeScale, anda clip that was posed once and then stopped being the loudest FREEZES at the frame it was left on, because
pose()stops the control – so the pose jumps at every weight crossing, twice per walk-to-idle.
Both are invisible to a test that watches the body: the character is in the right place, moving at the right speed, wearing a pose assembled out of clips at unrelated frames. This keeps one time per clip name, advances each by
dt * rate(theAnimationNodeTimeScaleabove it), wraps it at that clip’s own length, and poses EVERY control the clip has – a split skeleton keeps one perActorsubpart, and they must land on one frame or the two halves of the character animate against each other.A clip’s clock starts at 0 when it enters the blend and is dropped when it leaves, which is Godot’s
input_N/reseton a Transition: a jump clip begins at its first frame every jump, instead of wherever a shared clock happened to be.Inheritance diagram
digraph inheritancef375c8b081 { bgcolor=transparent; rankdir=BT; size="8.0, 12.0"; "BlendClock" [URL="acron.anim.BlendClock.html#acron.anim.BlendClock",fillcolor=white,fontname="Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans",fontsize=11,height=0.25,shape=box,style="",target="_top",tooltip="One animation clock per clip -- Godot's ``AnimationTree``, on Acron."]; }