using UnityEngine; using UnityEditor; using System.IO; using System.Linq; using System.Collections.Generic; using System.Runtime.Serialization.Formatters.Binary; using Ionic.Zlib; namespace FlashTools.Internal { public static class SwfEditorUtils { // --------------------------------------------------------------------- // // Functions // // --------------------------------------------------------------------- public static void DoWithMixedValue(bool mixed, System.Action act) { var last_show_mixed_value = EditorGUI.showMixedValue; EditorGUI.showMixedValue = mixed; try { act(); } finally { EditorGUI.showMixedValue = last_show_mixed_value; } } public static void DoWithEnabledGUI(bool enabled, System.Action act) { var last_gui_enabled = GUI.enabled; GUI.enabled = enabled; try { act(); } finally { GUI.enabled = last_gui_enabled; } } public static SerializedProperty GetPropertyByName(SerializedObject obj, string name) { var prop = obj.FindProperty(name); if ( prop == null ) { throw new UnityException(string.Format( "SwfEditorUtils. Not found property: {0}", name)); } return prop; } public static void RemoveAllSubAssets(string asset_path) { var assets = AssetDatabase.LoadAllAssetsAtPath(asset_path); foreach ( var asset in assets ) { if ( !AssetDatabase.IsMainAsset(asset) ) { GameObject.DestroyImmediate(asset, true); } } } public static T LoadOrCreateAsset(string asset_path, System.Action act) where T : ScriptableObject { var asset = AssetDatabase.LoadAssetAtPath(asset_path); if ( asset ) { act(asset); } else { asset = ScriptableObject.CreateInstance(); act(asset); AssetDatabase.CreateAsset(asset, asset_path); } AssetDatabase.ImportAsset(asset_path); return asset; } public static byte[] CompressAsset(T asset) { var bytes = AssetToBytes(asset); var result = ZlibStream.CompressBuffer(bytes); return result; } public static T DecompressAsset(byte[] data) { var bytes = ZlibStream.UncompressBuffer(data); var result = BytesToAsset(bytes); return result; } static byte[] AssetToBytes(T asset) { var formatter = new BinaryFormatter(); using ( var stream = new MemoryStream() ) { formatter.Serialize(stream, asset); return stream.ToArray(); } } static T BytesToAsset(byte[] bytes) { var formatter = new BinaryFormatter(); using ( var stream = new MemoryStream(bytes) ) { return (T)formatter.Deserialize(stream); } } // --------------------------------------------------------------------- // // Internal // // --------------------------------------------------------------------- [MenuItem("Tools/FlashTools/Open settings...")] static void Tools_FlashTools_OpenSettings() { var settings_holder = SwfSettings.GetHolder(); Selection.objects = new Object[]{settings_holder}; } [MenuItem("Tools/FlashTools/Reimport all swf files")] static void Tools_FlashTools_ReimportAllSwfFiles() { var swf_paths = GetAllSwfFilePaths(); var title = "Reimport"; var message = string.Format( "Do you really want to reimport all ({0}) swf files?", swf_paths.Length); if ( EditorUtility.DisplayDialog(title, message, "Ok", "Cancel") ) { foreach ( var swf_path in swf_paths ) { AssetDatabase.ImportAsset(swf_path); } } } static string[] GetAllSwfFilePaths() { return AssetDatabase.GetAllAssetPaths() .Where(p => Path.GetExtension(p).ToLower().Equals(".swf")) .ToArray(); } } }