diff --git a/Assets/LDtkUnity/Editor/CustomEditor/LDtkJsonEditorCache.cs b/Assets/LDtkUnity/Editor/CustomEditor/LDtkJsonEditorCache.cs index bbab53fc..4655ba68 100644 --- a/Assets/LDtkUnity/Editor/CustomEditor/LDtkJsonEditorCache.cs +++ b/Assets/LDtkUnity/Editor/CustomEditor/LDtkJsonEditorCache.cs @@ -60,6 +60,10 @@ private void Reconstruct(LDtkProjectImporter importer, byte[] newHash) { LDtkProfiler.EndWriting(); } + + var preAction = new LDtkAssetProcessorActionCache(); + LDtkAssetProcessorInvoker.AddPreProcessProject(preAction, fromJson, importer.AssetName, importer.assetPath); + preAction.Process(); GlobalCache[_assetPath] = new LDtkJsonEditorCacheInstance() { diff --git a/Assets/LDtkUnity/Editor/Postprocessing/LDtkAssetProcessorInvoker.cs b/Assets/LDtkUnity/Editor/Postprocessing/LDtkAssetProcessorInvoker.cs index 9a2f738a..e87b0cda 100644 --- a/Assets/LDtkUnity/Editor/Postprocessing/LDtkAssetProcessorInvoker.cs +++ b/Assets/LDtkUnity/Editor/Postprocessing/LDtkAssetProcessorInvoker.cs @@ -20,12 +20,15 @@ private static void Reset() _preprocessors = null; _postprocessors = null; } - - public static void AddPreProcessProject(LDtkAssetProcessorActionCache cache, LdtkJson projectJson, string projectName) => - AddPreprocessActions(cache, LDtkPreprocessor.METHOD_PROJECT, new object[]{projectJson, projectName}); - - public static void AddPreProcessLevel(LDtkAssetProcessorActionCache cache, Level levelJson, LdtkJson projectJson, string projectName) => - AddPreprocessActions(cache, LDtkPreprocessor.METHOD_LEVEL, new object[]{levelJson, projectJson, projectName}); + + public static void AddPreProcessProject(LDtkAssetProcessorActionCache cache, LdtkJson projectJson, string projectName, string assetPath) => + AddPreprocessActions(cache, LDtkPreprocessor.METHOD_PROJECT, new object[] { projectJson, projectName, assetPath }); + + public static void AddPreProcessLevel(LDtkAssetProcessorActionCache cache, Level levelJson, LdtkJson projectJson, string projectName, string assetPath) => + AddPreprocessActions(cache, LDtkPreprocessor.METHOD_LEVEL, new object[] { levelJson, projectJson, projectName, assetPath }); + + public static void AddPreProcessTilesetDef(LDtkAssetProcessorActionCache cache, LDtkTilesetDefinitionWrapper tilesetDefinition, string assetPath) => + AddPreprocessActions(cache, LDtkPreprocessor.METHOD_TILESETDEF, new object[] { tilesetDefinition, assetPath }); public static void AddPostProcessProject(LDtkAssetProcessorActionCache cache, LDtkJsonImporter importer, GameObject projectObj) => AddPostprocessAction(cache, importer, LDtkPostprocessor.METHOD_PROJECT, new object[]{projectObj}); diff --git a/Assets/LDtkUnity/Editor/Postprocessing/LDtkPreprocessor.cs b/Assets/LDtkUnity/Editor/Postprocessing/LDtkPreprocessor.cs index 2b59b616..060c2b0b 100644 --- a/Assets/LDtkUnity/Editor/Postprocessing/LDtkPreprocessor.cs +++ b/Assets/LDtkUnity/Editor/Postprocessing/LDtkPreprocessor.cs @@ -8,7 +8,8 @@ public abstract class LDtkPreprocessor { internal const string METHOD_PROJECT = nameof(OnPreprocessProject); internal const string METHOD_LEVEL = nameof(OnPreprocessLevel); - + internal const string METHOD_TILESETDEF = nameof(OnPreprocessTilesetDefinition); + /// /// Use to perform operations before the project hierarchy is created.
/// This is only called for project files, not separate level files. @@ -19,7 +20,10 @@ public abstract class LDtkPreprocessor /// /// Name of the project file. /// - protected virtual void OnPreprocessProject(LdtkJson projectJson, string projectName) { } + /// + /// Path to the project file + /// + protected virtual void OnPreprocessProject(LdtkJson projectJson, string projectName, string assetPath) { } /// /// Use to perform operations before the level hierarchy is created.
@@ -34,8 +38,22 @@ protected virtual void OnPreprocessProject(LdtkJson projectJson, string projectN /// /// Name of the project file. /// - protected virtual void OnPreprocessLevel(Level level, LdtkJson projectJson, string projectName) { } + /// + /// Path to the level file + /// + protected virtual void OnPreprocessLevel(Level level, LdtkJson projectJson, string projectName, string assetPath) { } + /// + /// Use to perform operations before the tileset definition is created.
+ ///
+ /// + /// The tileset definition json. + /// + /// + /// Path to the tileset definition file + /// + protected virtual void OnPreprocessTilesetDefinition(LDtkTilesetDefinitionWrapper tilesetDefinition, string assetPath) { } + /// /// Override the order in which preprocessors are processed. /// All levels will only process after all projects. This is due to the way that Unity's import pipeline is structured. diff --git a/Assets/LDtkUnity/Editor/ScriptedImporter/LDtkLevelImporter.cs b/Assets/LDtkUnity/Editor/ScriptedImporter/LDtkLevelImporter.cs index 1b94bbfc..efd8d48b 100644 --- a/Assets/LDtkUnity/Editor/ScriptedImporter/LDtkLevelImporter.cs +++ b/Assets/LDtkUnity/Editor/ScriptedImporter/LDtkLevelImporter.cs @@ -127,10 +127,6 @@ private bool InitializeDefinitionObjects() private void BuildLevel() { - var preAction = new LDtkAssetProcessorActionCache(); - LDtkAssetProcessorInvoker.AddPreProcessLevel(preAction, _levelJson, _projectJson, AssetName); - preAction.Process(); - LDtkAssetProcessorActionCache assetProcess = new LDtkAssetProcessorActionCache(); @@ -190,6 +186,10 @@ private bool DeserializeAndAssign() Logger.LogError(e.ToString()); return false; } + + var preAction = new LDtkAssetProcessorActionCache(); + LDtkAssetProcessorInvoker.AddPreProcessLevel(preAction, _levelJson, _projectJson, AssetName, assetPath); + preAction.Process(); return true; } @@ -218,6 +218,10 @@ private static LdtkJson GetProjectJsonData(LDtkProjectImporter importer) return null; } + var preAction = new LDtkAssetProcessorActionCache(); + LDtkAssetProcessorInvoker.AddPreProcessProject(preAction, json, importer.AssetName, importer.assetPath); + preAction.Process(); + if (Jsons.IsNullOrEmpty()) { //Debug.Log("Added delayCall, this should only be called once per mass-reimport instance"); diff --git a/Assets/LDtkUnity/Editor/ScriptedImporter/LDtkProjectImporter.cs b/Assets/LDtkUnity/Editor/ScriptedImporter/LDtkProjectImporter.cs index 8fd12665..1b36673c 100644 --- a/Assets/LDtkUnity/Editor/ScriptedImporter/LDtkProjectImporter.cs +++ b/Assets/LDtkUnity/Editor/ScriptedImporter/LDtkProjectImporter.cs @@ -223,13 +223,17 @@ private static void CheckDefaultEditorBehaviour() private bool TryGetJson(out LdtkJson json) { json = FromJson(); - if (json != null) + if (json == null) { - return true; + Logger.LogError("LDtk: Json import error"); + return false; } - Logger.LogError("LDtk: Json import error"); - return false; + var preAction = new LDtkAssetProcessorActionCache(); + LDtkAssetProcessorInvoker.AddPreProcessProject(preAction, json, AssetName, assetPath); + preAction.Process(); + + return true; } private void CreateJsonAsset() @@ -306,15 +310,6 @@ private void BufferEditorCache() private void MainBuild(LdtkJson json) { - LDtkProfiler.BeginSample("SetupPreprocessors"); - var preAction = new LDtkAssetProcessorActionCache(); - LDtkAssetProcessorInvoker.AddPreProcessProject(preAction, json, AssetName); - LDtkProfiler.EndSample(); - - LDtkProfiler.BeginSample("RunPreprocessors"); - preAction.Process(); - LDtkProfiler.EndSample(); - LDtkProfiler.BeginSample("ImportProject"); LDtkBuilderProjectFactory factory = new LDtkBuilderProjectFactory(this); factory.Import(json); diff --git a/Assets/LDtkUnity/Editor/ScriptedImporter/LDtkTilesetImporter.cs b/Assets/LDtkUnity/Editor/ScriptedImporter/LDtkTilesetImporter.cs index 655b4e21..24d67a83 100644 --- a/Assets/LDtkUnity/Editor/ScriptedImporter/LDtkTilesetImporter.cs +++ b/Assets/LDtkUnity/Editor/ScriptedImporter/LDtkTilesetImporter.cs @@ -304,6 +304,11 @@ private bool DeserializeAndAssign() try { _definition = FromJson(); + + var preAction = new LDtkAssetProcessorActionCache(); + LDtkAssetProcessorInvoker.AddPreProcessTilesetDef(preAction, _definition, assetPath); + preAction.Process(); + _json = _definition.Def; } catch (Exception e) @@ -494,7 +499,13 @@ private static string PathToTexture(string assetPath, TilesetDefinition def = nu if (def == null) { - def = FromJson(assetPath).Def; + LDtkTilesetDefinitionWrapper wrapper = FromJson(assetPath); + + var preAction = new LDtkAssetProcessorActionCache(); + LDtkAssetProcessorInvoker.AddPreProcessTilesetDef(preAction, wrapper, assetPath); + preAction.Process(); + + def = wrapper.Def; } if (def.IsEmbedAtlas)