v0.23.1
SimAction::rotate_smooth distributes encoder detents by an ease curve instead of fixed intervals, letting tests reproduce realistic accelerate / decelerate patterns rather than the always-equal tempo of SimAction::rotate.
Added
SimAction::rotate_smooth(ticks, total_ms, ease_fn)(src/event/sim.rs): distributesticksdetents acrosstotal_msaccording toease_fn(elapsed / total_ms) ∈ [0, 1].ease::linearreproduces the legacy fixed-tempo path;ease_in_out_cubicand similar back-loaded curves emit detents slowly at start, accelerate through the middle, and decelerate near the end. TheRotaryevents themselves are unchanged — only their wall-clock distribution shifts.
Changed
RotateAction.ease_fn: Option<fn(Fixed) -> Fixed>(src/event/sim.rs):NonekeepsSimAction::rotate(...)running on the existing fixed-tempo path;Someis populated bySimAction::rotate_smooth(...).
Breaking
RotateActiongains a publicease_fnfield (src/event/sim.rs): callers constructing the struct via literal must addease_fn: Nonefor the legacy fixed-tempo behaviour, or switch toSimAction::rotate(...)/SimAction::rotate_smooth(...). Pattern-match destructuring should add..to remain forward-compatible.