| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461 | 
							- using UnityEditor;
 
- using UnityEngine;
 
- using System.Collections.Generic;
 
- using System.IO;
 
- using System.Runtime.Serialization.Formatters.Binary;
 
- using AssetBundleBrowser.AssetBundleDataSource;
 
- namespace AssetBundleBrowser
 
- {
 
-     [System.Serializable]
 
-     internal class AssetBundleBuildTab
 
-     {
 
-         const string k_BuildPrefPrefix = "ABBBuild:";
 
-         private string m_streamingPath = "Assets/StreamingAssets";
 
-         [SerializeField]
 
-         private bool m_AdvancedSettings;
 
-         [SerializeField]
 
-         private Vector2 m_ScrollPosition;
 
-         class ToggleData
 
-         {
 
-             internal ToggleData(bool s, 
 
-                 string title, 
 
-                 string tooltip,
 
-                 List<string> onToggles,
 
-                 BuildAssetBundleOptions opt = BuildAssetBundleOptions.None)
 
-             {
 
-                 if (onToggles.Contains(title))
 
-                     state = true;
 
-                 else
 
-                     state = s;
 
-                 content = new GUIContent(title, tooltip);
 
-                 option = opt;
 
-             }
 
-             //internal string prefsKey
 
-             //{ get { return k_BuildPrefPrefix + content.text; } }
 
-             internal bool state;
 
-             internal GUIContent content;
 
-             internal BuildAssetBundleOptions option;
 
-         }
 
-         private AssetBundleInspectTab m_InspectTab;
 
-         [SerializeField]
 
-         private BuildTabData m_UserData;
 
-         List<ToggleData> m_ToggleData;
 
-         ToggleData m_ForceRebuild;
 
-         ToggleData m_CopyToStreaming;
 
-         GUIContent m_TargetContent;
 
-         GUIContent m_CompressionContent;
 
-         internal enum CompressOptions
 
-         {
 
-             Uncompressed = 0,
 
-             StandardCompression,
 
-             ChunkBasedCompression,
 
-         }
 
-         GUIContent[] m_CompressionOptions =
 
-         {
 
-             new GUIContent("No Compression"),
 
-             new GUIContent("Standard Compression (LZMA)"),
 
-             new GUIContent("Chunk Based Compression (LZ4)")
 
-         };
 
-         int[] m_CompressionValues = { 0, 1, 2 };
 
-         internal AssetBundleBuildTab()
 
-         {
 
-             m_AdvancedSettings = false;
 
-             m_UserData = new BuildTabData();
 
-             m_UserData.m_OnToggles = new List<string>();
 
-             m_UserData.m_UseDefaultPath = true;
 
-         }
 
-         internal void OnDisable()
 
-         {
 
-             var dataPath = System.IO.Path.GetFullPath(".");
 
-             dataPath = dataPath.Replace("\\", "/");
 
-             dataPath += "/Library/AssetBundleBrowserBuild.dat";
 
-             BinaryFormatter bf = new BinaryFormatter();
 
-             FileStream file = File.Create(dataPath);
 
-             bf.Serialize(file, m_UserData);
 
-             file.Close();
 
-         }
 
-         internal void OnEnable(EditorWindow parent)
 
-         {
 
-             m_InspectTab = (parent as AssetBundleBrowserMain).m_InspectTab;
 
-             //LoadData...
 
-             var dataPath = System.IO.Path.GetFullPath(".");
 
-             dataPath = dataPath.Replace("\\", "/");
 
-             dataPath += "/Library/AssetBundleBrowserBuild.dat";
 
-             if (File.Exists(dataPath))
 
-             {
 
-                 BinaryFormatter bf = new BinaryFormatter();
 
-                 FileStream file = File.Open(dataPath, FileMode.Open);
 
-                 var data = bf.Deserialize(file) as BuildTabData;
 
-                 if (data != null)
 
-                     m_UserData = data;
 
-                 file.Close();
 
-             }
 
-             
 
-             m_ToggleData = new List<ToggleData>();
 
-             m_ToggleData.Add(new ToggleData(
 
-                 false,
 
-                 "Exclude Type Information",
 
-                 "Do not include type information within the asset bundle (don't write type tree).",
 
-                 m_UserData.m_OnToggles,
 
-                 BuildAssetBundleOptions.DisableWriteTypeTree));
 
-             m_ToggleData.Add(new ToggleData(
 
-                 false,
 
-                 "Force Rebuild",
 
-                 "Force rebuild the asset bundles",
 
-                 m_UserData.m_OnToggles,
 
-                 BuildAssetBundleOptions.ForceRebuildAssetBundle));
 
-             m_ToggleData.Add(new ToggleData(
 
-                 false,
 
-                 "Ignore Type Tree Changes",
 
-                 "Ignore the type tree changes when doing the incremental build check.",
 
-                 m_UserData.m_OnToggles,
 
-                 BuildAssetBundleOptions.IgnoreTypeTreeChanges));
 
-             m_ToggleData.Add(new ToggleData(
 
-                 false,
 
-                 "Append Hash",
 
-                 "Append the hash to the assetBundle name.",
 
-                 m_UserData.m_OnToggles,
 
-                 BuildAssetBundleOptions.AppendHashToAssetBundleName));
 
-             m_ToggleData.Add(new ToggleData(
 
-                 false,
 
-                 "Strict Mode",
 
-                 "Do not allow the build to succeed if any errors are reporting during it.",
 
-                 m_UserData.m_OnToggles,
 
-                 BuildAssetBundleOptions.StrictMode));
 
-             m_ToggleData.Add(new ToggleData(
 
-                 false,
 
-                 "Dry Run Build",
 
-                 "Do a dry run build.",
 
-                 m_UserData.m_OnToggles,
 
-                 BuildAssetBundleOptions.DryRunBuild));
 
-             m_ForceRebuild = new ToggleData(
 
-                 false,
 
-                 "Clear Folders",
 
-                 "Will wipe out all contents of build directory as well as StreamingAssets/AssetBundles if you are choosing to copy build there.",
 
-                 m_UserData.m_OnToggles);
 
-             m_CopyToStreaming = new ToggleData(
 
-                 false,
 
-                 "Copy to StreamingAssets",
 
-                 "After build completes, will copy all build content to " + m_streamingPath + " for use in stand-alone player.",
 
-                 m_UserData.m_OnToggles);
 
-             m_TargetContent = new GUIContent("Build Target", "Choose target platform to build for.");
 
-             m_CompressionContent = new GUIContent("Compression", "Choose no compress, standard (LZMA), or chunk based (LZ4)");
 
-             if(m_UserData.m_UseDefaultPath)
 
-             {
 
-                 ResetPathToDefault();
 
-             }
 
-         }
 
-         internal void OnGUI()
 
-         {
 
-             m_ScrollPosition = EditorGUILayout.BeginScrollView(m_ScrollPosition);
 
-             bool newState = false;
 
-             var centeredStyle = new GUIStyle(GUI.skin.GetStyle("Label"));
 
-             centeredStyle.alignment = TextAnchor.UpperCenter;
 
-             GUILayout.Label(new GUIContent("Example build setup"), centeredStyle);
 
-             //basic options
 
-             EditorGUILayout.Space();
 
-             GUILayout.BeginVertical();
 
-             // build target
 
-             using (new EditorGUI.DisabledScope (!AssetBundleModel.Model.DataSource.CanSpecifyBuildTarget)) {
 
-                 ValidBuildTarget tgt = (ValidBuildTarget)EditorGUILayout.EnumPopup(m_TargetContent, m_UserData.m_BuildTarget);
 
-                 if (tgt != m_UserData.m_BuildTarget)
 
-                 {
 
-                     m_UserData.m_BuildTarget = tgt;
 
-                     if(m_UserData.m_UseDefaultPath)
 
-                     {
 
-                         m_UserData.m_OutputPath = "AssetBundles/";
 
-                         m_UserData.m_OutputPath += m_UserData.m_BuildTarget.ToString();
 
-                         //EditorUserBuildSettings.SetPlatformSettings(EditorUserBuildSettings.activeBuildTarget.ToString(), "AssetBundleOutputPath", m_OutputPath);
 
-                     }
 
-                 }
 
-             }
 
-             ////output path
 
-             using (new EditorGUI.DisabledScope (!AssetBundleModel.Model.DataSource.CanSpecifyBuildOutputDirectory)) {
 
-                 EditorGUILayout.Space();
 
-                 GUILayout.BeginHorizontal();
 
-                 var newPath = EditorGUILayout.TextField("Output Path", m_UserData.m_OutputPath);
 
-                 if (!System.String.IsNullOrEmpty(newPath) && newPath != m_UserData.m_OutputPath)
 
-                 {
 
-                     m_UserData.m_UseDefaultPath = false;
 
-                     m_UserData.m_OutputPath = newPath;
 
-                     //EditorUserBuildSettings.SetPlatformSettings(EditorUserBuildSettings.activeBuildTarget.ToString(), "AssetBundleOutputPath", m_OutputPath);
 
-                 }
 
-                 GUILayout.EndHorizontal();
 
-                 GUILayout.BeginHorizontal();
 
-                 GUILayout.FlexibleSpace();
 
-                 if (GUILayout.Button("Browse", GUILayout.MaxWidth(75f)))
 
-                     BrowseForFolder();
 
-                 if (GUILayout.Button("Reset", GUILayout.MaxWidth(75f)))
 
-                     ResetPathToDefault();
 
-                 //if (string.IsNullOrEmpty(m_OutputPath))
 
-                 //    m_OutputPath = EditorUserBuildSettings.GetPlatformSettings(EditorUserBuildSettings.activeBuildTarget.ToString(), "AssetBundleOutputPath");
 
-                 GUILayout.EndHorizontal();
 
-                 EditorGUILayout.Space();
 
-                 newState = GUILayout.Toggle(
 
-                     m_ForceRebuild.state,
 
-                     m_ForceRebuild.content);
 
-                 if (newState != m_ForceRebuild.state)
 
-                 {
 
-                     if (newState)
 
-                         m_UserData.m_OnToggles.Add(m_ForceRebuild.content.text);
 
-                     else
 
-                         m_UserData.m_OnToggles.Remove(m_ForceRebuild.content.text);
 
-                     m_ForceRebuild.state = newState;
 
-                 }
 
-                 newState = GUILayout.Toggle(
 
-                     m_CopyToStreaming.state,
 
-                     m_CopyToStreaming.content);
 
-                 if (newState != m_CopyToStreaming.state)
 
-                 {
 
-                     if (newState)
 
-                         m_UserData.m_OnToggles.Add(m_CopyToStreaming.content.text);
 
-                     else
 
-                         m_UserData.m_OnToggles.Remove(m_CopyToStreaming.content.text);
 
-                     m_CopyToStreaming.state = newState;
 
-                 }
 
-             }
 
-             // advanced options
 
-             using (new EditorGUI.DisabledScope (!AssetBundleModel.Model.DataSource.CanSpecifyBuildOptions)) {
 
-                 EditorGUILayout.Space();
 
-                 m_AdvancedSettings = EditorGUILayout.Foldout(m_AdvancedSettings, "Advanced Settings");
 
-                 if(m_AdvancedSettings)
 
-                 {
 
-                     var indent = EditorGUI.indentLevel;
 
-                     EditorGUI.indentLevel = 1;
 
-                     CompressOptions cmp = (CompressOptions)EditorGUILayout.IntPopup(
 
-                         m_CompressionContent, 
 
-                         (int)m_UserData.m_Compression,
 
-                         m_CompressionOptions,
 
-                         m_CompressionValues);
 
-                     if (cmp != m_UserData.m_Compression)
 
-                     {
 
-                         m_UserData.m_Compression = cmp;
 
-                     }
 
-                     foreach (var tog in m_ToggleData)
 
-                     {
 
-                         newState = EditorGUILayout.ToggleLeft(
 
-                             tog.content,
 
-                             tog.state);
 
-                         if (newState != tog.state)
 
-                         {
 
-                             if (newState)
 
-                                 m_UserData.m_OnToggles.Add(tog.content.text);
 
-                             else
 
-                                 m_UserData.m_OnToggles.Remove(tog.content.text);
 
-                             tog.state = newState;
 
-                         }
 
-                     }
 
-                     EditorGUILayout.Space();
 
-                     EditorGUI.indentLevel = indent;
 
-                 }
 
-             }
 
-             // build.
 
-             EditorGUILayout.Space();
 
-             if (GUILayout.Button("Build") )
 
-             {
 
-                 EditorApplication.delayCall += ExecuteBuild;
 
-             }
 
-             GUILayout.EndVertical();
 
-             EditorGUILayout.EndScrollView();
 
-         }
 
-         private void ExecuteBuild()
 
-         {
 
-             if (AssetBundleModel.Model.DataSource.CanSpecifyBuildOutputDirectory) {
 
-                 if (string.IsNullOrEmpty(m_UserData.m_OutputPath))
 
-                     BrowseForFolder();
 
-                 if (string.IsNullOrEmpty(m_UserData.m_OutputPath)) //in case they hit "cancel" on the open browser
 
-                 {
 
-                     Debug.LogError("AssetBundle Build: No valid output path for build.");
 
-                     return;
 
-                 }
 
-                 if (m_ForceRebuild.state)
 
-                 {
 
-                     string message = "Do you want to delete all files in the directory " + m_UserData.m_OutputPath;
 
-                     if (m_CopyToStreaming.state)
 
-                         message += " and " + m_streamingPath;
 
-                     message += "?";
 
-                     if (EditorUtility.DisplayDialog("File delete confirmation", message, "Yes", "No"))
 
-                     {
 
-                         try
 
-                         {
 
-                             if (Directory.Exists(m_UserData.m_OutputPath))
 
-                                 Directory.Delete(m_UserData.m_OutputPath, true);
 
-                             if (m_CopyToStreaming.state)
 
-                             if (Directory.Exists(m_streamingPath))
 
-                                 Directory.Delete(m_streamingPath, true);
 
-                         }
 
-                         catch (System.Exception e)
 
-                         {
 
-                             Debug.LogException(e);
 
-                         }
 
-                     }
 
-                 }
 
-                 if (!Directory.Exists(m_UserData.m_OutputPath))
 
-                     Directory.CreateDirectory(m_UserData.m_OutputPath);
 
-             }
 
-             BuildAssetBundleOptions opt = BuildAssetBundleOptions.None;
 
-             if (AssetBundleModel.Model.DataSource.CanSpecifyBuildOptions) {
 
-                 if (m_UserData.m_Compression == CompressOptions.Uncompressed)
 
-                     opt |= BuildAssetBundleOptions.UncompressedAssetBundle;
 
-                 else if (m_UserData.m_Compression == CompressOptions.ChunkBasedCompression)
 
-                     opt |= BuildAssetBundleOptions.ChunkBasedCompression;
 
-                 foreach (var tog in m_ToggleData)
 
-                 {
 
-                     if (tog.state)
 
-                         opt |= tog.option;
 
-                 }
 
-             }
 
-             ABBuildInfo buildInfo = new ABBuildInfo();
 
-             buildInfo.outputDirectory = m_UserData.m_OutputPath;
 
-             buildInfo.options = opt;
 
-             buildInfo.buildTarget = (BuildTarget)m_UserData.m_BuildTarget;
 
-             buildInfo.onBuild = (assetBundleName) =>
 
-             {
 
-                 if (m_InspectTab == null)
 
-                     return;
 
-                 m_InspectTab.AddBundleFolder(buildInfo.outputDirectory);
 
-                 m_InspectTab.RefreshBundles();
 
-             };
 
-             AssetBundleModel.Model.DataSource.BuildAssetBundles (buildInfo);
 
-             AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate);
 
-             if(m_CopyToStreaming.state)
 
-                 DirectoryCopy(m_UserData.m_OutputPath, m_streamingPath);
 
-         }
 
-         private static void DirectoryCopy(string sourceDirName, string destDirName)
 
-         {
 
-             // If the destination directory doesn't exist, create it.
 
-             if (!Directory.Exists(destDirName))
 
-             {
 
-                 Directory.CreateDirectory(destDirName);
 
-             }
 
-             foreach (string folderPath in Directory.GetDirectories(sourceDirName, "*", SearchOption.AllDirectories))
 
-             {
 
-                 if (!Directory.Exists(folderPath.Replace(sourceDirName, destDirName)))
 
-                     Directory.CreateDirectory(folderPath.Replace(sourceDirName, destDirName));
 
-             }
 
-             foreach (string filePath in Directory.GetFiles(sourceDirName, "*.*", SearchOption.AllDirectories))
 
-             {
 
-                 var fileDirName = Path.GetDirectoryName(filePath).Replace("\\", "/");
 
-                 var fileName = Path.GetFileName(filePath);
 
-                 string newFilePath = Path.Combine(fileDirName.Replace(sourceDirName, destDirName), fileName);
 
-                 File.Copy(filePath, newFilePath, true);
 
-             }
 
-         }
 
-         private void BrowseForFolder()
 
-         {
 
-             m_UserData.m_UseDefaultPath = false;
 
-             var newPath = EditorUtility.OpenFolderPanel("Bundle Folder", m_UserData.m_OutputPath, string.Empty);
 
-             if (!string.IsNullOrEmpty(newPath))
 
-             {
 
-                 var gamePath = System.IO.Path.GetFullPath(".");
 
-                 gamePath = gamePath.Replace("\\", "/");
 
-                 if (newPath.StartsWith(gamePath) && newPath.Length > gamePath.Length)
 
-                     newPath = newPath.Remove(0, gamePath.Length+1);
 
-                 m_UserData.m_OutputPath = newPath;
 
-                 //EditorUserBuildSettings.SetPlatformSettings(EditorUserBuildSettings.activeBuildTarget.ToString(), "AssetBundleOutputPath", m_OutputPath);
 
-             }
 
-         }
 
-         private void ResetPathToDefault()
 
-         {
 
-             m_UserData.m_UseDefaultPath = true;
 
-             m_UserData.m_OutputPath = "AssetBundles/";
 
-             m_UserData.m_OutputPath += m_UserData.m_BuildTarget.ToString();
 
-             //EditorUserBuildSettings.SetPlatformSettings(EditorUserBuildSettings.activeBuildTarget.ToString(), "AssetBundleOutputPath", m_OutputPath);
 
-         }
 
-         //Note: this is the provided BuildTarget enum with some entries removed as they are invalid in the dropdown
 
-         internal enum ValidBuildTarget
 
-         {
 
-             //NoTarget = -2,        --doesn't make sense
 
-             //iPhone = -1,          --deprecated
 
-             //BB10 = -1,            --deprecated
 
-             //MetroPlayer = -1,     --deprecated
 
-             StandaloneOSXUniversal = 2,
 
-             StandaloneOSXIntel = 4,
 
-             StandaloneWindows = 5,
 
-             WebPlayer = 6,
 
-             WebPlayerStreamed = 7,
 
-             iOS = 9,
 
-             PS3 = 10,
 
-             XBOX360 = 11,
 
-             Android = 13,
 
-             StandaloneLinux = 17,
 
-             StandaloneWindows64 = 19,
 
-             WebGL = 20,
 
-             WSAPlayer = 21,
 
-             StandaloneLinux64 = 24,
 
-             StandaloneLinuxUniversal = 25,
 
-             WP8Player = 26,
 
-             StandaloneOSXIntel64 = 27,
 
-             BlackBerry = 28,
 
-             Tizen = 29,
 
-             PSP2 = 30,
 
-             PS4 = 31,
 
-             PSM = 32,
 
-             XboxOne = 33,
 
-             SamsungTV = 34,
 
-             N3DS = 35,
 
-             WiiU = 36,
 
-             tvOS = 37,
 
-             Switch = 38
 
-         }
 
-         [System.Serializable]
 
-         internal class BuildTabData
 
-         {
 
-             internal List<string> m_OnToggles;
 
-             internal ValidBuildTarget m_BuildTarget = ValidBuildTarget.StandaloneWindows;
 
-             internal CompressOptions m_Compression = CompressOptions.StandardCompression;
 
-             internal string m_OutputPath = string.Empty;
 
-             internal bool m_UseDefaultPath = true;
 
-         }
 
-     }
 
- }
 
 
  |