Added option to have different Keyed Status / Icon via Details Keyframe Handler.
Current Keyframe Icon is completely replaced, but not yet deleted from Content or from the Style Set entry.
Added Sequencer->GetPropertyKeyedStatus, which uses the FSequencerPropertyKeyedStatus class to find the keyed status for a property.
The keyed status of a property is gotten through matching the property handle to the channel via its channel meta data. Two new member variables to the Channel MetaData were added to achieve this:
1) Sub Property Path: For structs, this is the relative path from the topmost property. E.g. for the pitch in a Transform property this would be "Rotation.Pitch"
2) Sub Property Path Map: some channels are re-used by multiple different structs and some might have different property names. The prime example is Transform and EulerTransform. These two have different names for their properties. FTransform uses "Translation" whereas FEulerTransform uses "Location", so these two must be differentiated via a map from the Struct's FName to the FName of the name it represents. This is also the case for Scale where FTransform uses "Scale3D" and FEulerTransform uses "Scale".
In addition to this, External handling is possible via ISequencerPropertyKeyedStatus::GetExternalHandler. This is used by Transform Track Editor to link the Scene Component properties (Relative Location/Rotation/Scale) so that these can also get their Keyframe Status properly, as the Transform Track itself can be in the Actor and not in the (Root) Scene Component where the properties are actually at.
#rb Max.Chen
#jira UE-188881, UE-145903, UE-193229
[CL 28307486 by juan portillo in ue5-main branch]
Main fix is to not use the Constraint Manager/Actor when a constraint is added to a level sequence. Only static constraints are now owned by the manager, animated constraints are owned by the section that the constraint channel is in, and we use a subsystem to gather both sets of these constraints as weak pointers so we can iterate over both groups. Kept the controller logic around but that now feeds into the sub system.
Also as part of this got rid of the soft object ptr to the constraint in the section, instead we just always use the Spawn copy which we reference via a Get/Set functions.
Since FNames may not be unique when combining level sequences, we now use a FGuid to identify Cosntraints.
We now have options to show Selected,Level Sequence, Current, and All constaints in drop down. As part of this we need to refresh the content more often(on time change) since new constraints may show up and we also no longer cache constraint names or state but get it dynamically.
When we add actors to Sequencer we look to see if it has any static contraints if so we change them to dynamic/owned by the LS and key them.
In the template/system we had issues with constraints not getting turned off when exiting so we make sure to do so if no bound object or when exiting. Also we now always 'init' constraints which involves setting up dependencies/tick functions as needed on every tick in order to handle orders changing and spawning.
As part of starting to fix cycle issues that happen with tick dependencies we no longer set up a child trs dependency but instead always tick the child in the GetFunction(better but need to revisit one last time).
Bake to Control Rig with Sequencer Interp Type
Fixed issue when smart keying constriant active or not not working when over a current, we now just toggle based upon previous value.
#jira UE-192070
#rb benoit.gadreau
[CL 28214862 by mike zyracki in ue5-main branch]
The repro in this case is adding binding overrides during runtime, then removing them once playback finished.
#jira UE-196249
#rb ludovic.chabant
[CL 28143057 by max chen in ue5-main branch]
This change tries to address various problems with the camera cut evaluation logic:
- Use the pre-animated state API to properly handle restoring things, instead of doing it partially "by hand". This removes the need for a few hacks like the carry-over of previous view-targets from one sequence to the next.
- Move the code from FSequencer and ULevelSequencePlayer into the track instance (and some related helper classes). Not only does this remove a bit of code duplication, this also lets us take a first step towards removing the dependency of evaluation code on the player API.
#rb max.chen
#jira UE-194692
[CL 28093600 by ludovic chabant in ue5-main branch]
Previous, the left tangent handle for the first key and the right tangent handle for the last key would be hidden.
This is useful for example, if you have pre and post infinity set to cycle, you can manipulate the last key's leave tangent so that it's smooth to the first key's arrive tangent.
#jira UE-194990
#rb mike.zyracki
[CL 27742330 by max chen in ue5-main branch]
As part of this, change display name tooltips on tracks back to using a function rather than a saved value so they can be dynamically specified. This needed Sequencer and ObjectBindingID passed to the function for context. This was only very recently changed to use saved values, so this shouldn't cause issues.
#jira UE-192507
[REVIEW] [at]ue-sequencer
[CL 27595620 by david bromberg in ue5-main branch]