Esempio n. 1
0
        private void OpenSelectImportPathDialog(BehaviorControlSetting setting)
        {
            var importFolderPath = Prefs.ImportDirectory;

            if (string.IsNullOrEmpty(importFolderPath))
            {
                importFolderPath = setting.GetImportFolderPath();
            }

            selectionDirectory = null;

            var directory = EditorUtility.OpenFolderPanel("Import", importFolderPath, string.Empty);

            if (string.IsNullOrEmpty(directory))
            {
                return;
            }

            if (!Directory.Exists(directory))
            {
                Debug.LogErrorFormat("Directory {0} not found.", importFolderPath);
            }

            selectionDirectory = directory;

            displayDirectory = GetRelativeUriFromAssetsFolder(directory);

            Prefs.ImportDirectory = directory;
        }
Esempio n. 2
0
        private string ConvertDataPathToAssetPath(BehaviorControlSetting setting, string dataPath)
        {
            var exportFolderPath = setting.GetExportFolderPath();

            var localPath  = dataPath.Substring(selectionDirectory.Length);
            var exportPath = PathUtility.Combine(exportFolderPath, localPath);
            var assetPath  = Path.ChangeExtension(exportPath, ".asset");

            return(assetPath);
        }
Esempio n. 3
0
        private void Generate(BehaviorControlSetting setting, Dictionary <string, ImportData> importData)
        {
            var success = true;

            var failedMessage = new StringBuilder();

            if (importData.Any())
            {
                failedMessage.AppendLine("Failed:");

                Action <string> onErrorCallback = message =>
                {
                    using (new DisableStackTraceScope(LogType.Error))
                    {
                        Debug.LogError(message);
                    }
                };

                var dataBuilder = new ImportDataConverter <TBehaviorData, TAction, TTarget, TCondition>(onErrorCallback);

                using (new AssetEditingScope())
                {
                    foreach (var item in importData)
                    {
                        var dataPath = item.Key;

                        var assetPath = ConvertDataPathToAssetPath(setting, dataPath);

                        var behaviorData = dataBuilder.Convert(dataPath, item.Value);

                        if (behaviorData != null)
                        {
                            var lastUpdate = File.GetLastWriteTimeUtc(item.Key);

                            var result = CreateBehaviorDataAsset(assetPath, behaviorData, lastUpdate);

                            if (!result)
                            {
                                failedMessage.AppendFormat("- {0}", assetPath).AppendLine();
                                success = false;
                            }
                        }
                    }
                }
            }

            if (success)
            {
                UnityConsole.Info("Generate asset complete.");
            }
            else
            {
                Debug.LogError(failedMessage.ToString());
            }
        }
Esempio n. 4
0
        private void DeleteMissingSourceAsset(BehaviorControlSetting setting, string[] filePaths)
        {
            var exportFolderPath = setting.GetExportFolderPath();

            var deleteList = new List <string>();

            var existPaths = filePaths.Select(x => ConvertDataPathToAssetPath(setting, x)).ToArray();

            var assets = UnityEditorUtility.FindAssetsByType <BehaviorControlAsset>("t:BehaviorControlAsset", new[] { exportFolderPath }).ToArray();

            foreach (var asset in assets)
            {
                var assetPath = AssetDatabase.GetAssetPath(asset);

                if (existPaths.Contains(assetPath))
                {
                    continue;
                }

                deleteList.Add(assetPath);
            }

            if (deleteList.Any())
            {
                var builder = new StringBuilder();

                builder.AppendLine("Delete missing source assets.");
                builder.AppendLine();

                using (new AssetEditingScope())
                {
                    foreach (var item in deleteList)
                    {
                        builder.AppendLine(item);

                        AssetDatabase.DeleteAsset(item);
                    }
                }

                Debug.LogWarning(builder.ToString());

                AssetDatabase.Refresh();
            }
        }
Esempio n. 5
0
        private Dictionary <string, ImportData> LoadImportData(BehaviorControlSetting setting, FileLoader.Format fileFormat)
        {
            var extension = FileLoader.GetFileExtension(fileFormat);

            if (!Directory.Exists(selectionDirectory))
            {
                return(null);
            }

            var files = Directory.EnumerateFiles(selectionDirectory, "*.*", SearchOption.AllDirectories)
                        .Where(x => Path.GetExtension(x) == extension)
                        .Select(x => PathUtility.ConvertPathSeparator(x))
                        .ToArray();

            var dictionary = new Dictionary <string, ImportData>();

            foreach (var file in files)
            {
                var assetPath = ConvertDataPathToAssetPath(setting, file);

                var behaviorControlAsset = AssetDatabase.LoadMainAssetAtPath(assetPath) as BehaviorControlAsset;

                if (behaviorControlAsset != null && behaviorControlAsset.LastUpdate.HasValue)
                {
                    var fileLastUpdate = File.GetLastWriteTimeUtc(file);

                    var assetLastUpdate = behaviorControlAsset.LastUpdate.Value;

                    if (fileLastUpdate <= assetLastUpdate)
                    {
                        continue;
                    }
                }

                var data = FileLoader.LoadFile <ImportData>(file, fileFormat);

                if (data != null)
                {
                    dictionary.Add(file, data);
                }
            }

            return(dictionary);
        }