From 6830e4f22b1442389d881bd96f28a537827edb00 Mon Sep 17 00:00:00 2001 From: xxSeys1 Date: Fri, 18 Oct 2024 22:13:06 +0200 Subject: [PATCH 1/2] add hotkey for parent to new actor ctrl + g by default --- Source/Editor/Modules/UIModule.cs | 2 +- Source/Editor/Options/InputOptions.cs | 4 ++++ Source/Editor/Utilities/Utils.cs | 1 + Source/Editor/Windows/SceneTreeWindow.ContextMenu.cs | 2 +- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Source/Editor/Modules/UIModule.cs b/Source/Editor/Modules/UIModule.cs index 6a197c62f..f6d140e0e 100644 --- a/Source/Editor/Modules/UIModule.cs +++ b/Source/Editor/Modules/UIModule.cs @@ -556,7 +556,7 @@ namespace FlaxEditor.Modules cm.AddSeparator(); _menuEditSelectAll = cm.AddButton("Select all", inputOptions.SelectAll, Editor.SceneEditing.SelectAllScenes); _menuEditDeselectAll = cm.AddButton("Deselect all", inputOptions.DeselectAll, Editor.SceneEditing.DeselectAllScenes); - _menuCreateParentForSelectedActors = cm.AddButton("Create parent for selected actors", Editor.SceneEditing.CreateParentForSelectedActors); + _menuCreateParentForSelectedActors = cm.AddButton("Parent to new Actor", inputOptions.GroupSelectedActors, Editor.SceneEditing.CreateParentForSelectedActors); _menuEditFind = cm.AddButton("Find", inputOptions.Search, Editor.Windows.SceneWin.Search); cm.AddSeparator(); cm.AddButton("Game Settings", () => diff --git a/Source/Editor/Options/InputOptions.cs b/Source/Editor/Options/InputOptions.cs index 211e8e54f..76610f675 100644 --- a/Source/Editor/Options/InputOptions.cs +++ b/Source/Editor/Options/InputOptions.cs @@ -160,6 +160,10 @@ namespace FlaxEditor.Options [EditorDisplay("Scene"), EditorOrder(573)] public InputBinding PilotActor = new InputBinding(KeyboardKeys.None); + [DefaultValue(typeof(InputBinding), "Ctrl+G")] + [EditorDisplay("Scene"), EditorOrder(574)] + public InputBinding GroupSelectedActors = new InputBinding(KeyboardKeys.G, KeyboardKeys.Control); + #endregion #region Tools diff --git a/Source/Editor/Utilities/Utils.cs b/Source/Editor/Utilities/Utils.cs index 1487f1a59..7afe9ad0c 100644 --- a/Source/Editor/Utilities/Utils.cs +++ b/Source/Editor/Utilities/Utils.cs @@ -1432,6 +1432,7 @@ namespace FlaxEditor.Utilities inputActions.Add(options => options.SelectAll, Editor.Instance.SceneEditing.SelectAllScenes); inputActions.Add(options => options.DeselectAll, Editor.Instance.SceneEditing.DeselectAllScenes); inputActions.Add(options => options.Delete, Editor.Instance.SceneEditing.Delete); + inputActions.Add(options => options.GroupSelectedActors, Editor.Instance.SceneEditing.CreateParentForSelectedActors); inputActions.Add(options => options.Search, () => Editor.Instance.Windows.SceneWin.Search()); inputActions.Add(options => options.MoveActorToViewport, Editor.Instance.UI.MoveActorToViewport); inputActions.Add(options => options.AlignActorWithViewport, Editor.Instance.UI.AlignActorWithViewport); diff --git a/Source/Editor/Windows/SceneTreeWindow.ContextMenu.cs b/Source/Editor/Windows/SceneTreeWindow.ContextMenu.cs index 8d31b2744..2cbe56a27 100644 --- a/Source/Editor/Windows/SceneTreeWindow.ContextMenu.cs +++ b/Source/Editor/Windows/SceneTreeWindow.ContextMenu.cs @@ -133,7 +133,7 @@ namespace FlaxEditor.Windows contextMenu.AddSeparator(); - b = contextMenu.AddButton("Create parent for selected actors", Editor.SceneEditing.CreateParentForSelectedActors); + b = contextMenu.AddButton("Parent to new Actor", inputOptions.GroupSelectedActors, Editor.SceneEditing.CreateParentForSelectedActors); b.Enabled = canEditScene && hasSthSelected; b = contextMenu.AddButton("Create Prefab", Editor.Prefabs.CreatePrefab); From f37a595bc3954d0bb2518d9cee5f7806393c04ff Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Fri, 25 Oct 2024 18:24:14 +0200 Subject: [PATCH 2/2] Fix actors grouping to make shared parent at the cenetr of the group #2996 --- Source/Editor/Modules/SceneEditingModule.cs | 24 +++++++++++++++------ 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/Source/Editor/Modules/SceneEditingModule.cs b/Source/Editor/Modules/SceneEditingModule.cs index 13a920fa3..841f2b5dd 100644 --- a/Source/Editor/Modules/SceneEditingModule.cs +++ b/Source/Editor/Modules/SceneEditingModule.cs @@ -555,10 +555,20 @@ namespace FlaxEditor.Modules /// public void CreateParentForSelectedActors() { - Actor actor = new EmptyActor(); - Editor.SceneEditing.Spawn(actor, null, false); List selection = Editor.SceneEditing.Selection; var actors = selection.Where(x => x is ActorNode).Select(x => ((ActorNode)x).Actor); + var actorsCount = actors.Count(); + if (actorsCount == 0) + return; + Vector3 center = Vector3.Zero; + foreach (var actor in actors) + center += actor.Position; + center /= actorsCount; + Actor parent = new EmptyActor + { + Position = center, + }; + Editor.SceneEditing.Spawn(parent, null, false); using (new UndoMultiBlock(Undo, actors, "Reparent actors")) { for (int i = 0; i < selection.Count; i++) @@ -574,15 +584,15 @@ namespace FlaxEditor.Modules // Put created node as child of the Parent Node of node int parentOrder = node.Actor.OrderInParent; - actor.Parent = node.Actor.Parent; - actor.OrderInParent = parentOrder; + parent.SetParent(node.Actor.Parent, true, true); + parent.OrderInParent = parentOrder; } - node.Actor.Parent = actor; + node.Actor.SetParent(parent, true, false); } } } - Editor.SceneEditing.Select(actor); - Editor.Scene.GetActorNode(actor).TreeNode.StartRenaming(Editor.Windows.SceneWin, Editor.Windows.SceneWin.SceneTreePanel); + Editor.SceneEditing.Select(parent); + Editor.Scene.GetActorNode(parent).TreeNode.StartRenaming(Editor.Windows.SceneWin, Editor.Windows.SceneWin.SceneTreePanel); } ///