public void Process(ProcessMetadata metadata, ProcessDictionary result) { var typeNameList = new List <string[]>(); var elementNameList = new List <string[]>(); var nameList = new HashSet <string>(); var targetNameList = new List <string>(); foreach (var target in _targets) { if (target == null) { continue; } GetNames(target.CloneTree().Children(), nameList); var tab = new string(' ', 8); typeNameList.Add(new[] { target.name, string.Join(",\n" + tab, nameList.Select(StringBuilderExtension.ConvertEnumName).ToArray()) }); elementNameList.Add(new[] { target.name, string.Join(",\n" + tab, nameList.Select(n => "\"" + n + "\"").ToArray()) }); nameList.Clear(); targetNameList.Add(target.name); } result.Add(ReplaceWords[0], TemplateUtility.GetFilePathFromFileName(ScriptName + ".cs") ?? "Assets"); result.Add(ReplaceWords[1], ScriptName); result.Add(ReplaceWords[2], typeNameList); result.Add(ReplaceWords[3], elementNameList); result.Add(ReplaceWords[4], targetNameList); }
public void Process(ProcessMetadata metadata, ProcessDictionary result) { var createPath = TemplateUtility.GetFilePathFromFileName(AssetsMenuItemScriptName + ".cs") ?? "Assets/TemplateEditorTool/Editor"; result.Add(ReplaceWords[(int)ReplaceWordType.Settings], BuildMenuItemList <TemplateSetting>()); result.Add(ReplaceWords[(int)ReplaceWordType.GroupSettings], BuildMenuItemList <TemplateGroupSetting>()); result.Add(ReplaceWords[(int)ReplaceWordType.CreatePath], createPath); result.Add(ReplaceWords[(int)ReplaceWordType.ScriptName], AssetsMenuItemScriptName); }
private void OnGUI() { _targetScriptableObject = EditorGUILayout.ObjectField(_targetScriptableObject, typeof(ScriptableObject), false) as ScriptableObject; if (_targetScriptableObject == null) { return; } if (GUILayout.Button("生成") == false) { return; } var empty = AssetDatabase.LoadAssetAtPath <ScriptableObject>(AssetDatabase.GUIDToAssetPath(EmptyScriptableObjectGuid)); var emptySerializeNames = GetSerializeNames(empty); var targetSerializeNames = GetSerializeNames(_targetScriptableObject); var targetUseSerializeNames = targetSerializeNames.Where(n => emptySerializeNames.Contains(n) == false).ToArray(); var type = _targetScriptableObject.GetType(); var targetName = type.Name; var path = Path.GetDirectoryName(AssetDatabase.GetAssetPath(_targetScriptableObject)); var customEditorName = targetName + "Editor"; var propertyGetterName = targetName + "PropertyGetter"; var result = new ProcessDictionary(); result.Add("TargetNamespace", "using " + type.Namespace + ";"); result.Add("CustomEditorCreatePath", TemplateUtility.GetFilePathFromFileName(customEditorName + ".cs") ?? path); result.Add("PropertyGetterCreatePath", TemplateUtility.GetFilePathFromFileName(propertyGetterName + ".cs") ?? path); result.Add("TargetScriptableObjectName", targetName); result.Add("CustomEditorName", customEditorName); result.Add("PropertyGetterName", propertyGetterName); result.Add("TypeNames", targetUseSerializeNames.Select(StringBuilderExtension.ConvertEnumName).ToArray()); result.Add("PropertyNames", targetUseSerializeNames); TemplateUtility.ExecuteGroupSetting(CustomEditorCreateGroupSettingGuid, result); }
public void Process(ProcessMetadata metadata, ProcessDictionary result) { // ファイルパス取得 var removeWord = "Resources/"; var removeWordLength = removeWord.Length; // Assets内にあるResourcesフォルダの全てのパスを取得 var resourcesPaths = Directory.GetDirectories("Assets", "Resources", SearchOption.AllDirectories); // Resourcesフォルダ内のファイルパスを取得 // TODO : 最適化? var ignorePatterns = _ignorePathPatterns.Select(pattern => new Regex(pattern, RegexOptions.Compiled)); var filePaths = ResourcesLoaderUtility.GetFilePaths(resourcesPaths, new string[] { ".meta" }) .Where(path => _ignoreFileNames.Contains(Path.GetFileNameWithoutExtension(path)) == false) .Where(path => ignorePatterns.Any(pattern => pattern.IsMatch(path)) == false) .OrderBy(path => Path.GetFileNameWithoutExtension(path)); var filePathsList = new List <string[]>(); var fileNamesList = new List <string[]>(); var methodsList = new List <string[]>(); var enumValues = Enum.GetValues(typeof(ResourcesLoaderUtility.LoadType)).Cast <int>().ToArray(); foreach (var parameter in _parameters) { // 指定した拡張子のファイルパスを取得 var paths = ResourcesLoaderUtility.FindByExtension(filePaths, parameter.TargetExtensions).Select(path => { var startIndex = path.IndexOf(removeWord) + removeWordLength; var length = path.Length - startIndex - Path.GetExtension(path).Length; return(path.Substring(startIndex, length)); }); if (paths.Any() == false) { continue; } // スペースは8文字に var tab = new string(' ', 8); filePathsList.Add(new string[] { parameter.TypeName, string.Join(",\n" + tab, paths.Select(path => "\"" + path + "\"").ToArray()) }); // ファイルパスからファイル名を取得 // TODO : StringBuilderExtension.ConvertEnumName var fileNames = paths.Select(Path.GetFileNameWithoutExtension).Select(StringBuilderExtension.ConvertEnumName); fileNamesList.Add(new string[] { parameter.TypeName, string.Join(",\n" + tab, fileNames.ToArray()) }); var intValue = (int)parameter.EditLoadType; for (int i = 0; i < enumValues.Length; ++i) { if ((intValue & enumValues[i]) == 0) { continue; } methodsList.Add(new string[] { string.Format(ResourcesLoaderUtility.ReturnNamesFormat[i], parameter.TypeName), ResourcesLoaderUtility.LoadNames[i], parameter.TypeName }); } } // 生成パス設定 result.Add(ReplaceWords[(int)ReplaceWordType.CreatePath], TemplateUtility.GetFilePathFromFileName(ScriptName + ".cs") ?? "Assets"); // スクリプト名設定 result.Add(ReplaceWords[(int)ReplaceWordType.ScriptName], ScriptName); // Usings { var usingsList = new List <IUsings>(_parameters.Length + 1); usingsList.Add(this); usingsList.AddRange(_parameters); var usingNames = new HashSet <string>(); foreach (var usings in usingsList) { foreach (var names in usings.usings) { usingNames.Add(names); } } result.Add( ReplaceWords[(int)ReplaceWordType.Usings], usingNames.ToArray() ); } // Enums { result.Add( ReplaceWords[(int)ReplaceWordType.Enums], fileNamesList ); } // Paths { result.Add( ReplaceWords[(int)ReplaceWordType.Paths], filePathsList ); } // Methods { result.Add( ReplaceWords[(int)ReplaceWordType.Methods], methodsList ); } }