A Sequence is a specialized type of Chaser that is bound to a single Scene. Instead of playing different scenes in order, a Sequence animates the channel values of its bound scene across multiple steps, creating smooth transitions and animations.
Sequences inherit all functionality from Chasers but add scene-binding capabilities for streamlined animation workflows.
struct ChaserStep { quint32 fid; // Always equals boundSceneID QList<SceneValue> values; // Channel values for this step uint fadeIn; // Fade in time uint hold; // Hold time uint fadeOut; // Fade out time};
// Set the bound scenevoid setBoundSceneID(quint32 sceneID);// Get the bound scene IDquint32 boundSceneID() const;// Get component list (returns bound scene)QList<quint32> components() const;
The fixup mechanism (sequence.cpp:231) handles scene mismatches:
void Sequence::postLoad() { if (m_needFixup == false) return; Scene *scene = doc()->function(boundSceneID()); QList<SceneValue> sceneValues = scene->values(); // Synchronize each step with scene structure for (ChaserStep &step : m_steps) { step.values = sceneValues; // Restore original values where they exist }}
This ensures:
All steps have consistent channel structure
New scene channels appear in all steps (value = 0)
<!-- Red --><Value>0:255</Value><Value>1:0</Value><Value>2:0</Value><!-- Yellow --><Value>0:255</Value><Value>1:255</Value><Value>2:0</Value><!-- Green --><Value>0:0</Value><Value>1:255</Value><Value>2:0</Value>
<!-- Position 1 --><Value>0:0</Value> <!-- Pan --><Value>1:128</Value> <!-- Tilt --><!-- Position 2 --><Value>0:128</Value><Value>1:128</Value><!-- Position 3 --><Value>0:255</Value><Value>1:128</Value>
Sequences with many steps and channels use more memory
The fixup mechanism adds load time overhead
Hidden scenes (used only as sequence containers) don’t render in UI
Sequences require their bound scene to exist. Deleting the bound scene will break the sequence. Always delete sequences before deleting their bound scenes.