Commit Graph

1469 Commits

Author SHA1 Message Date
juan portillo
d4c6169b10 Sequencer:
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]
2023-09-27 22:48:56 -04:00
max chen
cce0d5b768 Sequencer: Change to OwnerModel->GetEditor() instead of Sequencer
#rnx
#rb andrew.rodham
#jira UE-196636

[CL 28254108 by max chen in ue5-main branch]
2023-09-26 19:03:18 -04:00
max chen
ac09c2531e Sequencer: Only add components and properties for selected actors if the given owner is actually selected
This fixes an issue where if you select an actor and then choose +Track component for another actor, they will both get a track. This should only happen if the actor is actually selected.

#jira UE-196636
#rb ludovic.chabant

[CL 28250405 by max chen in ue5-main branch]
2023-09-26 17:51:17 -04:00
juan portillo
80ebe0bec1 Sequencer:
- Added Support for keying Transform properties from Details Panel

#rb Andrew.Rodham

[CL 28190067 by juan portillo in ue5-main branch]
2023-09-25 11:52:59 -04:00
ludovic chabant
7f5cfeaee9 Sequencer: don't add a playback capability if it already exists
This can happen if Sequencer is re-focused on a sequence that it was already focused on.

#rb max.chen

[CL 28110790 by ludovic chabant in ue5-main branch]
2023-09-21 18:16:37 -04:00
ludovic chabant
2814fcabe7 Sequencer: use pre-animated state API in camera cut track instance, and remove directly use of player API
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]
2023-09-21 13:26:39 -04:00
max chen
412785e42e Sequencer: Fix static analysis
#jira UE-195725
#rb ludovic.chabant
#rnx

[CL 27960375 by max chen in ue5-main branch]
2023-09-18 11:49:41 -04:00
max chen
41869e2dd4 Sequencer: Fix property owner/container
PropertyContainer is what we look to for the setter function
PropertyOwner is the owner struct, which is where we look for permissions

The original fix was to find the property owner struct to determine DoesPropertyPassFilter. This broke finding setter functions for some properties.

#jira UE-195506
#rb andrew.rodham, ludovic.chabant

[CL 27916480 by max chen in ue5-main branch]
2023-09-15 11:15:12 -04:00
steve robb
51f3ea53ae Removed ChooseClass.h includes.
#rb trivial

[CL 27823723 by steve robb in ue5-main branch]
2023-09-13 05:43:01 -04:00
max chen
9916740658 Sequencer: Add commands for Clear Global Marked Frames and Show Marked Frames Globally
#jira UE-195090
#rb ludovic.chabant

[CL 27820082 by max chen in ue5-main branch]
2023-09-12 23:05:32 -04:00
max chen
c70d500105 Sequencer: Check whether the section is keyable (don't allow keying muted/disabled tracks or track rows)
#jira UE-194506
#rb mike.zyracki

[CL 27796467 by max chen in ue5-main branch]
2023-09-12 12:41:18 -04:00
david bromberg
ba6a2c427c Sequencer- Improve performance of searching for items in large sequences by keeping the Spawnables, Possessables, and ObjectBindings arrays sorted by FGuid and using BinarySearch where searching is necessary. Testing was performed on adds and searches in these arrays to ensure improvement (to searches). Adds are a bit more expensive, but should be alright in the vast majority of use cases. Iimprovement could be made if necessary to bulk additions by adding bulk operation functionality.
[REVIEW] [at]ue-sequencer
#jira UE-111561

[CL 27759752 by david bromberg in ue5-main branch]
2023-09-11 13:19:25 -04:00
max chen
60bf584b79 Sequencer: Refresh tree when toggling mute/solo from the menu
Follow up fix to 27669817

#rb andrew.rodham, matt.hoffman
#rnx
#jira UE-193500

[CL 27734278 by max chen in ue5-main branch]
2023-09-08 19:45:08 -04:00
max chen
1e890339cf Sequencer: Separate out clear and sort all nodes and descendants so that custom sort orders are retained. Custom sort orders will be removed when the user invokes Sort All Nodes
#rb andrew.rodham
#jira UE-194938

[CL 27716879 by max chen in ue5-main branch]
2023-09-08 13:05:07 -04:00
andrew rodham
a06c23c3c3 Fixed loc collision
#rb none
#jira UE-194928

[CL 27710143 by andrew rodham in ue5-main branch]
2023-09-08 09:52:06 -04:00
andrew rodham
02f64a43a5 Sequencer: Optimized mute/solo/lock columns by implementing caching and removing redundant UI delegation
+ Added a new row type for outliner trees that sets the background color once for the whole row. Previously this logic was implemented by each widget within the row (now each column widget, and the outliner view widget), which meant we re-ran the exact same logic (that was copied around) for background color computation multiple times per row. We now only do this once for the whole row.

  + Added a ModelID to all MVVM models. This is just a non-persistent serial uint32 unique to the instance and can be used for more efficient and stable keys than using the instance ptr.

  + SharedData is now a view model so it can support arbitrary extension and casting. This enables us to:
     + Add a new hierarchical cache extension that is easily accessible from any widget using GetSharedData()->CastThis<FOutlinerCacheExtension>()
     + Hierarchical Cache will perform a single pass on the entire MVVM hierarchy and allow clients to compute cached flags.
     + We have a separate cache for each of mute, solo and lock states that includes whether the item is set directly, and also whether it has settable children, and is implicitly set by a parent or child.

  + Added a dynamic extension iterator that allows anyone to iterate and filter the currently active dynamic extensions.
  + Moved Mute and Solo logic into the actual mute / solo extensions, rather than it being implemented in the NodeTree
  + Fixed header coloration for collapsed outliner rows that had selected keys within them. The logic here was incorrect and looked like an error in porting the code. It is now correct (and more efficient).

  - Only folders, objects, tracks and track rows now implement mute/solo. Channels and categories were never supported, and now no longer show as such on the UI.
  - Deleted the pre-existing XYZEditorExtension classes since they have all been ported to these new caches (the code is largely the same)


#jira UE-193500
#rb Max.Chen

[CL 27669850 by andrew rodham in ue5-main branch]
2023-09-07 08:25:43 -04:00
max chen
c2ab4f99c8 Curve Editor: Change left and right bounds for the transform tool to FFrameNumber
Add frame number customizations for tool properties panel
Moved SCurveEditorToolProperties.h to public
Fixed tool properties not getting updated on reselection

#jira UE-194391
#rb mike.zyracki

[CL 27643380 by max chen in ue5-main branch]
2023-09-06 13:53:40 -04:00
juan portillo
d1e63f4c80 Sequencer:
- Export LayerBarModel

#rb Andrew.Rodham

[CL 27597355 by juan portillo in ue5-main branch]
2023-09-05 11:15:14 -04:00
david bromberg
5c5b2be807 Sequencer- Add fixup UX logic for Component Material Parameter and Material Switcher tracks. We now detect when a track bound to a material by slot name no longer matches both slot name and material index, and allow the user to either automatically or manually rebind the track to the material slot and index.
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]
2023-09-05 10:15:32 -04:00
mike zyracki
c8ced1870e Add cached expansion state values to the curve editor tree so expansion state is restored when selection changes instead of defaulting automatically to a closed state. There are just saved per session, not in any asset. Added an option path name string to ICurveEditorTreeItemExtension's, which is then used as a hash to store the expansion state, since the curve model id's aren't permanent between selections.
#jira UE-156007
#rb max.chen

[CL 27565754 by mike zyracki in ue5-main branch]
2023-09-01 16:39:53 -04:00
andrew rodham
d10154582a Sequencer: Optimized sequencer column logic slightly
- Removed excessive allocations caused by continuously populating TSets
  - Changed column widget to cache IsActive et. al. on Tick so it only gets called once per-frame

#rb Max.Chen
#jira UE-193500

[CL 27384929 by andrew rodham in ue5-main branch]
2023-08-25 14:08:36 -04:00
max chen
c825230fd2 Sequencer: Fix recursion in GetHandleToObject
#rb andrew.rodham

[CL 27383210 by max chen in ue5-main branch]
2023-08-25 13:39:05 -04:00
david bromberg
86154d2d61 Sequencer- Adding a track for animating custom primitive data on PrimitiveComponents.
Custom primitive data is an alternative way of driving material parameters. It allows you to map any of 36 numbered float parameters on a PrimitiveComponent to one or more material parameters across multiple meshes and materials. You can apportion between 1-4 slots in a row to handle anything from scalar to color parameters. Previously these could only be set via code or blueprint, but now these can be animated in Sequencer.

A custom primitive data track can be added to a Primitive Component binding track in Sequencer.
From there, you can choose to add a float, Vector2D, Vector, or Color parameter, choosing the custom primitive data start index the parameter starts from. The UI will also scan the primitive component for material parameters currently mapped to any index to give you helpful suggestions for which parameters you may want to add. These parameters can then be animated and blended just like any parameter of that type.

As this was a new track, we had to build a new track editor, track, and section. The section inherits from MovieSceneParameterSection, as this was already capable of animating parameters of these types. We use the unique start index of the parameter as the name for these parameter sections.

To create the dynamic tooltips that show which material parameters the custom primitive data entries are mapped to, a change was made to the tooltiptext channel metadata to take a lambda instead of just an FText. This allows the tooltips to be generated live, so any changes to materials will be taken into account in the tooltip.

A new screenshot autotest using the feature was also created.

#jira UE-158852
[REVIEW] [at]ue-sequencer

[CL 27300987 by david bromberg in ue5-main branch]
2023-08-23 05:36:36 -04:00
max chen
1225491497 Sequencer: Added missing EditAnywhere tags for ExportFBXParams which was preventing it from being visible in blueprints
#rb mike.zyracki

[CL 27278600 by max chen in ue5-main branch]
2023-08-22 13:49:55 -04:00
max chen
1a4d93b80f Sequencer: Outer the entity system linker to the transient package
Add SetWorld/GetWorld on the linker so that systems would get the player context world instead of the linker world, which is the transient package.

#jira UE-192690
#rb andrew.rodham

[CL 27277285 by max chen in ue5-main branch]
2023-08-22 13:09:18 -04:00