From e721fbd89fa9a2c7a097b1279b2a9beb36ef675e Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Tue, 13 Jan 2026 14:21:32 +0100 Subject: [PATCH] Add editor status message about amount of selected actors --- Source/Editor/Modules/SceneEditingModule.cs | 16 ++++++++ Source/Editor/Modules/UIModule.cs | 41 ++++++++++++++++++--- 2 files changed, 51 insertions(+), 6 deletions(-) diff --git a/Source/Editor/Modules/SceneEditingModule.cs b/Source/Editor/Modules/SceneEditingModule.cs index c36866bc3..f654cbbe3 100644 --- a/Source/Editor/Modules/SceneEditingModule.cs +++ b/Source/Editor/Modules/SceneEditingModule.cs @@ -16,6 +16,8 @@ namespace FlaxEditor.Modules /// public sealed class SceneEditingModule : EditorModule { + private int _lastSelectionStatus = 0; + /// /// The selected objects. /// @@ -193,6 +195,20 @@ namespace FlaxEditor.Modules Undo.AddAction(new SelectionChangeAction(before, Selection.ToArray(), OnSelectionUndo)); OnSelectionChanged(); + + // Display amount of selected actors on the status bar + Editor.UI.RemoveStatusMessage(_lastSelectionStatus); + var objects = Selection.Count; + var actors = CountActors(Selection); + _lastSelectionStatus = Editor.UI.AddStatusMessage($"Selected {objects} {(objects > 1 ? "objects" : "object")} (total {actors} {(actors > 1 ? "actors" : "actor")})"); + } + + private int CountActors(List nodes) + { + int result = 0; + foreach (var node in nodes) + result += 1 + CountActors(node.ChildNodes); + return result; } private void OnSelectionUndo(SceneGraphNode[] toSelect) diff --git a/Source/Editor/Modules/UIModule.cs b/Source/Editor/Modules/UIModule.cs index c02992041..66e83a6e9 100644 --- a/Source/Editor/Modules/UIModule.cs +++ b/Source/Editor/Modules/UIModule.cs @@ -29,10 +29,18 @@ namespace FlaxEditor.Modules /// public sealed class UIModule : EditorModule { + private struct Status + { + public int ID; + public string Text; + public DateTime EndTime; + } + private Label _progressLabel; private ProgressBar _progressBar; private Button _outputLogButton; - private List> _statusMessages; + private List _statusMessages; + private int _statusID = 1; private ContentStats _contentStats; private bool _progressFailed; @@ -340,7 +348,7 @@ namespace FlaxEditor.Modules string text; if (_statusMessages != null && _statusMessages.Count != 0) - text = _statusMessages[0].Key; + text = _statusMessages[0].Text; else if (Editor.StateMachine.CurrentState.Status != null) text = Editor.StateMachine.CurrentState.Status; else if (contentStats.LoadingAssetsCount != 0) @@ -362,13 +370,34 @@ namespace FlaxEditor.Modules /// Adds the status bar message text to be displayed as a notification. /// /// The message to display. - public void AddStatusMessage(string message) + /// The ID of that status message (unique). Can be used to hide it manually. + public int AddStatusMessage(string message) { if (_statusMessages == null) - _statusMessages = new List>(); - _statusMessages.Add(new KeyValuePair(message, DateTime.Now + TimeSpan.FromSeconds(3.0f))); + _statusMessages = new List(); + var status = new Status { ID = _statusID++, Text = message, EndTime = DateTime.Now + TimeSpan.FromSeconds(3.0f) }; + _statusMessages.Add(status); if (_statusMessages.Count == 1) UpdateStatusBar(); + return status.ID; + } + + /// + /// Removes a specific status message once it's not needed anymore, + /// + /// The ID of the message returned by . + public void RemoveStatusMessage(int id) + { + if (_statusMessages == null || id == 0) + return; + for (var i = 0; i < _statusMessages.Count; i++) + { + if (_statusMessages[i].ID == id) + { + _statusMessages.RemoveAt(i); + return; + } + } } internal bool ProgressVisible @@ -495,7 +524,7 @@ namespace FlaxEditor.Modules /// public override void OnUpdate() { - if (_statusMessages != null && _statusMessages.Count > 0 && _statusMessages[0].Value - DateTime.Now < TimeSpan.Zero) + if (_statusMessages != null && _statusMessages.Count > 0 && _statusMessages[0].EndTime - DateTime.Now < TimeSpan.Zero) { _statusMessages.RemoveAt(0); UpdateStatusBar();