Goal: components with start_at/end_at are only painted inside their window, for every component type, in the main pipeline.
Evidence: paint_pass.rs never calls timing(); only Particle is gated (crates/rustmotion/src/engine/render/scene.rs:349-353). Fields are silently ignored for box components.
Invariants: a component outside its window produces no pixels; a component with no timing renders exactly as today.
Out of scope: the timeline field (separate issue), animation delay semantics (AnimationEffect.delay stays the animation mechanism).
Acceptance: regression test — a text with start_at: 2 in a 4s scene is absent at t=1s, present at t=3s; full suite green.
Files: crates/rustmotion-core/src/engine/paint_pass.rs, possibly box_tree.rs/box_builder.rs to carry the timing window.
Verify: cargo test --workspace
Goal: components with
start_at/end_atare only painted inside their window, for every component type, in the main pipeline.Evidence:
paint_pass.rsnever callstiming(); only Particle is gated (crates/rustmotion/src/engine/render/scene.rs:349-353). Fields are silently ignored for box components.Invariants: a component outside its window produces no pixels; a component with no timing renders exactly as today.
Out of scope: the
timelinefield (separate issue), animation delay semantics (AnimationEffect.delaystays the animation mechanism).Acceptance: regression test — a text with
start_at: 2in a 4s scene is absent at t=1s, present at t=3s; full suite green.Files:
crates/rustmotion-core/src/engine/paint_pass.rs, possiblybox_tree.rs/box_builder.rsto carry the timing window.Verify:
cargo test --workspace