diff --git a/Assets/DevTests/Scenes/Scene.unity b/Assets/DevTests/Scenes/Scene.unity index 0ba053f..019313a 100644 --- a/Assets/DevTests/Scenes/Scene.unity +++ b/Assets/DevTests/Scenes/Scene.unity @@ -85,46 +85,6 @@ NavMeshSettings: cellSize: 0.16666667 manualCellSize: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &41841841 -GameObject: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 4 - m_Component: - - 4: {fileID: 41841843} - - 114: {fileID: 41841842} - m_Layer: 0 - m_Name: '[SwfManager]' - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &41841842 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 41841841} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f455e092ebcb64c3e94de2e2f2f7a614, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &41841843 -Transform: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 41841841} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 --- !u!1 &1173114888 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/FlashTools/Scripts/Editor/FTEditor/Editors/SwfAssetEditor.cs b/Assets/FlashTools/Scripts/Editor/FTEditor/Editors/SwfAssetEditor.cs index d52280d..9ed0d2e 100644 --- a/Assets/FlashTools/Scripts/Editor/FTEditor/Editors/SwfAssetEditor.cs +++ b/Assets/FlashTools/Scripts/Editor/FTEditor/Editors/SwfAssetEditor.cs @@ -42,7 +42,6 @@ namespace FTEditor.Editors { } static void ReconvertAsset(SwfAsset asset) { - asset.Converting = new SwfAsset.ConvertingState(); AssetDatabase.ImportAsset( AssetDatabase.GetAssetPath(asset)); } diff --git a/Assets/FlashTools/Scripts/Editor/FTEditor/Postprocessors/SwfAssetPostprocessor.cs b/Assets/FlashTools/Scripts/Editor/FTEditor/Postprocessors/SwfAssetPostprocessor.cs index d12d26f..cb9ae77 100644 --- a/Assets/FlashTools/Scripts/Editor/FTEditor/Postprocessors/SwfAssetPostprocessor.cs +++ b/Assets/FlashTools/Scripts/Editor/FTEditor/Postprocessors/SwfAssetPostprocessor.cs @@ -10,6 +10,8 @@ using FTRuntime; namespace FTEditor.Postprocessors { class SwfAssetPostprocessor : AssetPostprocessor { + static List _assetsForProcess = new List(); + static void OnPostprocessAllAssets( string[] imported_assets, string[] deleted_assets, @@ -18,35 +20,38 @@ namespace FTEditor.Postprocessors { { var asset_paths = imported_assets .Where(p => Path.GetExtension(p).ToLower().Equals(".asset")); - foreach ( var asset_path in asset_paths ) { - var asset = AssetDatabase.LoadAssetAtPath(asset_path); - if ( asset ) { - SwfAssetProcess(asset); - } + _assetsForProcess = asset_paths + .Select(p => AssetDatabase.LoadAssetAtPath(p)) + .Where(p => !!p) + .Distinct() + .ToList(); + if ( _assetsForProcess.Count > 0 ) { + EditorApplication.update += ProcessAfterImport; } } + static void ProcessAfterImport() { + EditorApplication.update -= ProcessAfterImport; + var assets = new List(_assetsForProcess); + _assetsForProcess.Clear(); + foreach ( var asset in assets ) { + SwfAssetProcess(asset); + } + AssetDatabase.SaveAssets(); + } + static void SwfAssetProcess(SwfAsset asset) { try { - if ( asset.Converting.Stage == 0 ) { - var new_data = ConfigureBitmaps( + var new_data = ConfigureBitmaps( + asset, + SwfEditorUtils.DecompressAsset(asset.Data)); + asset.Data = SwfEditorUtils.CompressAsset(new_data); + asset.Atlas = LoadAssetAtlas(asset); + if ( asset.Atlas ) { + ConfigureAtlas(asset); + ConfigureClips( asset, SwfEditorUtils.DecompressAsset(asset.Data)); - asset.Data = SwfEditorUtils.CompressAsset(new_data); - ++asset.Converting.Stage; - EditorUtility.SetDirty(asset); - AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(asset)); - } else if ( asset.Converting.Stage == 1 ) { - asset.Atlas = LoadAssetAtlas(asset); - if ( asset.Atlas ) { - ConfigureAtlas(asset); - ConfigureClips( - asset, - SwfEditorUtils.DecompressAsset(asset.Data)); - } - ++asset.Converting.Stage; - EditorUtility.SetDirty(asset); - AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(asset)); } } catch ( Exception e ) { Debug.LogErrorFormat( @@ -82,8 +87,8 @@ namespace FTEditor.Postprocessors { static SwfAssetData ConfigureBitmaps(SwfAsset asset, SwfAssetData data) { var textures = data.Bitmaps - .Where (p => p.Redirect == 0) - .Select (p => new KeyValuePair( + .Where (p => p.Redirect == 0) + .Select(p => new KeyValuePair( p.Id, LoadTextureFromData(p))) .ToList(); diff --git a/Assets/FlashTools/Scripts/Editor/FTEditor/Postprocessors/SwfPostprocessor.cs b/Assets/FlashTools/Scripts/Editor/FTEditor/Postprocessors/SwfPostprocessor.cs index 465d5f1..c8f5aec 100644 --- a/Assets/FlashTools/Scripts/Editor/FTEditor/Postprocessors/SwfPostprocessor.cs +++ b/Assets/FlashTools/Scripts/Editor/FTEditor/Postprocessors/SwfPostprocessor.cs @@ -14,6 +14,8 @@ using FTSwfTools.SwfTypes; namespace FTEditor.Postprocessors { class SwfPostprocessor : AssetPostprocessor { + static List _assetsForProcess = new List(); + static void OnPostprocessAllAssets( string[] imported_assets, string[] deleted_assets, @@ -29,12 +31,23 @@ namespace FTEditor.Postprocessors { "It means that you can't have more than 5 animation assets in the project."; EditorUtility.DisplayDialog(title, message, "Ok"); } else { - foreach ( var swf_path in swf_paths ) { - SwfFileProcess(swf_path); + _assetsForProcess = swf_paths.ToList(); + if ( _assetsForProcess.Count > 0 ) { + EditorApplication.update += ProcessAfterImport; } } } + static void ProcessAfterImport() { + EditorApplication.update -= ProcessAfterImport; + var swf_paths = new List(_assetsForProcess); + _assetsForProcess.Clear(); + foreach ( var swf_path in swf_paths ) { + SwfFileProcess(swf_path); + } + AssetDatabase.SaveAssets(); + } + static void SwfFileProcess(string swf_path) { var swf_asset_path = Path.ChangeExtension(swf_path, ".asset"); SwfEditorUtils.LoadOrCreateAsset(swf_asset_path, (swf_asset, created) => { @@ -49,9 +62,8 @@ namespace FTEditor.Postprocessors { static bool SafeLoadSwfAsset(string swf_path, SwfAsset swf_asset) { try { - var new_data = LoadSwfAssetData(swf_path); - swf_asset.Data = SwfEditorUtils.CompressAsset(new_data); - swf_asset.Converting = new SwfAsset.ConvertingState(); + var new_data = LoadSwfAssetData(swf_path); + swf_asset.Data = SwfEditorUtils.CompressAsset(new_data); return true; } catch ( Exception e ) { Debug.LogErrorFormat( diff --git a/Assets/FlashTools/Scripts/Editor/FTEditor/SwfEditorUtils.cs b/Assets/FlashTools/Scripts/Editor/FTEditor/SwfEditorUtils.cs index 93b43df..fd577ca 100644 --- a/Assets/FlashTools/Scripts/Editor/FTEditor/SwfEditorUtils.cs +++ b/Assets/FlashTools/Scripts/Editor/FTEditor/SwfEditorUtils.cs @@ -152,7 +152,6 @@ namespace FTEditor { if ( asset ) { if ( act(asset, false) ) { EditorUtility.SetDirty(asset); - AssetDatabase.ImportAsset(asset_path); } } else { asset = ScriptableObject.CreateInstance(); diff --git a/Assets/FlashTools/Scripts/FTRuntime/SwfAsset.cs b/Assets/FlashTools/Scripts/FTRuntime/SwfAsset.cs index 6392701..5a72ca6 100644 --- a/Assets/FlashTools/Scripts/FTRuntime/SwfAsset.cs +++ b/Assets/FlashTools/Scripts/FTRuntime/SwfAsset.cs @@ -4,10 +4,6 @@ using System.Collections.Generic; namespace FTRuntime { public class SwfAsset : ScriptableObject { - [System.Serializable] - public struct ConvertingState { - public int Stage; - } [HideInInspector] public byte[] Data; [SwfReadOnly] @@ -18,8 +14,6 @@ namespace FTRuntime { public SwfSettingsData Settings; [SwfDisplayName("Settings")] public SwfSettingsData Overridden; - [HideInInspector] - public ConvertingState Converting; void Reset() { Data = new byte[0]; @@ -27,7 +21,6 @@ namespace FTRuntime { Clips = new List(); Settings = SwfSettingsData.identity; Overridden = SwfSettingsData.identity; - Converting = new ConvertingState(); } } } \ No newline at end of file