diff --git a/Source/Editor/Content/Proxy/ParticleEmitterProxy.cs b/Source/Editor/Content/Proxy/ParticleEmitterProxy.cs
index 8c1204128..9ac4d698c 100644
--- a/Source/Editor/Content/Proxy/ParticleEmitterProxy.cs
+++ b/Source/Editor/Content/Proxy/ParticleEmitterProxy.cs
@@ -3,6 +3,9 @@
using System;
using FlaxEditor.Content.Create;
using FlaxEditor.Content.Thumbnails;
+using FlaxEditor.GUI.ContextMenu;
+using FlaxEditor.GUI.Timeline;
+using FlaxEditor.GUI.Timeline.Tracks;
using FlaxEditor.Viewport.Previews;
using FlaxEditor.Windows;
using FlaxEditor.Windows.Assets;
@@ -48,6 +51,59 @@ namespace FlaxEditor.Content
Editor.Instance.ContentImporting.Create(new ParticleEmitterCreateEntry(outputPath));
}
+ ///
+ public override void OnContentWindowContextMenu(ContextMenu menu, ContentItem item)
+ {
+ base.OnContentWindowContextMenu(menu, item);
+
+ if (item is BinaryAssetItem binaryAssetItem)
+ {
+ var button = menu.AddButton("Create Particle System", CreateParticleSystemClicked);
+ button.Tag = binaryAssetItem;
+ }
+ }
+
+ private void CreateParticleSystemClicked(ContextMenuButton obj)
+ {
+ var binaryAssetItem = (BinaryAssetItem)obj.Tag;
+ CreateParticleSystem(binaryAssetItem);
+ }
+
+ ///
+ /// Creates the particle system from the given particle emitter.
+ ///
+ /// The particle emitter item to use as a base for the particle system.
+ public static void CreateParticleSystem(BinaryAssetItem emitterItem)
+ {
+ var particleSystemName = emitterItem.ShortName + " Particle System";
+ var particleSystemProxy = Editor.Instance.ContentDatabase.GetProxy();
+ Editor.Instance.Windows.ContentWin.NewItem(particleSystemProxy, null, item => OnParticleSystemCreated(item, emitterItem), particleSystemName);
+ }
+
+ private static void OnParticleSystemCreated(ContentItem item, BinaryAssetItem particleItem)
+ {
+ var assetItem = (AssetItem)item;
+ var particleSystem = FlaxEngine.Content.LoadAsync(assetItem.ID);
+ if (particleSystem == null || particleSystem.WaitForLoaded())
+ {
+ Editor.LogError("Failed to load created particle system.");
+ return;
+ }
+
+ ParticleEmitter emitter = FlaxEngine.Content.LoadAsync(particleItem.ID);
+
+ ParticleSystemPreview tempPreview = new ParticleSystemPreview(false);
+ ParticleSystemTimeline timeline = new ParticleSystemTimeline(tempPreview);
+ timeline.Load(particleSystem);
+
+ var track = (ParticleEmitterTrack)timeline.NewTrack(ParticleEmitterTrack.GetArchetype());
+ track.Asset = emitter;
+ track.TrackMedia.DurationFrames = timeline.DurationFrames;
+ track.Rename(particleItem.ShortName);
+ timeline.AddTrack(track);
+ timeline.Save(particleSystem);
+ }
+
///
public override void OnThumbnailDrawPrepare(ThumbnailRequest request)
{