Add support for changing target actor for scene animation actor track
#519
This commit is contained in:
@@ -100,28 +100,15 @@ namespace FlaxEditor.GUI.Timeline.Tracks
|
|||||||
{
|
{
|
||||||
base.OnShowAddContextMenu(menu);
|
base.OnShowAddContextMenu(menu);
|
||||||
|
|
||||||
|
OnSelectActorContextMenu(menu);
|
||||||
|
|
||||||
var actor = Actor;
|
var actor = Actor;
|
||||||
var selection = Editor.Instance.SceneEditing.Selection;
|
|
||||||
|
|
||||||
// Missing actor case
|
|
||||||
if (actor == null)
|
if (actor == null)
|
||||||
{
|
|
||||||
if (selection.Count == 1 && selection[0] is ActorNode actorNode && actorNode.Actor && IsActorValid(actorNode.Actor))
|
|
||||||
{
|
|
||||||
menu.AddButton("Select " + actorNode.Actor, OnClickedSelectActor).TooltipText = Utilities.Utils.GetTooltip(actorNode.Actor);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
menu.AddButton("No valid actor selected");
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
else if (selection.Count == 1)
|
|
||||||
{
|
|
||||||
// TODO: add option to change the actor to the selected one
|
|
||||||
}
|
|
||||||
|
|
||||||
var type = actor.GetType();
|
var type = actor.GetType();
|
||||||
|
menu.AddSeparator();
|
||||||
|
|
||||||
|
// Properties and events
|
||||||
if (AddProperties(this, menu, type) != 0)
|
if (AddProperties(this, menu, type) != 0)
|
||||||
menu.AddSeparator();
|
menu.AddSeparator();
|
||||||
if (AddEvents(this, menu, type) != 0)
|
if (AddEvents(this, menu, type) != 0)
|
||||||
@@ -146,6 +133,31 @@ namespace FlaxEditor.GUI.Timeline.Tracks
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void OnContextMenu(ContextMenu.ContextMenu menu)
|
||||||
|
{
|
||||||
|
base.OnContextMenu(menu);
|
||||||
|
|
||||||
|
menu.AddSeparator();
|
||||||
|
OnSelectActorContextMenu(menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnSelectActorContextMenu(ContextMenu.ContextMenu menu)
|
||||||
|
{
|
||||||
|
var actor = Actor;
|
||||||
|
var selection = Editor.Instance.SceneEditing.Selection;
|
||||||
|
foreach (var node in selection)
|
||||||
|
{
|
||||||
|
if (node is ActorNode actorNode && IsActorValid(actorNode.Actor) && actorNode.Actor != actor)
|
||||||
|
{
|
||||||
|
var b = menu.AddButton("Select " + actorNode.Actor, OnClickedSelectActor);
|
||||||
|
b.Tag = actorNode.Actor;
|
||||||
|
b.TooltipText = Utilities.Utils.GetTooltip(actorNode.Actor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
menu.AddButton("Select...", OnClickedSelect).TooltipText = "Opens actor picker dialog to select the target actor for this track";
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Adds the script track to this actor track.
|
/// Adds the script track to this actor track.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -169,7 +181,14 @@ namespace FlaxEditor.GUI.Timeline.Tracks
|
|||||||
/// <returns>True if it's valid, otherwise false.</returns>
|
/// <returns>True if it's valid, otherwise false.</returns>
|
||||||
protected virtual bool IsActorValid(Actor actor)
|
protected virtual bool IsActorValid(Actor actor)
|
||||||
{
|
{
|
||||||
return true;
|
return actor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Called when actor gets changed.
|
||||||
|
/// </summary>
|
||||||
|
protected virtual void OnActorChanged()
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnAddScriptTrack(ContextMenuButton button)
|
private void OnAddScriptTrack(ContextMenuButton button)
|
||||||
@@ -178,16 +197,25 @@ namespace FlaxEditor.GUI.Timeline.Tracks
|
|||||||
AddScriptTrack(script);
|
AddScriptTrack(script);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnClickedSelectActor()
|
private void OnClickedSelectActor(ContextMenuButton b)
|
||||||
{
|
{
|
||||||
var selection = Editor.Instance.SceneEditing.Selection;
|
SetActor((Actor)b.Tag);
|
||||||
if (selection.Count == 1 && selection[0] is ActorNode actorNode && actorNode.Actor && IsActorValid(actorNode.Actor))
|
}
|
||||||
{
|
|
||||||
var oldName = Name;
|
private void SetActor(Actor actor)
|
||||||
Rename(actorNode.Actor.Name);
|
{
|
||||||
using (new TrackUndoBlock(this, new RenameTrackAction(Timeline, this, oldName, Name)))
|
if (Actor == actor || !IsActorValid(actor))
|
||||||
Actor = actorNode.Actor;
|
return;
|
||||||
}
|
var oldName = Name;
|
||||||
|
Rename(actor.Name);
|
||||||
|
using (new TrackUndoBlock(this, new RenameTrackAction(Timeline, this, oldName, Name)))
|
||||||
|
Actor = actor;
|
||||||
|
OnActorChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnClickedSelect()
|
||||||
|
{
|
||||||
|
ActorSearchPopup.Show(this, PointFromScreen(FlaxEngine.Input.MouseScreenPosition), IsActorValid, SetActor);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnClickedSelectActor(Image image, MouseButton button)
|
private void OnClickedSelectActor(Image image, MouseButton button)
|
||||||
|
|||||||
@@ -694,6 +694,7 @@ namespace FlaxEditor.GUI.Timeline.Tracks
|
|||||||
var m = (CameraCutMedia)e.Media[i];
|
var m = (CameraCutMedia)e.Media[i];
|
||||||
m.StartFrame = stream.ReadInt32();
|
m.StartFrame = stream.ReadInt32();
|
||||||
m.DurationFrames = stream.ReadInt32();
|
m.DurationFrames = stream.ReadInt32();
|
||||||
|
m.UpdateThumbnails();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -829,6 +830,14 @@ namespace FlaxEditor.GUI.Timeline.Tracks
|
|||||||
return base.IsActorValid(actor) && actor is Camera;
|
return base.IsActorValid(actor) && actor is Camera;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void OnActorChanged()
|
||||||
|
{
|
||||||
|
base.OnActorChanged();
|
||||||
|
|
||||||
|
UpdateThumbnails();
|
||||||
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public override void OnSpawned()
|
public override void OnSpawned()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user