From f49a011ddba25d104a9264deca89bd99fe32feae Mon Sep 17 00:00:00 2001 From: Victor Chelaru Date: Wed, 17 Jan 2024 06:03:09 -0700 Subject: [PATCH] Added native FXB support Drag+drop file into global content is now tasked. Added FXB support in Glue. --- .../FlatRedBall/Content/ContentManager.cs | 5 +++ FRBDK/Glue/Glue/Managers/DragDropManager.cs | 6 ++- .../EffectPlugin/MainEffectPlugin.cs | 40 +++++++++++++++++++ .../Managers/AssetTypeInfoManager.cs | 35 ++++++++++++++++ 4 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 FRBDK/Glue/OfficialPlugins/EffectPlugin/MainEffectPlugin.cs create mode 100644 FRBDK/Glue/OfficialPlugins/EffectPlugin/Managers/AssetTypeInfoManager.cs diff --git a/Engines/FlatRedBallXNA/FlatRedBall/Content/ContentManager.cs b/Engines/FlatRedBallXNA/FlatRedBall/Content/ContentManager.cs index a29feec48..1076583fc 100644 --- a/Engines/FlatRedBallXNA/FlatRedBall/Content/ContentManager.cs +++ b/Engines/FlatRedBallXNA/FlatRedBall/Content/ContentManager.cs @@ -787,6 +787,11 @@ public T LoadFromFile(string assetName) #endregion + else if(typeof(T) == typeof(Effect)) + { + return base.Load(assetName); + } + #region else, exception! else diff --git a/FRBDK/Glue/Glue/Managers/DragDropManager.cs b/FRBDK/Glue/Glue/Managers/DragDropManager.cs index 28fb9d43e..3fd8afb7a 100644 --- a/FRBDK/Glue/Glue/Managers/DragDropManager.cs +++ b/FRBDK/Glue/Glue/Managers/DragDropManager.cs @@ -1617,7 +1617,11 @@ public void HandleDropExternalFileOnTreeNode(FilePath[] droppedFiles, ITreeNode } else { - AddExistingFileManager.Self.AddSingleFile(fileName, ref userCancelled); + TaskManager.Self.Add(() => + { + AddExistingFileManager.Self.AddSingleFile(fileName, ref userCancelled); + + }, "Add file " + fileName); } } diff --git a/FRBDK/Glue/OfficialPlugins/EffectPlugin/MainEffectPlugin.cs b/FRBDK/Glue/OfficialPlugins/EffectPlugin/MainEffectPlugin.cs new file mode 100644 index 000000000..e10248fa4 --- /dev/null +++ b/FRBDK/Glue/OfficialPlugins/EffectPlugin/MainEffectPlugin.cs @@ -0,0 +1,40 @@ +using FlatRedBall.Glue.Plugins; +using FlatRedBall.Glue.Plugins.ExportedImplementations; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using OfficialPlugins.EffectPlugin.Managers; +using System.ComponentModel.Composition; + +namespace OfficialPlugins.EffectPlugin +{ + [Export(typeof(PluginBase))] + public class MainEffectPlugin : PluginBase + { + public override string FriendlyName => "Effect Plugin"; + + public override void StartUp() + { + this.ReactToLoadedGlux += HandleLoadGlux; + this.ReactToUnloadedGlux += HandleUnloadGlux; + } + + private void HandleLoadGlux() + { + var project = GlueState.Self.CurrentGlueProject; + var isFna = false; + + if(isFna) + { + this.AddAssetTypeInfo(AssetTypeInfoManager.FxbEffectAssetTypeInfo); + } + } + + private void HandleUnloadGlux() + { + this.UnregisterAssetTypeInfos(); + } + } +} diff --git a/FRBDK/Glue/OfficialPlugins/EffectPlugin/Managers/AssetTypeInfoManager.cs b/FRBDK/Glue/OfficialPlugins/EffectPlugin/Managers/AssetTypeInfoManager.cs new file mode 100644 index 000000000..410b50955 --- /dev/null +++ b/FRBDK/Glue/OfficialPlugins/EffectPlugin/Managers/AssetTypeInfoManager.cs @@ -0,0 +1,35 @@ +using FlatRedBall.Glue.Elements; +using FlatRedBall.IO; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OfficialPlugins.EffectPlugin.Managers +{ + public static class AssetTypeInfoManager + { + static AssetTypeInfo fxbEffectAssetTypeInfo; + public static AssetTypeInfo FxbEffectAssetTypeInfo => + fxbEffectAssetTypeInfo = fxbEffectAssetTypeInfo ?? CreateFxbEffectAssetTypeInfo(); + + private static AssetTypeInfo CreateFxbEffectAssetTypeInfo() + { + var originalEffect = AvailableAssetTypes.Self.AllAssetTypes.FirstOrDefault(item => + item.Extension == "fx" && + item.QualifiedRuntimeTypeName.QualifiedType == "Microsoft.Xna.Framework.Graphics.Effect"); + + var fbxEffect = FileManager.CloneObject(originalEffect); + + fbxEffect.FriendlyName = "Effect (.fxb)"; + fbxEffect.Extension = "fxb"; + fbxEffect.MustBeAddedToContentPipeline = false; + fbxEffect.CanBeAddedToContentPipeline = false; + fbxEffect.ContentImporter = null; + fbxEffect.ContentProcessor = null; + + return fbxEffect; + } + } +}