Editor/misc/EditorEventsManager.cs
using System;
using System.Collections.Generic;
namespace Sandbox;
public class EditorEventsManager {
readonly List<string> _firedEventNames = new();
readonly object _lock = new();
public IReadOnlyList<string> AllEventNames { get; }
public IReadOnlyList<string> FiredEventNames {
get {
lock ( _lock )
return new List<string>(_firedEventNames);
}
}
public event Action<string> OnEventFired;
public EditorEventsManager() {
AllEventNames = new List<string> {
"assetsystem.newfolder",
"content.changed",
"compile.shader",
"package.changed",
"package.changed.installed",
"package.changed.uninstalled",
"package.changed.favourite",
"package.changed.rating",
"scene.session.save",
"scene.saved",
"actiongraph.saving",
"actiongraph.saved",
};
}
void RecordFired(string eventName) {
lock ( _lock )
_firedEventNames.Add(eventName);
try {
OnEventFired?.Invoke(eventName);
} catch ( Exception ex ) {
Log.Warning($"[EditorEventsManager] OnEventFired callback failed for '{eventName}': {ex.Message}");
}
}
// ─── Asset System ───────────────────────────────────────────────────────
[Event("assetsystem.newfolder", Priority = 100)]
void OnAssetsystemNewfolder() => RecordFired("assetsystem.newfolder");
[Event("content.changed", Priority = 100)]
void OnContentChanged(string _) => RecordFired("content.changed");
[Event("compile.shader", Priority = 100)]
void OnCompileShader(string _) => RecordFired("compile.shader");
[Event("package.changed", Priority = 100)]
void OnPackageChanged(Package _) => RecordFired("package.changed");
[Event("package.changed.installed", Priority = 100)]
void OnPackageChangedInstalled(Package _) => RecordFired("package.changed.installed");
[Event("package.changed.uninstalled", Priority = 100)]
void OnPackageChangedUninstalled(Package _) => RecordFired("package.changed.uninstalled");
[Event("package.changed.favourite", Priority = 100)]
void OnPackageChangedFavourite(Package _) => RecordFired("package.changed.favourite");
[Event("package.changed.rating", Priority = 100)]
void OnPackageChangedRating(Package _) => RecordFired("package.changed.rating");
// ─── Scenes ─────────────────────────────────────────────────────────────
[Event("scene.session.save", Priority = 100)]
void OnSceneSessionSave() => RecordFired("scene.session.save");
[Event("scene.saved", Priority = 100)]
void OnSceneSaved(Scene _) => RecordFired("scene.saved");
[Event("actiongraph.saving", Priority = 100)]
void OnActiongraphSaving(object _, GameResource __) => RecordFired("actiongraph.saving");
[Event("actiongraph.saved", Priority = 100)]
void OnActiongraphSaved(object _) => RecordFired("actiongraph.saved");
}