diff --git a/Source/Editor/CustomEditors/Dedicated/ActorEditor.cs b/Source/Editor/CustomEditors/Dedicated/ActorEditor.cs index 77619712f..3830ef14a 100644 --- a/Source/Editor/CustomEditors/Dedicated/ActorEditor.cs +++ b/Source/Editor/CustomEditors/Dedicated/ActorEditor.cs @@ -376,20 +376,46 @@ namespace FlaxEditor.CustomEditors.Dedicated return result; } + private TreeNode CreateDiffTree(Actor actor, CustomEditorPresenter presenter, LayoutElementsContainer layout) + { + var actorNode = Editor.Instance.Scene.GetActorNode(actor); + ValueContainer vc = new ValueContainer(ScriptMemberInfo.Null); + vc.SetType(new ScriptType(actorNode.EditableObject.GetType())); + vc.Add(actorNode.EditableObject); + var editor = CustomEditorsUtil.CreateEditor(vc, null, false); + editor.Initialize(presenter, layout, vc); + var node = ProcessDiff(editor, false); + layout.ClearLayout(); + foreach (var child in actor.Children) + { + var childNode = CreateDiffTree(child, presenter, layout); + if (childNode == null) + continue; + if (node == null) + node = CreateDiffNode(editor); + node.AddChild(childNode); + } + return node; + } + private void ViewChanges(Control target, Float2 targetLocation) { // Build a tree out of modified properties - var rootNode = ProcessDiff(this, false); - + var thisActor = (Actor)Values[0]; + var rootActor = thisActor.IsPrefabRoot ? thisActor : thisActor.GetPrefabRoot(); + var presenter = new CustomEditorPresenter(null); + var layout = new CustomElementsContainer(); + var rootNode = CreateDiffTree(rootActor, presenter, layout); + // Skip if no changes detected - if (rootNode == null || rootNode.ChildrenCount == 0) + if (rootNode == null) { var cm1 = new ContextMenu(); cm1.AddButton("No changes detected"); cm1.Show(target, targetLocation); return; } - + // Create context menu var cm = new PrefabDiffContextMenu(); cm.Tree.AddChild(rootNode);