004 Mint's Sequencer
Goals
Execution
Using Spatial variables to sample Keyframes along a Track.
Moving Keyframes and Snapping using Sliders on the Keyframe Itself.
Sequencable Elements
This is anything that can be changed by the readhead reading the contents of a Keyframe:
- Value
- Constant
- Bool...
- Byte
- int...
- Float, Float3, FloatQ...
- color, colorX
- DateTime
- string
- uri
- ...
- All Types supported by
BoxConstantValueSpatialVariable
- Gradient
- ColorX -> ColorX
- Float -> Float, Float3 -> Float3
- FloatQ -> FloatQ
- ...
- All Types supported by
BoxGradientValueSpatialVariable
- Spatial Textures (maybe usefull for custom interpolation?)
- Sample colorX along a 3D Texture (only sampled along a line so 1D)
- Using:
BoxTexture3D SpatialVariable
- Constant
- Reference
- Textures
- Slots
- Audio
- Meshes
- ...
- All Reference types supported by
BoxConstantReferenceSpatialVariable
- Impulse?
Structure
Manager
Holds:
- General / shared Flux
- [!] Track Type and name handler - Needs to be updated to work with multiple Timelines and not use specific references
- Settings
- Assets
- Dynamic Edit Ui - Templates
Instance count:
One or Two per Session. Less is better to minimize Duplikate Logic, assets and such.
Notes:
Timelines
Holds:
- Tracks
- Playback head
Instance count:
Usually one for each "Project". For example one for the environment Animations, one for Gameplay and one for effects.
Notes:
Holds:
- General / shared Flux
- Type and name handler
- Templates
- Settings
- Assets
- Dynamic Edit Ui - Templates
Instance count:
One or Two per Session. Less is better to minimize Duplikate Logic, assets and such.
Notes:
Holds:
Tracks
Playback head
Instance count:
Usually one for each "Project". For example one for the environment Animations, one for Gameplay and one for effects.
Notes:
Holds:
Keyframes
Instance count:
One for each unique Sequencable Element Type
Notes:
Each Track contains some basic information about itself:
- What Sequencable Element it is meant to Sequence
- Value
- What Type
- Default value
- Hold value or fallback to default
- Reference
- Ref type
- Hold value or fallback to default
- Other Tracks
- Reference to that Track
- Sequencing mode
- Trigger
- Drive Progress
- Value
Holds:
- The Sequencable Elements / The actual Data.
- The length (not for Impulses)
- Position
Instance count:
As many as you need to represent your animation.
Keyframes are the Lightest part of the system so it should be able to handle loads of them
Notes:
The data is stored on the keyframes as Dynamic Variables for easy editing through parenting the editing ui under a keyframe
Editing UI
Consists of some basic elements that are always present
- Title
- Description
- Dynamic Edit Ui
- Position and size inputs / displays
- Button: Return to Edit tool
- Button: Return to Track UI holder
Depending on the Sequencable Element that is defined under the current Track the Dynamic Edit Ui gets switched out to a fitting template that is stored in the manager
Dynamic Edit Ui - presets
These need to be tailor made for almost any data type. Some data types might be able to share Presets like many reference types maybe float, float2, float3, float4 by having some logic on the templates themselves.
Ideas
- Read the Position of the Readhead on a Keyframe and use that to make custom interpolation
- Calculate Absolute start and end position of keyframe (in relation to It's timeline) and remap those to be 0 to 1. Then remap the Readhead position to use as the "Keyframe progress". Use the resulting value to drive the value in the Spatial Value Source
KF needs UUID for regenerating the visuals
Fix weird float inputs on edit ui?:
you could try "FloatTextEditorParser" instead of primitive member editor. It might work better but not sure