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();