From bcd6905e2760f82cf5e97cc3eb2ff7bbaa6a0ee5 Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Mon, 14 Aug 2017 21:57:12 +0700 Subject: [PATCH] More readable conversion warnings --- Assets/FlashTools/Docs/CHANGELOG.md | 1 + .../Postprocessors/SwfPostprocessor.cs | 76 ++++++++++++------- .../Editor/FTSwfTools/SwfContextExecuter.cs | 2 +- ProjectStuff/FlashTools.org | 2 +- 4 files changed, 51 insertions(+), 30 deletions(-) diff --git a/Assets/FlashTools/Docs/CHANGELOG.md b/Assets/FlashTools/Docs/CHANGELOG.md index 650230d..7b6620e 100644 --- a/Assets/FlashTools/Docs/CHANGELOG.md +++ b/Assets/FlashTools/Docs/CHANGELOG.md @@ -1,5 +1,6 @@ ###### Version 1.3.10 * Fix (conversion error: 'Error: scaleSelection: Argument number 1 is invalid.') +* More readable conversion warnings ###### Version 1.3.9 * Not save generated meshes in scene diff --git a/Assets/FlashTools/Scripts/Editor/FTEditor/Postprocessors/SwfPostprocessor.cs b/Assets/FlashTools/Scripts/Editor/FTEditor/Postprocessors/SwfPostprocessor.cs index 18992e8..decd8c0 100644 --- a/Assets/FlashTools/Scripts/Editor/FTEditor/Postprocessors/SwfPostprocessor.cs +++ b/Assets/FlashTools/Scripts/Editor/FTEditor/Postprocessors/SwfPostprocessor.cs @@ -75,7 +75,7 @@ namespace FTEditor.Postprocessors { } catch ( Exception e ) { Debug.LogErrorFormat( AssetDatabase.LoadMainAssetAtPath(swf_path), - "[FlashTools] Parsing swf error: {0}\nPath: {1}", + "[FlashTools] Parsing swf error: {0}\nSwf path: {1}", e.Message, swf_path); return false; } finally { @@ -90,7 +90,7 @@ namespace FTEditor.Postprocessors { }); return new SwfAssetData{ FrameRate = decoder.UncompressedHeader.FrameRate, - Symbols = LoadSymbols(library, decoder), + Symbols = LoadSymbols(swf_path, library, decoder), Bitmaps = LoadBitmaps(library)}; } @@ -101,10 +101,10 @@ namespace FTEditor.Postprocessors { // --------------------------------------------------------------------- static List LoadSymbols( - SwfLibrary library, SwfDecoder decoder) + string swf_path, SwfLibrary library, SwfDecoder decoder) { var symbols = new List(); - symbols.Add(LoadSymbol("_Stage_", library, decoder.Tags)); + symbols.Add(LoadSymbol(swf_path, "_Stage_", library, decoder.Tags)); var sprite_defs = library.Defines.Values .OfType() .Where(p => !string.IsNullOrEmpty(p.ExportName)) @@ -113,24 +113,33 @@ namespace FTEditor.Postprocessors { var def = sprite_defs[i]; var name = def.ExportName; var tags = def.ControlTags.Tags; - symbols.Add(LoadSymbol(name, library, tags)); + symbols.Add(LoadSymbol(swf_path, name, library, tags)); } return symbols; } static SwfSymbolData LoadSymbol( - string symbol_name, SwfLibrary library, List tags) + string swf_path, string symbol_name, SwfLibrary library, List tags) { + var warnings = new HashSet(); var disp_lst = new SwfDisplayList(); var executer = new SwfContextExecuter(library, 0, warning_msg => { - Debug.LogWarningFormat("[FlashTools] {0}", warning_msg); + warnings.Add(warning_msg); }); var symbol_frames = new List(); while ( executer.NextFrame(tags, disp_lst) ) { _progressBar.UpdateProgress( string.Format("swf symbols loading ({0})", symbol_name), (float)(executer.CurrentTag + 1) / tags.Count); - symbol_frames.Add(LoadSymbolFrameData(library, disp_lst)); + symbol_frames.Add(LoadSymbolFrameData(library, disp_lst, warning_msg => { + warnings.Add(warning_msg); + })); + } + foreach ( var warning in warnings ) { + Debug.LogWarningFormat( + AssetDatabase.LoadMainAssetAtPath(swf_path), + "[FlashTools] {0}\nSwf path: {1}", + warning, swf_path); } return new SwfSymbolData{ Name = symbol_name, @@ -138,7 +147,7 @@ namespace FTEditor.Postprocessors { } static SwfFrameData LoadSymbolFrameData( - SwfLibrary library, SwfDisplayList display_list) + SwfLibrary library, SwfDisplayList display_list, System.Action warning_log) { var frame = new SwfFrameData{ Anchor = display_list.FrameAnchors.Count > 0 @@ -154,7 +163,8 @@ namespace FTEditor.Postprocessors { 0, 0, null, - frame); + frame, + warning_log); } static SwfFrameData AddDisplayListToFrame( @@ -166,23 +176,26 @@ namespace FTEditor.Postprocessors { ushort parent_masked, ushort parent_mask, List parent_masks, - SwfFrameData frame) + SwfFrameData frame, + System.Action warning_log) { - var inst_filter_types = display_list.Instances.Values - .Where(p => p.Visible && p.FilterList.Filters.Count > 0) - .SelectMany(p => p.FilterList.Filters) - .Select(p => p.Type) - .Distinct(); - foreach ( var filter_type in inst_filter_types ) { - Debug.LogWarningFormat( - "[FlashTools] SwfSurfaceFilters. Unsupported filter type '{0}'", - filter_type); + if ( warning_log != null ) { + var inst_filter_types = display_list.Instances.Values + .Where(p => p.Visible && p.FilterList.Filters.Count > 0) + .SelectMany(p => p.FilterList.Filters) + .Select(p => p.Type) + .Distinct(); + foreach ( var filter_type in inst_filter_types ) { + warning_log(string.Format( + "Unsupported filter type '{0}'", + filter_type)); + } } var self_masks = new List(); foreach ( var inst in display_list.Instances.Values.Where(p => p.Visible) ) { CheckSelfMasks(self_masks, inst.Depth, frame); var child_matrix = parent_matrix * inst.Matrix .ToUMatrix(); - var child_blend_mode = parent_blend_mode * inst.BlendMode .ToBlendModeData(); + var child_blend_mode = parent_blend_mode * inst.BlendMode .ToBlendModeData(warning_log); var child_color_transform = parent_color_transform * inst.ColorTransform.ToColorTransData(); switch ( inst.Type ) { case SwfDisplayInstanceType.Shape: @@ -209,7 +222,8 @@ namespace FTEditor.Postprocessors { parent_mask, parent_masks, self_masks, - frame); + frame, + warning_log); break; default: throw new UnityException(string.Format( @@ -278,7 +292,8 @@ namespace FTEditor.Postprocessors { ushort parent_mask, List parent_masks, List self_masks, - SwfFrameData frame) + SwfFrameData frame, + System.Action warning_log) { var sprite_def = library.FindDefine(inst.Id); if ( sprite_def != null ) { @@ -299,7 +314,8 @@ namespace FTEditor.Postprocessors { : (inst.ClipDepth > 0 ? self_masks : null), - frame); + frame, + warning_log); } } @@ -360,7 +376,9 @@ namespace FTEditor.Postprocessors { return mat; } - public static SwfBlendModeData ToBlendModeData(this SwfBlendMode self) { + public static SwfBlendModeData ToBlendModeData( + this SwfBlendMode self, System.Action warning_log) + { switch ( self.Value ) { case SwfBlendMode.Mode.Normal: return new SwfBlendModeData(SwfBlendModeData.Types.Normal); @@ -387,9 +405,11 @@ namespace FTEditor.Postprocessors { case SwfBlendMode.Mode.Hardlight: return new SwfBlendModeData(SwfBlendModeData.Types.Hardlight); default: - Debug.LogWarningFormat( - "[FlashTools] SwfBlendMode. Unsupported blend mode '{0}'", - self.Value); + if ( warning_log != null ) { + warning_log(string.Format( + "Unsupported blend mode '{0}'", + self.Value)); + } return new SwfBlendModeData(SwfBlendModeData.Types.Normal); } } diff --git a/Assets/FlashTools/Scripts/Editor/FTSwfTools/SwfContextExecuter.cs b/Assets/FlashTools/Scripts/Editor/FTSwfTools/SwfContextExecuter.cs index 80c8cd7..ee4fd15 100644 --- a/Assets/FlashTools/Scripts/Editor/FTSwfTools/SwfContextExecuter.cs +++ b/Assets/FlashTools/Scripts/Editor/FTSwfTools/SwfContextExecuter.cs @@ -305,7 +305,7 @@ namespace FTSwfTools { void TagToWarningLog(SwfTagBase tag) { if ( WarningLog != null ) { - WarningLog(string.Format("SwfContextExecuter: {0}", tag)); + WarningLog(string.Format("{0}", tag)); } } diff --git a/ProjectStuff/FlashTools.org b/ProjectStuff/FlashTools.org index b90a07b..879fd01 100644 --- a/ProjectStuff/FlashTools.org +++ b/ProjectStuff/FlashTools.org @@ -54,7 +54,7 @@ https://gist.github.com/talecrafter/111ea3345911bd238f4998b4d5a04bf3 *** Улучшения **** TODO Сделать возможность задавать локальные настройки для папки, а не только глобальные **** TODO Note на ассет когда текстура сжата до максимального размера -**** TODO У ворнингов конверта нет контекста +**** DONE У ворнингов конверта нет контекста **** TODO Поддержка юнити-атласов **** TODO Поддержка задавать теги и сплит текстур на альфу для etc *** Баги